diff --git a/Changelog.yaml b/Changelog.yaml index 7dde319f65..afe40af4b3 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -19,6 +19,162 @@ # new recipes: # - title: +- version: 0.9.12 + date: 2012-12-28 + + new features: + - title: "Drivers for Kibano e-reader and Slick ER-700-2" + tickets: [1093570, 1093732] + + - title: "Add support for downloading metadata from Amazon Brazil." + tickets: [1092594] + + - title: "Copy to library: Allow specifying the destination library by path." + tickets: [1093231] + + - title: "When adding empty books, allow setting of the series for the new books. Also select the newly added book records after adding." + + - title: "PDF Output: Add a checkbox to override the page size defined by the output profile. This allows you to specify a custom page size even if the output profile is not set to default." + + - title: "Add usb ids for newer kindle fire to the linux mtp driver" + + bug fixes: + - title: "Linux: Temporarily redirect stdout to get rid of the annoying and pointless message about mtpz during libmtp initialization" + + - title: "Fix multiple 'All column' coloring rules not being applied" + tickets: [1093574] + + - title: "Use custom icons in the content server as well." + tickets: [1092098] + + improved recipes: + - La Voce + - Harpers Magazine (printed edition) + - Pajamas Media + - NSFW corp + - The Hindu + - Nikkei News + + new recipes: + - title: Various Ukranian news sources + author: rpalyvoda + +- version: 0.9.11 + date: 2012-12-21 + + new features: + - title: "Merry Christmas and Happy Holidays to all ☺" + + - title: "When connecting to MTP devices such as the Kindle Fire HD or the Nook HD, speed up the process by ignoring some folders." + description: "calibre will now ignore folders for music, video, pictures, etc. when scanning the device. This can substantially speed up the connection process if you have thousands of non-ebook files on the device. The list of folders to be ignored can be customized by right clicking on the device icon in calibre and selecting 'Configure this device'." + + - title: "Allow changing the icons for categories in the Tag Browser. Right click on a category and choose 'Change category icon'." + tickets: [1092098] + + - title: "Allow setting the color of all columns with a single rule in Preferences->Look & Feel->Column Coloring" + + - title: "MOBI: When reading metadata from mobi files, put the contents of the ASIN field into an identifier named mobi-asin. Note that this value is not used when downloading metadata as it is not possible to know which (country specific) amazon website the ASIN comes from." + tickets: [1090394] + + bug fixes: + - title: "Windows build: Fix a regression in 0.9.9 that caused calibre to not start on some windows system that were missing the VC.90 dlls (some older XP systems)" + + - title: "Kobo driver: Workaround for invalid shelves created by bugs in the Kobo server" + tickets: [1091932] + + - title: "Metadata download: Fix cover downloading from non-US amazon sites broken by a website change." + tickets: [1090765] + + improved recipes: + - Le Devoir + - Nin online + - countryfile + - Birmingham Post + - The Independent + - Various Polish news sources + + new recipes: + - title: MobileBulgaria + author: Martin Tsanchev + + - title: Various Polish news sources + author: fenuks + +- version: 0.9.10 + date: 2012-12-14 + + new features: + - title: "Drivers for Nextbook Premium 8 se, HTC Desire X and Emerson EM 543" + tickets: [1088149, 1088112, 1087978] + + bug fixes: + - title: "Fix rich text delegate not working with Qt compiled in debug mode." + tickets: [1089011] + + - title: "When deleting all books in the library, blank the book details panel" + + - title: "Conversion: Fix malformed values in the bgcolor attribute causing conversion to abort" + + - title: "Conversion: Fix heuristics applying incorrect style in some circumstances" + tickets: [1066507] + + - title: "Possible fix for 64bit calibre not starting up on some Windows systems" + tickets: [1087816] + + improved recipes: + - Sivil Dusunce + - Anchorage Daily News + - Le Monde + - Harpers + + new recipes: + - title: Titanic + author: Krittika Goyal + +- version: 0.9.9 + date: 2012-12-07 + + new features: + - title: "64 bit build for windows" + type: major + description: "calibre now has a 64 bit version for windows, available at: http://calibre-ebook.com/download_windows64 The 64bit build is not limited to using only 3GB of RAM when converting large/complex documents. It may also be slightly faster for some tasks. You can have both the 32 bit and the 64 bit build installed at the same time, they will use the same libraries, plugins and settings." + + - title: "Content server: Make the identifiers in each books metadata clickable." + tickets: [1085726] + + bug fixes: + - title: "EPUB Input: Fix an infinite loop while trying to recover a damaged EPUB file." + tickets: [1086917] + + - title: "KF8 Input: Fix handling of links in files that link to the obsolete tags instead of tags with an id attribute." + tickets: [1086705] + + - title: "Conversion: Fix a bug in removal of invalid entries from the spine, where not all invalid entries were removed, causing conversion to fail." + tickets: [1086054] + + - title: "KF8 Input: Ignore invalid flow references in the KF8 document instead of erroring out on them." + tickets: [1085306] + + - title: "Fix command line output on linux systems with incorrect LANG/LC_TYPE env vars." + tickets: [1085103] + + - title: "KF8 Input: Fix page breaks specified using the data-AmznPageBreak attribute being ignored by calibre." + + - title: "PDF Output: Fix custom size field not accepting fractional numbers as sizes" + + - title: "Get Books: Update libre.de and publio for website changes" + + - title: "Wireless driver: Increase timeout interval, and when allocating a random port try 9090 first" + + improved recipes: + - New York Times + - Weblogs SL + - Zaman Gazetesi + - Aksiyon Dergisi + - Endgadget + - Metro UK + - Heise Online + - version: 0.9.8 date: 2012-11-30 diff --git a/manual/develop.rst b/manual/develop.rst index b9fba195d3..719c876b33 100644 --- a/manual/develop.rst +++ b/manual/develop.rst @@ -49,7 +49,7 @@ All the |app| python code is in the ``calibre`` package. This package contains t * Metadata reading, writing, and downloading is all in ebooks.metadata * Conversion happens in a pipeline, for the structure of the pipeline, see :ref:`conversion-introduction`. The pipeline consists of an input - plugin, various transforms and an output plugin. The code constructs + plugin, various transforms and an output plugin. The that code constructs and drives the pipeline is in plumber.py. The pipeline works on a representation of an ebook that is like an unzipped epub, with manifest, spine, toc, guide, html content, etc. The @@ -74,10 +74,6 @@ After installing Bazaar, you can get the |app| source code with the command:: On Windows you will need the complete path name, that will be something like :file:`C:\\Program Files\\Bazaar\\bzr.exe`. -To update a branch to the latest code, use the command:: - - bzr merge - |app| is a very large project with a very long source control history, so the above can take a while (10mins to an hour depending on your internet speed). @@ -88,6 +84,11 @@ using:: bzr branch --stacked lp:calibre + +To update a branch to the latest code, use the command:: + + bzr merge + Submitting your changes to be included ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/manual/faq.rst b/manual/faq.rst index 109aff440d..e9bb6fc70f 100644 --- a/manual/faq.rst +++ b/manual/faq.rst @@ -162,6 +162,8 @@ Follow these steps to find the problem: * If you are connecting an Apple iDevice (iPad, iPod Touch, iPhone), use the 'Connect to iTunes' method in the 'Getting started' instructions in `Calibre + Apple iDevices: Start here `_. * Make sure you are running the latest version of |app|. The latest version can always be downloaded from `the calibre website `_. * Ensure your operating system is seeing the device. That is, the device should show up in Windows Explorer (in Windows) or Finder (in OS X). + * In |app|, go to Preferences->Ignored Devices and check that your device + is not being ignored * In |app|, go to Preferences->Plugins->Device Interface plugin and make sure the plugin for your device is enabled, the plugin icon next to it should be green when it is enabled. * If all the above steps fail, go to Preferences->Miscellaneous and click debug device detection with your device attached and post the output as a ticket on `the calibre bug tracker `_. @@ -668,6 +670,9 @@ There are three possible things I know of, that can cause this: the blacklist of programs inside RoboForm to fix this. Or uninstall RoboForm. + * The Logitech SetPoint Settings application causes random crashes in + |app| when it is open. Close it before starting |app|. + |app| is not starting on OS X? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/recipes/adventure_zone_pl.recipe b/recipes/adventure_zone_pl.recipe index 485a2e0c5b..2224937f3c 100644 --- a/recipes/adventure_zone_pl.recipe +++ b/recipes/adventure_zone_pl.recipe @@ -9,11 +9,12 @@ class Adventure_zone(BasicNewsRecipe): no_stylesheets = True oldest_article = 20 max_articles_per_feed = 100 + cover_url = 'http://www.adventure-zone.info/inne/logoaz_2012.png' index='http://www.adventure-zone.info/fusion/' use_embedded_content=False preprocess_regexps = [(re.compile(r"Komentarze", re.IGNORECASE), lambda m: ''), - (re.compile(r'\'), lambda match: ''), - (re.compile(r'\'), lambda match: '')] + (re.compile(r''), lambda match: ''), + (re.compile(r''), lambda match: '')] remove_tags_before= dict(name='td', attrs={'class':'main-bg'}) remove_tags= [dict(name='img', attrs={'alt':'Drukuj'})] remove_tags_after= dict(id='comments') @@ -36,11 +37,11 @@ class Adventure_zone(BasicNewsRecipe): return feeds - def get_cover_url(self): + '''def get_cover_url(self): soup = self.index_to_soup('http://www.adventure-zone.info/fusion/news.php') cover=soup.find(id='box_OstatninumerAZ') self.cover_url='http://www.adventure-zone.info/fusion/'+ cover.center.a.img['src'] - return getattr(self, 'cover_url', self.cover_url) + return getattr(self, 'cover_url', self.cover_url)''' def skip_ad_pages(self, soup): diff --git a/recipes/anchorage_daily.recipe b/recipes/anchorage_daily.recipe index 4ce2f13a14..7bda0f5bcd 100644 --- a/recipes/anchorage_daily.recipe +++ b/recipes/anchorage_daily.recipe @@ -5,14 +5,16 @@ class AdvancedUserRecipe1278347258(BasicNewsRecipe): __author__ = 'rty' oldest_article = 7 max_articles_per_feed = 100 + auto_cleanup = True + feeds = [(u'Alaska News', u'http://www.adn.com/news/alaska/index.xml'), - (u'Business', u'http://www.adn.com/money/index.xml'), - (u'Sports', u'http://www.adn.com/sports/index.xml'), - (u'Politics', u'http://www.adn.com/politics/index.xml'), - (u'Lifestyles', u'http://www.adn.com/life/index.xml'), - (u'Iditarod', u'http://www.adn.com/iditarod/index.xml') - ] + (u'Business', u'http://www.adn.com/money/index.xml'), + (u'Sports', u'http://www.adn.com/sports/index.xml'), + (u'Politics', u'http://www.adn.com/politics/index.xml'), + (u'Lifestyles', u'http://www.adn.com/life/index.xml'), + (u'Iditarod', u'http://www.adn.com/iditarod/index.xml') + ] description = ''''Alaska's Newspaper''' publisher = 'http://www.adn.com' category = 'news, Alaska, Anchorage' @@ -28,13 +30,13 @@ class AdvancedUserRecipe1278347258(BasicNewsRecipe): conversion_options = {'linearize_tables':True} masthead_url = 'http://media.adn.com/includes/assets/images/adn_logo.2.gif' - keep_only_tags = [ - dict(name='div', attrs={'class':'left_col story_mainbar'}), - ] - remove_tags = [ - dict(name='div', attrs={'class':'story_tools'}), - dict(name='p', attrs={'class':'ad_label'}), - ] - remove_tags_after = [ - dict(name='div', attrs={'class':'advertisement'}), - ] + #keep_only_tags = [ + #dict(name='div', attrs={'class':'left_col story_mainbar'}), + #] + #remove_tags = [ + #dict(name='div', attrs={'class':'story_tools'}), + #dict(name='p', attrs={'class':'ad_label'}), + #] + #remove_tags_after = [ + #dict(name='div', attrs={'class':'advertisement'}), + #] diff --git a/recipes/android_com_pl.recipe b/recipes/android_com_pl.recipe index c7a4a97d3c..a4a387d414 100644 --- a/recipes/android_com_pl.recipe +++ b/recipes/android_com_pl.recipe @@ -3,11 +3,11 @@ from calibre.web.feeds.news import BasicNewsRecipe class Android_com_pl(BasicNewsRecipe): title = u'Android.com.pl' __author__ = 'fenuks' - description = 'Android.com.pl - biggest polish Android site' + description = u'Android.com.pl - to największe w Polsce centrum Android OS. Znajdziesz tu: nowości, forum, pomoc, recenzje, gry, aplikacje.' category = 'Android, mobile' language = 'pl' use_embedded_content=True - cover_url =u'http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Android_robot.svg/220px-Android_robot.svg.png' + cover_url =u'http://android.com.pl/wp-content/themes/android/images/logo.png' oldest_article = 8 max_articles_per_feed = 100 - feeds = [(u'Android', u'http://android.com.pl/component/content/frontpage/frontpage.feed?type=rss')] + feeds = [(u'Android', u'http://android.com.pl/feed/')] diff --git a/recipes/astroflesz.recipe b/recipes/astroflesz.recipe new file mode 100644 index 0000000000..0b92fdfa29 --- /dev/null +++ b/recipes/astroflesz.recipe @@ -0,0 +1,19 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe + +class Astroflesz(BasicNewsRecipe): + title = u'Astroflesz' + oldest_article = 7 + __author__ = 'fenuks' + description = u'astroflesz.pl - to portal poświęcony astronomii. Informuje zarówno o aktualnych wydarzeniach i odkryciach naukowych, jak również zapowiada ciekawe zjawiska astronomiczne' + category = 'astronomy' + language = 'pl' + cover_url = 'http://www.astroflesz.pl/templates/astroflesz/images/logo/logo.png' + ignore_duplicate_articles = {'title', 'url'} + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + keep_only_tags = [dict(id="k2Container")] + remove_tags_after = dict(name='div', attrs={'class':'itemLinks'}) + remove_tags = [dict(name='div', attrs={'class':['itemLinks', 'itemToolbar', 'itemRatingBlock']})] + feeds = [(u'Wszystkie', u'http://astroflesz.pl/?format=feed')] diff --git a/recipes/birmingham_post.recipe b/recipes/birmingham_post.recipe index b9b3c3fc57..49c86fe3b8 100644 --- a/recipes/birmingham_post.recipe +++ b/recipes/birmingham_post.recipe @@ -1,9 +1,11 @@ from calibre.web.feeds.news import BasicNewsRecipe +import re +import mechanize + class AdvancedUserRecipe1306097511(BasicNewsRecipe): title = u'Birmingham post' description = 'Author D.Asbury. News for Birmingham UK' #timefmt = '' - # last update 8/9/12 __author__ = 'Dave Asbury' cover_url = 'http://profile.ak.fbcdn.net/hprofile-ak-snc4/161987_9010212100_2035706408_n.jpg' oldest_article = 2 @@ -15,8 +17,30 @@ class AdvancedUserRecipe1306097511(BasicNewsRecipe): #auto_cleanup = True language = 'en_GB' + cover_url = 'http://profile.ak.fbcdn.net/hprofile-ak-snc4/161987_9010212100_2035706408_n.jpg' - masthead_url = 'http://www.pressgazette.co.uk/Pictures/web/t/c/g/birmingham_post.jpg' + masthead_url = 'http://www.trinitymirror.com/images/birminghampost-logo.gif' + def get_cover_url(self): + soup = self.index_to_soup('http://www.birminghampost.net') + # look for the block containing the sun button and url + cov = soup.find(attrs={'height' : re.compile('3'), 'alt' : re.compile('Birmingham Post')}) + print + print '%%%%%%%%%%%%%%%',cov + print + cov2 = str(cov['src']) + # cov2=cov2[7:] + print '88888888 ',cov2,' 888888888888' + + #cover_url=cov2 + #return cover_url + br = mechanize.Browser() + br.set_handle_redirect(False) + try: + br.open_novisit(cov2) + cover_url = cov2 + except: + cover_url = 'http://profile.ak.fbcdn.net/hprofile-ak-snc4/161987_9010212100_2035706408_n.jpg' + return cover_url keep_only_tags = [ diff --git a/recipes/countryfile.recipe b/recipes/countryfile.recipe index 4f2e8cd95f..86769b78cd 100644 --- a/recipes/countryfile.recipe +++ b/recipes/countryfile.recipe @@ -7,25 +7,30 @@ class AdvancedUserRecipe1325006965(BasicNewsRecipe): #cover_url = 'http://www.countryfile.com/sites/default/files/imagecache/160px_wide/cover/2_1.jpg' __author__ = 'Dave Asbury' description = 'The official website of Countryfile Magazine' - # last updated 7/10/12 + # last updated 8/12/12 language = 'en_GB' oldest_article = 30 max_articles_per_feed = 25 remove_empty_feeds = True no_stylesheets = True auto_cleanup = True + ignore_duplicate_articles = {'title', 'url'} #articles_are_obfuscated = True - ignore_duplicate_articles = {'title'} + #article_already_exists = False + #feed_hash = '' def get_cover_url(self): - soup = self.index_to_soup('http://www.countryfile.com/') + soup = self.index_to_soup('http://www.countryfile.com/magazine') + cov = soup.find(attrs={'class' : re.compile('imagecache imagecache-250px_wide')})#'width' : '160', + print '&&&&&&&& ',cov,' ***' + cov=str(cov) + #cov2 = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', cov) + cov2 = re.findall('/(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', cov) + + cov2 = str(cov2) + cov2= "http://www.countryfile.com"+cov2[2:len(cov2)-8] - cov = soup.find(attrs={'width' : '160', 'class' : re.compile('imagecache imagecache-160px_wide')}) - print '******** ',cov,' ***' - cov2 = str(cov) - cov2=cov2[10:101] print '******** ',cov2,' ***' - #cov2='http://www.countryfile.com/sites/default/files/imagecache/160px_wide/cover/1b_0.jpg' - # try to get cover - if can't get known cover + # try to get cover - if can't get known cover br = browser() br.set_handle_redirect(False) @@ -45,5 +50,3 @@ class AdvancedUserRecipe1325006965(BasicNewsRecipe): (u'Countryside', u'http://www.countryfile.com/rss/countryside'), ] - - diff --git a/recipes/czas_gentlemanow.recipe b/recipes/czas_gentlemanow.recipe new file mode 100644 index 0000000000..6df677f25f --- /dev/null +++ b/recipes/czas_gentlemanow.recipe @@ -0,0 +1,20 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe + +class CzasGentlemanow(BasicNewsRecipe): + title = u'Czas Gentlemanów' + __author__ = 'fenuks' + description = u'Historia mężczyzn z dala od wielkiej polityki' + category = 'blog' + language = 'pl' + cover_url = 'http://czasgentlemanow.pl/wp-content/uploads/2012/10/logo-Czas-Gentlemanow1.jpg' + ignore_duplicate_articles = {'title', 'url'} + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + remove_empty_feeds = True + use_embedded_content = False + keep_only_tags = [dict(name='div', attrs={'class':'content'})] + remove_tags = [dict(attrs={'class':'meta_comments'})] + remove_tags_after = dict(name='div', attrs={'class':'fblikebutton_button'}) + feeds = [(u'M\u0119ski \u015awiat', u'http://czasgentlemanow.pl/category/meski-swiat/feed/'), (u'Styl', u'http://czasgentlemanow.pl/category/styl/feed/'), (u'Vademecum Gentlemana', u'http://czasgentlemanow.pl/category/vademecum/feed/'), (u'Dom i rodzina', u'http://czasgentlemanow.pl/category/dom-i-rodzina/feed/'), (u'Honor', u'http://czasgentlemanow.pl/category/honor/feed/'), (u'Gad\u017cety Gentlemana', u'http://czasgentlemanow.pl/category/gadzety-gentlemana/feed/')] diff --git a/recipes/dzieje_pl.recipe b/recipes/dzieje_pl.recipe index 0aafa5d2f4..603591e9f0 100644 --- a/recipes/dzieje_pl.recipe +++ b/recipes/dzieje_pl.recipe @@ -7,18 +7,64 @@ class Dzieje(BasicNewsRecipe): cover_url = 'http://www.dzieje.pl/sites/default/files/dzieje_logo.png' category = 'history' language = 'pl' - index='http://dzieje.pl' + ignore_duplicate_articles = {'title', 'url'} + index = 'http://dzieje.pl' oldest_article = 8 max_articles_per_feed = 100 remove_javascript=True no_stylesheets= True keep_only_tags = [dict(name='h1', attrs={'class':'title'}), dict(id='content-area')] remove_tags = [dict(attrs={'class':'field field-type-computed field-field-tagi'}), dict(id='dogory')] - feeds = [(u'Dzieje', u'http://dzieje.pl/rss.xml')] + #feeds = [(u'Dzieje', u'http://dzieje.pl/rss.xml')] + def append_page(self, soup, appendtag): + tag = appendtag.find('li', attrs={'class':'pager-next'}) + if tag: + while tag: + url = tag.a['href'] + if not url.startswith('http'): + url = 'http://dzieje.pl'+tag.a['href'] + soup2 = self.index_to_soup(url) + pagetext = soup2.find(id='content-area').find(attrs={'class':'content'}) + for r in pagetext.findAll(attrs={'class':['fieldgroup group-groupkul', 'fieldgroup group-zdjeciekult', 'fieldgroup group-zdjecieciekaw', 'fieldgroup group-zdjecieksiazka', 'fieldgroup group-zdjeciedu', 'field field-type-filefield field-field-zdjecieglownawyd']}): + r.extract() + pos = len(appendtag.contents) + appendtag.insert(pos, pagetext) + tag = soup2.find('li', attrs={'class':'pager-next'}) + for r in appendtag.findAll(attrs={'class':['item-list', 'field field-type-computed field-field-tagi', ]}): + r.extract() + + def find_articles(self, url): + articles = [] + soup=self.index_to_soup(url) + tag=soup.find(id='content-area').div.div + for i in tag.findAll('div', recursive=False): + temp = i.find(attrs={'class':'views-field-title'}).span.a + title = temp.string + url = self.index + temp['href'] + date = '' #i.find(attrs={'class':'views-field-created'}).span.string + articles.append({'title' : title, + 'url' : url, + 'date' : date, + 'description' : '' + }) + return articles + + def parse_index(self): + feeds = [] + feeds.append((u"Wiadomości", self.find_articles('http://dzieje.pl/wiadomosci'))) + feeds.append((u"Kultura i sztuka", self.find_articles('http://dzieje.pl/kulturaisztuka'))) + feeds.append((u"Film", self.find_articles('http://dzieje.pl/kino'))) + feeds.append((u"Rozmaitości historyczne", self.find_articles('http://dzieje.pl/rozmaitości'))) + feeds.append((u"Książka", self.find_articles('http://dzieje.pl/ksiazka'))) + feeds.append((u"Wystawa", self.find_articles('http://dzieje.pl/wystawa'))) + feeds.append((u"Edukacja", self.find_articles('http://dzieje.pl/edukacja'))) + feeds.append((u"Dzieje się", self.find_articles('http://dzieje.pl/wydarzenia'))) + return feeds def preprocess_html(self, soup): for a in soup('a'): if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']: a['href']=self.index + a['href'] + self.append_page(soup, soup.body) return soup \ No newline at end of file diff --git a/recipes/ekologia_pl.recipe b/recipes/ekologia_pl.recipe new file mode 100644 index 0000000000..2b0933b58d --- /dev/null +++ b/recipes/ekologia_pl.recipe @@ -0,0 +1,24 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe +import re +class EkologiaPl(BasicNewsRecipe): + title = u'Ekologia.pl' + __author__ = 'fenuks' + description = u'Portal ekologiczny - eko, ekologia, ochrona przyrody, ochrona środowiska, przyroda, środowisko online. Ekologia i ochrona środowiska. Ekologia dla dzieci.' + category = 'ecology' + language = 'pl' + cover_url = 'http://www.ekologia.pl/assets/images/logo/ekologia_pl_223x69.png' + ignore_duplicate_articles = {'title', 'url'} + extra_css = '.title {font-size: 200%;}' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + remove_empty_feeds = True + use_embedded_content = False + remove_tags = [dict(attrs={'class':['ekoLogo', 'powrocArt', 'butonDrukuj']})] + + feeds = [(u'Wiadomo\u015bci', u'http://www.ekologia.pl/rss/20,53,0'), (u'\u015arodowisko', u'http://www.ekologia.pl/rss/20,56,0'), (u'Styl \u017cycia', u'http://www.ekologia.pl/rss/20,55,0')] + + def print_version(self, url): + id = re.search(r',(?P\d+)\.html', url).group('id') + return 'http://drukuj.ekologia.pl/artykul/' + id diff --git a/recipes/empire_magazine.recipe b/recipes/empire_magazine.recipe index 138b7bffd1..2d7a574dde 100644 --- a/recipes/empire_magazine.recipe +++ b/recipes/empire_magazine.recipe @@ -5,6 +5,7 @@ class AdvancedUserRecipe1341650280(BasicNewsRecipe): title = u'Empire Magazine' description = 'Author D.Asbury. Film articles from Empire Mag. ' + language = 'en' __author__ = 'Dave Asbury' # last updated 7/7/12 remove_empty_feeds = True @@ -15,7 +16,7 @@ class AdvancedUserRecipe1341650280(BasicNewsRecipe): cover_url = 'http://www.empireonline.com/images/magazine/cover.jpg' conversion_options = { 'linearize_tables' : True, - } + } #auto_cleanup = True preprocess_regexps = [ (re.compile(r'Przeczytaj także:.*', re.IGNORECASE|re.DOTALL), lambda m: ''), (re.compile(ur'
Artykuł
', re.IGNORECASE), lambda m: ''), (re.compile(ur'
Ludzie filmu
', re.IGNORECASE), lambda m: '')] + remove_tags = [dict(name='img', attrs={'alt':['Ludzie filmu', u'Artykuł']})] + feeds = [(u'Recenzje', u'http://film.org.pl/r/recenzje/feed/'), (u'Artyku\u0142', u'http://film.org.pl/a/artykul/feed/'), (u'Analiza', u'http://film.org.pl/a/analiza/feed/'), (u'Ranking', u'http://film.org.pl/a/ranking/feed/'), (u'Blog', u'http://film.org.pl/kmf/blog/feed/'), (u'Ludzie', u'http://film.org.pl/a/ludzie/feed/'), (u'Seriale', u'http://film.org.pl/a/seriale/feed/'), (u'Oceanarium', u'http://film.org.pl/a/ocenarium/feed/'), (u'VHS', u'http://film.org.pl/a/vhs-a/feed/')] diff --git a/recipes/film_web.recipe b/recipes/film_web.recipe index 01d7514e0d..6b014e8f93 100644 --- a/recipes/film_web.recipe +++ b/recipes/film_web.recipe @@ -17,6 +17,7 @@ class FilmWebPl(BasicNewsRecipe): preprocess_regexps = [(re.compile(u'\(kliknij\,\ aby powiększyć\)', re.IGNORECASE), lambda m: ''), ]#(re.compile(ur' | ', re.IGNORECASE), lambda m: '')] extra_css = '.hdrBig {font-size:22px;} ul {list-style-type:none; padding: 0; margin: 0;}' remove_tags= [dict(name='div', attrs={'class':['recommendOthers']}), dict(name='ul', attrs={'class':'fontSizeSet'}), dict(attrs={'class':'userSurname anno'})] + remove_attributes = ['style',] keep_only_tags= [dict(name='h1', attrs={'class':['hdrBig', 'hdrEntity']}), dict(name='div', attrs={'class':['newsInfo', 'newsInfoSmall', 'reviewContent description']})] feeds = [(u'News / Filmy w produkcji', 'http://www.filmweb.pl/feed/news/category/filminproduction'), (u'News / Festiwale, nagrody i przeglądy', u'http://www.filmweb.pl/feed/news/category/festival'), @@ -50,4 +51,9 @@ class FilmWebPl(BasicNewsRecipe): for i in soup.findAll('sup'): if not i.string or i.string.startswith('(kliknij'): i.extract() + tag = soup.find(name='ul', attrs={'class':'inline sep-line'}) + if tag: + tag.name = 'div' + for t in tag.findAll('li'): + t.name = 'div' return soup diff --git a/recipes/gildia_pl.recipe b/recipes/gildia_pl.recipe index def57203e4..525cf6c605 100644 --- a/recipes/gildia_pl.recipe +++ b/recipes/gildia_pl.recipe @@ -4,9 +4,10 @@ import re class Gildia(BasicNewsRecipe): title = u'Gildia.pl' __author__ = 'fenuks' - description = 'Gildia - cultural site' + description = u'Fantastyczny Portal Kulturalny - newsy, recenzje, galerie, wywiady. Literatura, film, gry komputerowe i planszowe, komiks, RPG, sklep. Nie lekceważ potęgi wyobraźni!' cover_url = 'http://www.film.gildia.pl/_n_/portal/redakcja/logo/logo-gildia.pl-500.jpg' category = 'culture' + cover_url = 'http://gildia.pl/images/logo-main.png' language = 'pl' oldest_article = 8 max_articles_per_feed = 100 @@ -23,10 +24,13 @@ class Gildia(BasicNewsRecipe): content = soup.find('div', attrs={'class':'news'}) if 'recenzj' in soup.title.string.lower(): for link in content.findAll(name='a'): - if 'recenzj' in link['href']: - self.log.warn('odnosnik') - self.log.warn(link['href']) + if 'recenzj' in link['href'] or 'muzyka/plyty' in link['href']: return self.index_to_soup(link['href'], raw=True) + if 'fragmen' in soup.title.string.lower(): + for link in content.findAll(name='a'): + if 'fragment' in link['href']: + return self.index_to_soup(link['href'], raw=True) + def preprocess_html(self, soup): for a in soup('a'): diff --git a/recipes/gram_pl.recipe b/recipes/gram_pl.recipe index 79157630f5..3852f65d32 100644 --- a/recipes/gram_pl.recipe +++ b/recipes/gram_pl.recipe @@ -1,19 +1,20 @@ from calibre.web.feeds.news import BasicNewsRecipe - +from calibre.ebooks.BeautifulSoup import BeautifulSoup class Gram_pl(BasicNewsRecipe): title = u'Gram.pl' __author__ = 'fenuks' - description = 'Gram.pl - site about computer games' + description = u'Serwis społecznościowy o grach: recenzje, newsy, zapowiedzi, encyklopedia gier, forum. Gry PC, PS3, X360, PS Vita, sprzęt dla graczy.' category = 'games' language = 'pl' oldest_article = 8 index='http://www.gram.pl' max_articles_per_feed = 100 + ignore_duplicate_articles = {'title', 'url'} no_stylesheets= True - extra_css = 'h2 {font-style: italic; font-size:20px;} .picbox div {float: left;}' + #extra_css = 'h2 {font-style: italic; font-size:20px;} .picbox div {float: left;}' cover_url=u'http://www.gram.pl/www/01/img/grampl_zima.png' - remove_tags= [dict(name='p', attrs={'class':['extraText', 'must-log-in']}), dict(attrs={'class':['el', 'headline', 'post-info', 'entry-footer clearfix']}), dict(name='div', attrs={'class':['twojaOcena', 'comment-body', 'comment-author vcard', 'comment-meta commentmetadata', 'tw_button', 'entry-comment-counter', 'snap_nopreview sharing robots-nocontent', 'sharedaddy sd-sharing-enabled']}), dict(id=['igit_rpwt_css', 'comments', 'reply-title', 'igit_title'])] - keep_only_tags= [dict(name='div', attrs={'class':['main', 'arkh-postmetadataheader', 'arkh-postcontent', 'post', 'content', 'news_header', 'news_subheader', 'news_text']}), dict(attrs={'class':['contentheading', 'contentpaneopen']}), dict(name='article')] + keep_only_tags= [dict(id='articleModule')] + remove_tags = [dict(attrs={'class':['breadCrump', 'dymek', 'articleFooter']})] feeds = [(u'Informacje', u'http://www.gram.pl/feed_news.asp'), (u'Publikacje', u'http://www.gram.pl/feed_news.asp?type=articles'), (u'Kolektyw- Indie Games', u'http://indie.gram.pl/feed/'), @@ -28,35 +29,21 @@ class Gram_pl(BasicNewsRecipe): feed.articles.remove(article) return feeds - def append_page(self, soup, appendtag): - nexturl = appendtag.find('a', attrs={'class':'cpn'}) - while nexturl: - soup2 = self.index_to_soup('http://www.gram.pl'+ nexturl['href']) - r=appendtag.find(id='pgbox') - if r: - r.extract() - pagetext = soup2.find(attrs={'class':'main'}) - r=pagetext.find('h1') - if r: - r.extract() - r=pagetext.find('h2') - if r: - r.extract() - for r in pagetext.findAll('script'): - r.extract() - pos = len(appendtag.contents) - appendtag.insert(pos, pagetext) - nexturl = appendtag.find('a', attrs={'class':'cpn'}) - r=appendtag.find(id='pgbox') - if r: - r.extract() def preprocess_html(self, soup): - self.append_page(soup, soup.body) - tag=soup.findAll(name='div', attrs={'class':'picbox'}) - for t in tag: - t['style']='float: left;' + tag=soup.find(name='div', attrs={'class':'summary'}) + if tag: + tag.find(attrs={'class':'pros'}).insert(0, BeautifulSoup('

Plusy:

').h2) + tag.find(attrs={'class':'cons'}).insert(0, BeautifulSoup('

Minusy:

').h2) + tag = soup.find(name='section', attrs={'class':'cenzurka'}) + if tag: + rate = tag.p.img['data-ocena'] + tag.p.img.extract() + tag.p.insert(len(tag.p.contents)-2, BeautifulSoup('

Ocena: {0}

'.format(rate)).h2) for a in soup('a'): if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']: a['href']=self.index + a['href'] + tag=soup.find(name='span', attrs={'class':'platforma'}) + if tag: + tag.name = 'p' return soup diff --git a/recipes/harpers.recipe b/recipes/harpers.recipe index a4576792d0..18e75dce6e 100644 --- a/recipes/harpers.recipe +++ b/recipes/harpers.recipe @@ -1,5 +1,5 @@ __license__ = 'GPL v3' -__copyright__ = '2008-2010, Darko Miletic ' +__copyright__ = '2008-2012, Darko Miletic ' ''' harpers.org ''' @@ -16,6 +16,7 @@ class Harpers(BasicNewsRecipe): max_articles_per_feed = 100 no_stylesheets = True use_embedded_content = False + masthead_url = 'http://harpers.org/wp-content/themes/harpers/images/pheader.gif' conversion_options = { 'comment' : description @@ -31,27 +32,9 @@ class Harpers(BasicNewsRecipe): .caption{font-family:Verdana,sans-serif;font-size:x-small;color:#666666;} ''' - keep_only_tags = [ dict(name='div', attrs={'id':'cached'}) ] - remove_tags = [ - dict(name='table', attrs={'class':['rcnt','rcnt topline']}) - ,dict(name=['link','object','embed','meta','base']) - ] + keep_only_tags = [ dict(name='div', attrs={'class':['postdetailFull', 'articlePost']}) ] + remove_tags = [dict(name=['link','object','embed','meta','base'])] remove_attributes = ['width','height'] - feeds = [(u"Harper's Magazine", u'http://www.harpers.org/rss/frontpage-rss20.xml')] + feeds = [(u"Harper's Magazine", u'http://harpers.org/feed/')] - def get_cover_url(self): - cover_url = None - index = 'http://harpers.org/' - soup = self.index_to_soup(index) - link_item = soup.find(name = 'img',attrs= {'class':"cover"}) - if link_item: - cover_url = 'http://harpers.org' + link_item['src'] - return cover_url - - def preprocess_html(self, soup): - for item in soup.findAll(style=True): - del item['style'] - for item in soup.findAll(xmlns=True): - del item['xmlns'] - return soup diff --git a/recipes/harpers_full.recipe b/recipes/harpers_full.recipe index ff558e9c5b..153f82db7b 100644 --- a/recipes/harpers_full.recipe +++ b/recipes/harpers_full.recipe @@ -1,18 +1,22 @@ __license__ = 'GPL v3' -__copyright__ = '2008-2010, Darko Miletic ' +__copyright__ = '2008-2012, Darko Miletic ' ''' harpers.org - paid subscription/ printed issue articles This recipe only get's article's published in text format images and pdf's are ignored +If you have institutional subscription based on access IP you do not need to enter +anything in username/password fields ''' +import time, re +import urllib from calibre import strftime from calibre.web.feeds.news import BasicNewsRecipe class Harpers_full(BasicNewsRecipe): title = "Harper's Magazine - articles from printed edition" __author__ = 'Darko Miletic' - description = "Harper's Magazine: Founded June 1850." + description = "Harper's Magazine, the oldest general-interest monthly in America, explores the issues that drive our national conversation, through long-form narrative journalism and essays, and such celebrated features as the iconic Harper's Index." publisher = "Harpers's" category = 'news, politics, USA' oldest_article = 30 @@ -21,52 +25,86 @@ class Harpers_full(BasicNewsRecipe): use_embedded_content = False delay = 1 language = 'en' - needs_subscription = True - masthead_url = 'http://www.harpers.org/media/image/Harpers_305x100.gif' - publication_type = 'magazine' - INDEX = strftime('http://www.harpers.org/archive/%Y/%m') - LOGIN = 'http://www.harpers.org' - cover_url = strftime('http://www.harpers.org/media/pages/%Y/%m/gif/0001.gif') - extra_css = ' body{font-family: "Georgia",serif} ' + encoding = 'utf8' + needs_subscription = 'optional' + masthead_url = 'http://harpers.org/wp-content/themes/harpers/images/pheader.gif' + publication_type = 'magazine' + LOGIN = 'http://harpers.org/wp-content/themes/harpers/ajax_login.php' + extra_css = """ + body{font-family: adobe-caslon-pro,serif} + .category{font-size: small} + .articlePost p:first-letter{display: inline; font-size: xx-large; font-weight: bold} + """ conversion_options = { - 'comment' : description - , 'tags' : category - , 'publisher' : publisher - , 'language' : language + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language } - keep_only_tags = [ dict(name='div', attrs={'id':'cached'}) ] + keep_only_tags = [ dict(name='div', attrs={'class':['postdetailFull','articlePost']}) ] remove_tags = [ - dict(name='table', attrs={'class':['rcnt','rcnt topline']}) - ,dict(name='link') + dict(name='div', attrs={'class':'fRight rightDivPad'}) + ,dict(name=['link','meta','object','embed','iframe']) ] - remove_attributes=['xmlns'] + remove_attributes=['xmlns'] def get_browser(self): br = BasicNewsRecipe.get_browser() + br.open('http://harpers.org/') if self.username is not None and self.password is not None: - br.open(self.LOGIN) - br.select_form(nr=1) - br['handle' ] = self.username - br['password'] = self.password - br.submit() + tt = time.localtime()*1000 + data = urllib.urlencode({ 'm':self.username + ,'p':self.password + ,'rt':'http://harpers.org/' + ,'tt':tt + }) + br.open(self.LOGIN, data) return br def parse_index(self): + #find current issue + soup = self.index_to_soup('http://harpers.org/') + currentIssue=soup.find('div',attrs={'class':'mainNavi'}).find('li',attrs={'class':'curentIssue'}) + currentIssue_url=self.tag_to_string(currentIssue.a['href']) + self.log(currentIssue_url) + + #go to the current issue + soup1 = self.index_to_soup(currentIssue_url) + date = re.split('\s\|\s',self.tag_to_string(soup1.head.title.string))[0] + self.timefmt = u' [%s]'%date + + #get cover + coverurl='http://harpers.org/wp-content/themes/harpers/ajax_microfiche.php?img=harpers-'+re.split('harpers.org/',currentIssue_url)[1]+'gif/0001.gif' + soup2 = self.index_to_soup(coverurl) + self.cover_url = self.tag_to_string(soup2.find('img')['src']) + self.log(self.cover_url) articles = [] - print 'Processing ' + self.INDEX - soup = self.index_to_soup(self.INDEX) - for item in soup.findAll('div', attrs={'class':'title'}): - text_link = item.parent.find('img',attrs={'alt':'Text'}) - if text_link: - url = self.LOGIN + item.a['href'] - title = item.a.contents[0] - date = strftime(' %B %Y') - articles.append({ - 'title' :title - ,'date' :date - ,'url' :url - ,'description':'' - }) - return [(soup.head.title.string, articles)] + count = 0 + for item in soup1.findAll('div', attrs={'class':'articleData'}): + text_links = item.findAll('h2') + for text_link in text_links: + if count == 0: + count = 1 + else: + url = text_link.a['href'] + title = text_link.a.contents[0] + date = strftime(' %B %Y') + articles.append({ + 'title' :title + ,'date' :date + ,'url' :url + ,'description':'' + }) + return [(soup1.head.title.string, articles)] + + def print_version(self, url): + return url + '?single=1' + + def cleanup(self): + soup = self.index_to_soup('http://harpers.org/') + signouturl=self.tag_to_string(soup.find('li', attrs={'class':'subLogOut'}).findNext('li').a['href']) + self.log(signouturl) + self.browser.open(signouturl) + diff --git a/recipes/heise_online.recipe b/recipes/heise_online.recipe index 4d82570698..29f63ce1ac 100644 --- a/recipes/heise_online.recipe +++ b/recipes/heise_online.recipe @@ -15,23 +15,12 @@ class AdvancedUserRecipe(BasicNewsRecipe): timeout = 5 no_stylesheets = True + keep_only_tags = [dict(name='div', attrs={'id':'mitte_news'}), + dict(name='h1', attrs={'class':'clear'}), + dict(name='div', attrs={'class':'meldung_wrapper'})] - remove_tags_after = dict(name ='p', attrs={'class':'editor'}) remove_tags = [dict(id='navi_top_container'), - dict(id='navi_bottom'), - dict(id='mitte_rechts'), - dict(id='navigation'), - dict(id='subnavi'), - dict(id='social_bookmarks'), - dict(id='permalink'), - dict(id='content_foren'), - dict(id='seiten_navi'), - dict(id='adbottom'), - dict(id='sitemap'), - dict(name='div', attrs={'id':'sitemap'}), - dict(name='ul', attrs={'class':'erste_zeile'}), - dict(name='ul', attrs={'class':'zweite_zeile'}), - dict(name='div', attrs={'class':'navi_top_container'})] + dict(name='p', attrs={'class':'size80'})] feeds = [ ('Newsticker', 'http://www.heise.de/newsticker/heise.rdf'), @@ -54,5 +43,3 @@ class AdvancedUserRecipe(BasicNewsRecipe): def print_version(self, url): return url + '?view=print' - - diff --git a/recipes/hindu.recipe b/recipes/hindu.recipe index cc5305eb77..eb84fc4031 100644 --- a/recipes/hindu.recipe +++ b/recipes/hindu.recipe @@ -16,10 +16,14 @@ class TheHindu(BasicNewsRecipe): keep_only_tags = [dict(id='content')] remove_tags = [dict(attrs={'class':['article-links', 'breadcr']}), - dict(id=['email-section', 'right-column', 'printfooter'])] + dict(id=['email-section', 'right-column', 'printfooter', 'topover', + 'slidebox', 'th_footer'])] extra_css = '.photo-caption { font-size: smaller }' + def preprocess_raw_html(self, raw, url): + return raw.replace('

', '

').replace('

', '

') + def postprocess_html(self, soup, first_fetch): for t in soup.findAll(['table', 'tr', 'td','center']): t.name = 'div' diff --git a/recipes/historia_pl.recipe b/recipes/historia_pl.recipe index f3353fe89f..60554c0924 100644 --- a/recipes/historia_pl.recipe +++ b/recipes/historia_pl.recipe @@ -3,7 +3,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class Historia_org_pl(BasicNewsRecipe): title = u'Historia.org.pl' __author__ = 'fenuks' - description = u'history site' + description = u'Artykuły dotyczące historii w układzie epok i tematów, forum. Najlepsza strona historii. Matura z historii i egzamin gimnazjalny z historii.' cover_url = 'http://lh3.googleusercontent.com/_QeRQus12wGg/TOvHsZ2GN7I/AAAAAAAAD_o/LY1JZDnq7ro/logo5.jpg' category = 'history' language = 'pl' @@ -12,16 +12,15 @@ class Historia_org_pl(BasicNewsRecipe): no_stylesheets = True use_embedded_content = True max_articles_per_feed = 100 + ignore_duplicate_articles = {'title', 'url'} - feeds = [(u'Wszystkie', u'http://www.historia.org.pl/index.php?format=feed&type=atom'), - (u'Wiadomości', u'http://www.historia.org.pl/index.php/wiadomosci.feed?type=atom'), - (u'Publikacje', u'http://www.historia.org.pl/index.php/publikacje.feed?type=atom'), - (u'Publicystyka', u'http://www.historia.org.pl/index.php/publicystyka.feed?type=atom'), - (u'Recenzje', u'http://historia.org.pl/index.php/recenzje.feed?type=atom'), - (u'Kultura i sztuka', u'http://www.historia.org.pl/index.php/kultura-i-sztuka.feed?type=atom'), - (u'Rekonstykcje', u'http://www.historia.org.pl/index.php/rekonstrukcje.feed?type=atom'), - (u'Projekty', u'http://www.historia.org.pl/index.php/projekty.feed?type=atom'), - (u'Konkursy'), (u'http://www.historia.org.pl/index.php/konkursy.feed?type=atom')] + + feeds = [(u'Wszystkie', u'http://historia.org.pl/feed/'), + (u'Wiadomości', u'http://historia.org.pl/Kategoria/wiadomosci/feed/'), + (u'Publikacje', u'http://historia.org.pl/Kategoria/artykuly/feed/'), + (u'Publicystyka', u'http://historia.org.pl/Kategoria/publicystyka/feed/'), + (u'Recenzje', u'http://historia.org.pl/Kategoria/recenzje/feed/'), + (u'Projekty', u'http://historia.org.pl/Kategoria/projekty/feed/'),] def print_version(self, url): diff --git a/recipes/icons/astroflesz.png b/recipes/icons/astroflesz.png new file mode 100644 index 0000000000..37a9e21675 Binary files /dev/null and b/recipes/icons/astroflesz.png differ diff --git a/recipes/icons/czas_gentlemanow.png b/recipes/icons/czas_gentlemanow.png new file mode 100644 index 0000000000..0d20f80c05 Binary files /dev/null and b/recipes/icons/czas_gentlemanow.png differ diff --git a/recipes/icons/ekologia_pl.png b/recipes/icons/ekologia_pl.png new file mode 100644 index 0000000000..797421420d Binary files /dev/null and b/recipes/icons/ekologia_pl.png differ diff --git a/recipes/icons/poradnia_pwn.png b/recipes/icons/poradnia_pwn.png new file mode 100644 index 0000000000..6cafb534fc Binary files /dev/null and b/recipes/icons/poradnia_pwn.png differ diff --git a/recipes/icons/tvp_info.png b/recipes/icons/tvp_info.png new file mode 100644 index 0000000000..1414f38d5c Binary files /dev/null and b/recipes/icons/tvp_info.png differ diff --git a/recipes/icons/zaufana_trzecia_strona.png b/recipes/icons/zaufana_trzecia_strona.png new file mode 100644 index 0000000000..cdaeb95d27 Binary files /dev/null and b/recipes/icons/zaufana_trzecia_strona.png differ diff --git a/recipes/independent.recipe b/recipes/independent.recipe index 5e746145ee..43f0f9acde 100644 --- a/recipes/independent.recipe +++ b/recipes/independent.recipe @@ -47,9 +47,10 @@ class TheIndependentNew(BasicNewsRecipe): dict(name='img',attrs={'alt' : ['Get Adobe Flash player']}), dict(name='img',attrs={'alt' : ['view gallery']}), dict(attrs={'style' : re.compile('.*')}), + dict(attrs={'class':lambda x: x and 'voicesRelatedTopics' in x.split()}), ] - keep_only_tags =[dict(attrs={'id':'main'})] + keep_only_tags =[dict(attrs={'id':['main','top']})] recursions = 0 # fixes non compliant html nesting and 'marks' article graphics links @@ -69,7 +70,7 @@ class TheIndependentNew(BasicNewsRecipe): } extra_css = """ - h1{font-family: Georgia,serif } + h1{font-family: Georgia,serif ; font-size: x-large; } body{font-family: Verdana,Arial,Helvetica,sans-serif} img{margin-bottom: 0.4em; display:block} .starRating img {float: left} @@ -77,16 +78,21 @@ class TheIndependentNew(BasicNewsRecipe): .image {clear:left; font-size: x-small; color:#888888;} .articleByTimeLocation {font-size: x-small; color:#888888; margin-bottom:0.2em ; margin-top:0.2em ; display:block} - .subtitle {clear:left} + .subtitle {clear:left ;} .column-1 h1 { color: #191919} .column-1 h2 { color: #333333} .column-1 h3 { color: #444444} - .column-1 p { color: #777777} - .column-1 p,a,h1,h2,h3 { margin: 0; } - .column-1 div{color:#888888; margin: 0;} + .subtitle { color: #777777; font-size: medium;} + .column-1 a,h1,h2,h3 { margin: 0; } + .column-1 div{margin: 0;} .articleContent {display: block; clear:left;} + .articleContent {color: #000000; font-size: medium;} + .ivDrip-section {color: #000000; font-size: medium;} + .datetime {color: #888888} + .title {font-weight:bold;} .storyTop{} .pictureContainer img { max-width: 400px; max-height: 400px;} + .image img { max-width: 400px; max-height: 400px;} """ oldest_article = 1 @@ -325,6 +331,20 @@ class TheIndependentNew(BasicNewsRecipe): item.contents[0] = '' def postprocess_html(self,soup, first_fetch): + + #mark subtitle parent as non-compliant nesting causes + # p's to be 'popped out' of the h3 tag they are nested in. + subtitle = soup.find('h3', attrs={'class' : 'subtitle'}) + subtitle_div = None + if subtitle: + subtitle_div = subtitle.parent + if subtitle_div: + clazz = '' + if 'class' in subtitle_div: + clazz = subtitle_div['class'] + ' ' + clazz = clazz + 'subtitle' + subtitle_div['class'] = clazz + #find broken images and remove captions items_to_extract = [] for item in soup.findAll('div', attrs={'class' : 'image'}): @@ -501,6 +521,9 @@ class TheIndependentNew(BasicNewsRecipe): ), (u'Opinion', u'http://www.independent.co.uk/opinion/?service=rss'), + (u'Voices', + u'http://www.independent.co.uk/voices/?service=rss' + ), (u'Environment', u'http://www.independent.co.uk/environment/?service=rss'), (u'Sport - Athletics', diff --git a/recipes/kosmonauta_pl.recipe b/recipes/kosmonauta_pl.recipe index ddfa26df36..d1caa85950 100644 --- a/recipes/kosmonauta_pl.recipe +++ b/recipes/kosmonauta_pl.recipe @@ -9,6 +9,21 @@ class Kosmonauta(BasicNewsRecipe): language = 'pl' cover_url='http://bi.gazeta.pl/im/4/10393/z10393414X,Kosmonauta-net.jpg' no_stylesheets = True + INDEX = 'http://www.kosmonauta.net' oldest_article = 7 + no_stylesheets = True max_articles_per_feed = 100 - feeds = [(u'Kosmonauta.net', u'http://www.kosmonauta.net/index.php/feed/rss.html')] + keep_only_tags = [dict(name='div', attrs={'class':'item-page'})] + remove_tags = [dict(attrs={'class':['article-tools clearfix', 'cedtag', 'nav clearfix', 'jwDisqusForm']})] + remove_tags_after = dict(name='div', attrs={'class':'cedtag'}) + feeds = [(u'Kosmonauta.net', u'http://www.kosmonauta.net/?format=feed&type=atom')] + + def preprocess_html(self, soup): + for a in soup.findAll(name='a'): + if a.has_key('href'): + href = a['href'] + if not href.startswith('http'): + a['href'] = self.INDEX + href + print '%%%%%%%%%%%%%%%%%%%%%%%%%', a['href'] + return soup + \ No newline at end of file diff --git a/recipes/ksiazka_pl.recipe b/recipes/ksiazka_pl.recipe index 7f9999f782..f91cb4f4f7 100644 --- a/recipes/ksiazka_pl.recipe +++ b/recipes/ksiazka_pl.recipe @@ -1,15 +1,16 @@ from calibre.web.feeds.news import BasicNewsRecipe import re class Ksiazka_net_pl(BasicNewsRecipe): - title = u'ksiazka.net.pl' + title = u'książka.net.pl' __author__ = 'fenuks' - description = u'Ksiazka.net.pl - book vortal' + description = u'Portal Księgarski - tematyczny serwis o książkach. Wydarzenia z rynku księgarsko-wydawniczego, nowości, zapowiedzi, bestsellery, setki recenzji. Niezbędne informacje dla każdego miłośnika książek, księgarza, bibliotekarza i wydawcy.' cover_url = 'http://www.ksiazka.net.pl/fileadmin/templates/ksiazka.net.pl/images/1PortalKsiegarski-logo.jpg' category = 'books' language = 'pl' oldest_article = 8 max_articles_per_feed = 100 no_stylesheets= True + remove_empty_feeds = True #extra_css = 'img {float: right;}' preprocess_regexps = [(re.compile(ur'Podoba mi się, kupuję:'), lambda match: '
')] remove_tags_before= dict(name='div', attrs={'class':'m-body'}) diff --git a/recipes/la_stampa.recipe b/recipes/la_stampa.recipe index b9d8a469aa..06a7debe9d 100644 --- a/recipes/la_stampa.recipe +++ b/recipes/la_stampa.recipe @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __author__ = 'Gabriele Marini, based on Darko Miletic' __copyright__ = '2009, Darko Miletic ' -__description__ = 'La Stampa 05/05/2010' +__description__ = 'La Stampa 28/12/2012' ''' http://www.lastampa.it/ @@ -14,10 +14,11 @@ class LaStampa(BasicNewsRecipe): title = u'La Stampa' language = 'it' __author__ = 'Gabriele Marini' - oldest_article = 15 + #oldest_article = 15 + oldest_articlce = 7 #for daily schedule max_articles_per_feed = 50 recursion = 100 - cover_url = 'http://www.lastampa.it/edicola/PDF/1.pdf' + cover_url = 'http://www1.lastampa.it/edicola/PDF/1.pdf' use_embedded_content = False remove_javascript = True no_stylesheets = True @@ -33,35 +34,41 @@ class LaStampa(BasicNewsRecipe): if link: return link[0]['href'] - keep_only_tags = [dict(attrs={'class':['boxocchiello2','titoloRub','titologir','catenaccio','sezione','articologirata']}), + keep_only_tags = [dict(attrs={'class':['boxocchiello2','titoloRub','titologir','autore-girata','luogo-girata','catenaccio','sezione','articologirata','bodytext','news-single-img','ls-articoloCorpo','ls-blog-list-1col']}), dict(name='div', attrs={'id':'corpoarticolo'}) ] - remove_tags = [dict(name='div', attrs={'id':'menutop'}), - dict(name='div', attrs={'id':'fwnetblocco'}), - dict(name='table', attrs={'id':'strumenti'}), - dict(name='table', attrs={'id':'imgesterna'}), - dict(name='a', attrs={'class':'linkblu'}), - dict(name='a', attrs={'class':'link'}), + + remove_tags = [dict(name='div', attrs={'id':['menutop','fwnetblocco']}), + dict(attrs={'class':['ls-toolbarCommenti','ls-boxCommentsBlog']}), + dict(name='table', attrs={'id':['strumenti','imgesterna']}), + dict(name='a', attrs={'class':['linkblu','link']}), dict(name='span', attrs={'class':['boxocchiello','boxocchiello2','sezione']}) ] - - feeds = [ - (u'Home', u'http://www.lastampa.it/redazione/rss_home.xml'), - (u'Editoriali', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=25'), - (u'Politica', u'http://www.lastampa.it/redazione/cmssezioni/politica/rss_politica.xml'), - (u'ArciItaliana', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=14'), - (u'Cronache', u'http://www.lastampa.it/redazione/cmssezioni/cronache/rss_cronache.xml'), - (u'Esteri', u'http://www.lastampa.it/redazione/cmssezioni/esteri/rss_esteri.xml'), - (u'Danni Collaterali', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=90'), - (u'Economia', u'http://www.lastampa.it/redazione/cmssezioni/economia/rss_economia.xml'), - (u'Tecnologia ', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=30'), - (u'Spettacoli', u'http://www.lastampa.it/redazione/cmssezioni/spettacoli/rss_spettacoli.xml'), - (u'Sport', u'http://www.lastampa.it/sport/rss_home.xml'), - (u'Torino', u'http://rss.feedsportal.com/c/32418/f/466938/index.rss'), - (u'Motori', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=57'), - (u'Scienza', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=38'), - (u'Fotografia', u'http://rss.feedsportal.com/c/32418/f/478449/index.rss'), - (u'Scuola', u'http://www.lastampa.it/cmstp/rubriche/oggetti/rss.asp?ID_blog=60'), - (u'Tempo Libero', u'http://www.lastampa.it/tempolibero/rss_home.xml') + feeds = [(u'BuonGiorno',u'http://www.lastampa.it/cultura/opinioni/buongiorno/rss.xml'), + (u'Jena', u'http://www.lastampa.it/cultura/opinioni/jena/rss.xml'), + (u'Editoriali', u'http://www.lastampa.it/cultura/opinioni/editoriali'), + (u'Finestra sull America', u'http://lastampa.feedsportal.com/c/32418/f/625713/index.rss'), + (u'HomePage', u'http://www.lastampa.it/rss.xml'), + (u'Politica Italia', u'http://www.lastampa.it/italia/politica/rss.xml'), + (u'ArciItaliana', u'http://www.lastampa.it/rss/blog/arcitaliana'), + (u'Cronache', u'http://www.lastampa.it/italia/cronache/rss.xml'), + (u'Esteri', u'http://www.lastampa.it/esteri/rss.xml'), + (u'Danni Collaterali', u'http://www.lastampa.it/rss/blog/danni-collaterali'), + (u'Economia', u'http://www.lastampa.it/economia/rss.xml'), + (u'Tecnologia ', u'http://www.lastampa.it/tecnologia/rss.xml'), + (u'Spettacoli', u'http://www.lastampa.it/spettacoli/rss.xml'), + (u'Sport', u'http://www.lastampa.it/sport/rss.xml'), + (u'Torino', u'http://www.lastampa.it/cronaca/rss.xml'), + (u'Motori', u'http://www.lastampa.it/motori/rss.xml'), + (u'Scienza', u'http://www.lastampa.it/scienza/rss.xml'), + (u'Cultura', u'http://www.lastampa.it/cultura/rss.xml'), + (u'Scuola', u'http://www.lastampa.it/cultura/scuola/rss.xml'), + (u'Benessere', u'http://www.lastampa.it/scienza/benessere/rss.xml'), + (u'Cucina', u'http://www.lastampa.it/societa/cucina/rss.xml'), + (u'Casa', u'http://www.lastampa.it/societa/casa/rss.xml'), + (u'Moda',u'http://www.lastampa.it/societa/moda/rss.xml'), + (u'Giochi',u'http://www.lastampa.it/tecnologia/giochi/rss.xml'), + (u'Viaggi',u'http://www.lastampa.it/societa/viaggi/rss.xml'), + (u'Ambiente', u'http://www.lastampa.it/scienza/ambiente/rss.xml') ] diff --git a/recipes/la_voce.recipe b/recipes/la_voce.recipe index 140adbb84c..18db9346a8 100644 --- a/recipes/la_voce.recipe +++ b/recipes/la_voce.recipe @@ -7,9 +7,9 @@ class AdvancedUserRecipe1324114228(BasicNewsRecipe): max_articles_per_feed = 100 auto_cleanup = True masthead_url = 'http://www.lavoce.info/binary/la_voce/testata/lavoce.1184661635.gif' - feeds = [(u'La Voce', u'http://www.lavoce.info/feed_rss.php?id_feed=1')] + feeds = [(u'La Voce', u'http://www.lavoce.info/feed/')] __author__ = 'faber1971' - description = 'Italian website on Economy - v1.01 (17, December 2011)' + description = 'Italian website on Economy - v1.02 (27, December 2012)' language = 'it' diff --git a/recipes/le_monde.recipe b/recipes/le_monde.recipe index 8693676da9..318df7e362 100644 --- a/recipes/le_monde.recipe +++ b/recipes/le_monde.recipe @@ -22,13 +22,15 @@ class LeMonde(BasicNewsRecipe): #publication_type = 'newsportal' extra_css = ''' h1{font-size:130%;} + h2{font-size:100%;} + blockquote.aside {background-color: #DDD; padding: 0.5em;} .ariane{font-size:xx-small;} .source{font-size:xx-small;} - #.href{font-size:xx-small;} - #.figcaption style{color:#666666; font-size:x-small;} - #.main-article-info{font-family:Arial,Helvetica,sans-serif;} - #full-contents{font-size:small; font-family:Arial,Helvetica,sans-serif;font-weight:normal;} - #match-stats-summary{font-size:small; font-family:Arial,Helvetica,sans-serif;font-weight:normal;} + /*.href{font-size:xx-small;}*/ + /*.figcaption style{color:#666666; font-size:x-small;}*/ + /*.main-article-info{font-family:Arial,Helvetica,sans-serif;}*/ + /*full-contents{font-size:small; font-family:Arial,Helvetica,sans-serif;font-weight:normal;}*/ + /*match-stats-summary{font-size:small; font-family:Arial,Helvetica,sans-serif;font-weight:normal;}*/ ''' #preprocess_regexps = [(re.compile(r'', re.DOTALL), lambda m: '')] conversion_options = { @@ -44,6 +46,9 @@ class LeMonde(BasicNewsRecipe): filterDuplicates = True def preprocess_html(self, soup): + for aside in soup.findAll('aside'): + aside.name='blockquote' + aside['class'] = "aside" for alink in soup.findAll('a'): if alink.string is not None: tstr = alink.string @@ -107,7 +112,9 @@ class LeMonde(BasicNewsRecipe): ] remove_tags = [ - dict(name='div', attrs={'class':['bloc_base meme_sujet']}), + dict(attrs={'class':['rubriques_liees']}), + dict(attrs={'class':['sociaux']}), + dict(attrs={'class':['bloc_base meme_sujet']}), dict(name='p', attrs={'class':['lire']}) ] diff --git a/recipes/ledevoir.recipe b/recipes/ledevoir.recipe index 0811289827..d99ca53841 100644 --- a/recipes/ledevoir.recipe +++ b/recipes/ledevoir.recipe @@ -32,26 +32,28 @@ class ledevoir(BasicNewsRecipe): recursion = 10 needs_subscription = 'optional' - filterDuplicates = False url_list = [] remove_javascript = True no_stylesheets = True + auto_cleanup = True preprocess_regexps = [(re.compile(r'(title|alt)=".*?>.*?"', re.DOTALL), lambda m: '')] - keep_only_tags = [ - dict(name='div', attrs={'id':'article'}), - dict(name='div', attrs={'id':'colonne_principale'}) - ] + #keep_only_tags = [ + #dict(name='div', attrs={'id':'article_detail'}), + #dict(name='div', attrs={'id':'colonne_principale'}) + #] - remove_tags = [ - dict(name='div', attrs={'id':'dialog'}), - dict(name='div', attrs={'class':['interesse_actions','reactions']}), - dict(name='ul', attrs={'class':'mots_cles'}), - dict(name='a', attrs={'class':'haut'}), - dict(name='h5', attrs={'class':'interesse_actions'}) - ] + #remove_tags = [ + #dict(name='div', attrs={'id':'dialog'}), + #dict(name='div', attrs={'class':['interesse_actions','reactions','taille_du_texte right clearfix','partage_sociaux clearfix']}), + #dict(name='aside', attrs={'class':['article_actions clearfix','reactions','partage_sociaux_wrapper']}), + #dict(name='ul', attrs={'class':'mots_cles'}), + #dict(name='ul', attrs={'id':'commentaires'}), + #dict(name='a', attrs={'class':'haut'}), + #dict(name='h5', attrs={'class':'interesse_actions'}) + #] feeds = [ (u'A la une', 'http://www.ledevoir.com/rss/manchettes.xml'), @@ -95,10 +97,4 @@ class ledevoir(BasicNewsRecipe): br.submit() return br - def print_version(self, url): - if self.filterDuplicates: - if url in self.url_list: - return - self.url_list.append(url) - return url diff --git a/recipes/lvivs_ks_ghazieta.recipe b/recipes/lvivs_ks_ghazieta.recipe new file mode 100644 index 0000000000..cc4b326d42 --- /dev/null +++ b/recipes/lvivs_ks_ghazieta.recipe @@ -0,0 +1,12 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1356270446(BasicNewsRecipe): + title = u'\u041b\u044c\u0432\u0456\u0432\u0441\u044c\u043a\u0430 \u0433\u0430\u0437\u0435\u0442\u0430' + __author__ = 'rpalyvoda' + oldest_article = 7 + max_articles_per_feed = 100 + language = 'uk' + cover_url = 'http://lvivska.com/sites/all/themes/biblos/images/logo.png' + masthead_url = 'http://lvivska.com/sites/all/themes/biblos/images/logo.png' + auto_cleanup = True + feeds = [(u'\u041d\u043e\u0432\u0438\u043d\u0438', u'http://lvivska.com/rss/news.xml'), (u'\u041f\u043e\u043b\u0456\u0442\u0438\u043a\u0430', u'http://lvivska.com/rss/politic.xml'), (u'\u0415\u043a\u043e\u043d\u043e\u043c\u0456\u043a\u0430', u'http://lvivska.com/rss/economic.xml'), (u'\u041f\u0440\u0430\u0432\u043e', u'http://lvivska.com/rss/law.xml'), (u'\u0421\u0432\u0456\u0442', u'http://lvivska.com/rss/world.xml'), (u'\u0416\u0438\u0442\u0442\u044f', u'http://lvivska.com/rss/life.xml'), (u'\u041a\u0443\u043b\u044c\u0442\u0443\u0440\u0430', u'http://lvivska.com/rss/culture.xml'), (u'\u041b\u0430\u0441\u0443\u043d', u'http://lvivska.com/rss/cooking.xml'), (u'\u0421\u0442\u0438\u043b\u044c', u'http://lvivska.com/rss/style.xml'), (u'Galicia Incognita', u'http://lvivska.com/rss/galiciaincognita.xml'), (u'\u0421\u043f\u043e\u0440\u0442', u'http://lvivska.com/rss/sport.xml'), (u'\u0415\u043a\u043e\u043b\u043e\u0433\u0456\u044f', u'http://lvivska.com/rss/ecology.xml'), (u"\u0417\u0434\u043e\u0440\u043e\u0432'\u044f", u'http://lvivska.com/rss/health.xml'), (u'\u0410\u0432\u0442\u043e', u'http://lvivska.com/rss/auto.xml'), (u'\u0411\u043b\u043e\u0433\u0438', u'http://lvivska.com/rss/blog.xml')] diff --git a/recipes/metro_uk.recipe b/recipes/metro_uk.recipe index fcceba4ce7..934fbab793 100644 --- a/recipes/metro_uk.recipe +++ b/recipes/metro_uk.recipe @@ -1,43 +1,74 @@ from calibre.web.feeds.news import BasicNewsRecipe +from calibre import strftime +import re +import datetime +import time + class AdvancedUserRecipe1306097511(BasicNewsRecipe): title = u'Metro UK' - description = 'Author Dave Asbury : News from The Metro - UK' + description = 'News as provided by The Metro -UK' #timefmt = '' __author__ = 'Dave Asbury' - #last update 9/9/12 + #last update 9/6/12 cover_url = 'http://profile.ak.fbcdn.net/hprofile-ak-snc4/276636_117118184990145_2132092232_n.jpg' - no_stylesheets = True oldest_article = 1 - max_articles_per_feed = 12 remove_empty_feeds = True remove_javascript = True - #auto_cleanup = True + auto_cleanup = True encoding = 'UTF-8' - cover_url ='http://profile.ak.fbcdn.net/hprofile-ak-snc4/157897_117118184990145_840702264_n.jpg' + language = 'en_GB' masthead_url = 'http://e-edition.metro.co.uk/images/metro_logo.gif' - extra_css = ''' - h1{font-family:Arial,Helvetica,sans-serif; font-weight:900;font-size:1.6em;} - h2{font-family:Arial,Helvetica,sans-serif; font-weight:normal;font-size:1.2em;} - p{font-family:Arial,Helvetica,sans-serif;font-size:1.0em;} - body{font-family:Helvetica,Arial,sans-serif;font-size:1.0em;} - ''' - keep_only_tags = [ - #dict(name='h1'), - #dict(name='h2'), - #dict(name='div', attrs={'class' : ['row','article','img-cnt figure','clrd']}) - #dict(name='h3'), - #dict(attrs={'class' : 'BText'}), - ] - remove_tags = [ - dict(name='div',attrs={'class' : 'art-fd fd-gr1-b clrd'}), - dict(name='span',attrs={'class' : 'share'}), - dict(name='li'), - dict(attrs={'class' : ['twitter-share-button','header-forms','hdr-lnks','close','art-rgt','fd-gr1-b clrd google-article','news m12 clrd clr-b p5t shareBtm','item-ds csl-3-img news','c-1of3 c-last','c-1of1','pd','item-ds csl-3-img sport']}), - dict(attrs={'id' : ['','sky-left','sky-right','ftr-nav','and-ftr','notificationList','logo','miniLogo','comments-news','metro_extras']}) - ] - remove_tags_before = dict(name='h1') - #remove_tags_after = dict(attrs={'id':['topic-buttons']}) - feeds = [ - (u'News', u'http://www.metro.co.uk/rss/news/'), (u'Money', u'http://www.metro.co.uk/rss/money/'), (u'Sport', u'http://www.metro.co.uk/rss/sport/'), (u'Film', u'http://www.metro.co.uk/rss/metrolife/film/'), (u'Music', u'http://www.metro.co.uk/rss/metrolife/music/'), (u'TV', u'http://www.metro.co.uk/rss/tv/'), (u'Showbiz', u'http://www.metro.co.uk/rss/showbiz/'), (u'Weird News', u'http://www.metro.co.uk/rss/weird/'), (u'Travel', u'http://www.metro.co.uk/rss/travel/'), (u'Lifestyle', u'http://www.metro.co.uk/rss/lifestyle/'), (u'Books', u'http://www.metro.co.uk/rss/lifestyle/books/'), (u'Food', u'http://www.metro.co.uk/rss/lifestyle/restaurants/')] + def parse_index(self): + articles = {} + key = None + ans = [] + feeds = [ ('UK', 'http://metro.co.uk/news/uk/'), + ('World', 'http://metro.co.uk/news/world/'), + ('Weird', 'http://metro.co.uk/news/weird/'), + ('Money', 'http://metro.co.uk/news/money/'), + ('Sport', 'http://metro.co.uk/sport/'), + ('Guilty Pleasures', 'http://metro.co.uk/guilty-pleasures/') + ] + for key, feed in feeds: + soup = self.index_to_soup(feed) + articles[key] = [] + ans.append(key) + + today = datetime.date.today() + today = time.mktime(today.timetuple())-60*60*24 + + for a in soup.findAll('a'): + for name, value in a.attrs: + if name == "class" and value=="post": + url = a['href'] + title = a['title'] + print title + description = '' + m = re.search('^.*uk/([^/]*)/([^/]*)/([^/]*)/', url) + skip = 1 + if len(m.groups()) == 3: + g = m.groups() + dt = datetime.datetime.strptime(''+g[0]+'-'+g[1]+'-'+g[2], '%Y-%m-%d') + pubdate = time.strftime('%a, %d %b', dt.timetuple()) + + dt = time.mktime(dt.timetuple()) + if dt >= today: + print pubdate + skip = 0 + else: + pubdate = strftime('%a, %d %b') + + summary = a.find(True, attrs={'class':'excerpt'}) + if summary: + description = self.tag_to_string(summary, use_alt=False) + + if skip == 0: + articles[key].append( + dict(title=title, url=url, date=pubdate, + description=description, + content='')) + #ans = self.sort_index_by(ans, {'The Front Page':-1, 'Dining In, Dining Out':1, 'Obituaries':2}) + ans = [(key, articles[key]) for key in ans if articles.has_key(key)] + return ans diff --git a/recipes/mlody_technik_pl.recipe b/recipes/mlody_technik_pl.recipe index d019efb94c..741397d08a 100644 --- a/recipes/mlody_technik_pl.recipe +++ b/recipes/mlody_technik_pl.recipe @@ -2,7 +2,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class Mlody_technik(BasicNewsRecipe): - title = u'Mlody technik' + title = u'Młody technik' __author__ = 'fenuks' description = u'Młody technik' category = 'science' diff --git a/recipes/mobile_bulgaria.recipe b/recipes/mobile_bulgaria.recipe new file mode 100644 index 0000000000..85440cf376 --- /dev/null +++ b/recipes/mobile_bulgaria.recipe @@ -0,0 +1,27 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1329123365(BasicNewsRecipe): + title = u'Mobilebulgaria.com' + __author__ = 'M3 Web' + description = 'The biggest Bulgarian site covering mobile consumer electronics. Offers detailed reviews, popular discussion forum, shop and platform for selling new and second hand phones and gadgets.' + category = 'News, Reviews, Offers, Forum' + oldest_article = 45 + max_articles_per_feed = 10 + language = 'bg' + encoding = 'windows-1251' + no_stylesheets = False + remove_javascript = True + keep_only_tags = [dict(name='div', attrs={'class':'bigblock'}), +dict(name='div', attrs={'class':'verybigblock'}), +dict(name='table', attrs={'class':'obiaviresults'}), +dict(name='div', attrs={'class':'forumblock'}), +dict(name='div', attrs={'class':'forumblock_b1'}), +dict(name='div', attrs={'class':'block2_2colswrap'})] + + feeds = [(u'News', u'http://www.mobilebulgaria.com/rss_full.php'), +(u'Reviews', u'http://www.mobilebulgaria.com/rss_reviews.php'), +(u'Offers', u'http://www.mobilebulgaria.com/obiavi/rss.php'), +(u'Forum', u'http://www.mobilebulgaria.com/rss_forum_last10.php')] + + extra_css = ''' + #gallery1 div{display: block; float: left; margin: 0 10px 10px 0;} ''' diff --git a/recipes/nikkei_news.recipe b/recipes/nikkei_news.recipe index aa351e0a0d..3260b8c168 100644 --- a/recipes/nikkei_news.recipe +++ b/recipes/nikkei_news.recipe @@ -13,8 +13,11 @@ class NikkeiNet_paper_subscription(BasicNewsRecipe): max_articles_per_feed = 30 language = 'ja' no_stylesheets = True - cover_url = 'http://parts.nikkei.com/parts/ds/images/common/logo_r1.svg' - masthead_url = 'http://parts.nikkei.com/parts/ds/images/common/logo_r1.svg' + #cover_url = 'http://parts.nikkei.com/parts/ds/images/common/logo_r1.svg' + cover_url = 'http://cdn.nikkei.co.jp/parts/ds/images/common/st_nikkei_r1_20101003_1.gif' + #masthead_url = 'http://parts.nikkei.com/parts/ds/images/common/logo_r1.svg' + masthead_url = 'http://cdn.nikkei.co.jp/parts/ds/images/common/st_nikkei_r1_20101003_1.gif' + cover_margins = (10, 188, '#ffffff') remove_tags_before = {'class':"cmn-indent"} remove_tags = [ @@ -40,8 +43,11 @@ class NikkeiNet_paper_subscription(BasicNewsRecipe): print "-------------------------open top page-------------------------------------" br.open('http://www.nikkei.com/') print "-------------------------open first login form-----------------------------" - link = br.links(url_regex="www.nikkei.com/etc/accounts/login").next() - br.follow_link(link) + try: + url = br.links(url_regex="www.nikkei.com/etc/accounts/login").next().url + except StopIteration: + url = 'http://www.nikkei.com/etc/accounts/login?dps=3&pageflag=top&url=http%3A%2F%2Fwww.nikkei.com%2F' + br.open(url) #br.follow_link(link) #response = br.response() #print response.get_data() print "-------------------------JS redirect(send autoPostForm)--------------------" diff --git a/recipes/nin.recipe b/recipes/nin.recipe index 78c9dd4324..084c49ab2b 100644 --- a/recipes/nin.recipe +++ b/recipes/nin.recipe @@ -15,7 +15,7 @@ class Nin(BasicNewsRecipe): publisher = 'NIN d.o.o. - Ringier d.o.o.' category = 'news, politics, Serbia' no_stylesheets = True - oldest_article = 15 + oldest_article = 180 encoding = 'utf-8' needs_subscription = True remove_empty_feeds = True @@ -25,7 +25,7 @@ class Nin(BasicNewsRecipe): use_embedded_content = False language = 'sr' publication_type = 'magazine' - masthead_url = 'http://www.nin.co.rs/img/head/logo.jpg' + masthead_url = 'http://www.nin.co.rs/img/logo_print.jpg' extra_css = """ @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana, Lucida, sans1, sans-serif} @@ -42,11 +42,11 @@ class Nin(BasicNewsRecipe): , 'tags' : category , 'publisher' : publisher , 'language' : language + , 'linearize_tables': True } preprocess_regexps = [ - (re.compile(r'.*?', re.DOTALL|re.IGNORECASE),lambda match: '') - ,(re.compile(r'.*?', re.DOTALL|re.IGNORECASE),lambda match: '') + (re.compile(r'
.*', re.DOTALL|re.IGNORECASE),lambda match: '') ,(re.compile(u'\u0110'), lambda match: u'\u00D0') ] @@ -60,42 +60,21 @@ class Nin(BasicNewsRecipe): br.submit() return br - keep_only_tags =[dict(name='td', attrs={'width':'520'})] - remove_tags_before =dict(name='span', attrs={'class':'izjava'}) - remove_tags_after =dict(name='html') - remove_tags = [ - dict(name=['object','link','iframe','meta','base']) - ,dict(attrs={'class':['fb-like','twitter-share-button']}) - ,dict(attrs={'rel':'nofollow'}) - ] - remove_attributes=['border','background','height','width','align','valign'] + remove_tags_before = dict(name='div', attrs={'class':'titleFont'}) + remove_tags_after = dict(name='div', attrs={'class':'standardFont'}) + remove_tags = [dict(name=['object','link','iframe','meta','base'])] + remove_attributes = ['border','background','height','width','align','valign'] def get_cover_url(self): cover_url = None soup = self.index_to_soup(self.INDEX) - for item in soup.findAll('a', href=True): - if item['href'].startswith('/pages/issue.php?id='): - simg = item.find('img') - if simg: - return self.PREFIX + item.img['src'] + cover = soup.find('img', attrs={'class':'issueImg'}) + if cover: + return self.PREFIX + cover['src'] return cover_url feeds = [(u'NIN Online', u'http://www.nin.co.rs/misc/rss.php?feed=RSS2.0')] - def preprocess_html(self, soup): - for item in soup.findAll(style=True): - del item['style'] - for item in soup.findAll('div'): - if len(item.contents) == 0: - item.extract() - for item in soup.findAll(['td','tr']): - item.name='div' - for item in soup.findAll('img'): - if not item.has_key('alt'): - item['alt'] = 'image' - for tbl in soup.findAll('table'): - img = tbl.find('img') - if img: - img.extract() - tbl.replaceWith(img) - return soup + def print_version(self, url): + return url + '&pf=1' + diff --git a/recipes/nsfw_corp.recipe b/recipes/nsfw_corp.recipe index c88bdd705e..0ed40ade3a 100644 --- a/recipes/nsfw_corp.recipe +++ b/recipes/nsfw_corp.recipe @@ -6,7 +6,6 @@ www.nsfwcorp.com ''' import urllib -from calibre import strftime from calibre.web.feeds.news import BasicNewsRecipe class NotSafeForWork(BasicNewsRecipe): @@ -21,8 +20,9 @@ class NotSafeForWork(BasicNewsRecipe): needs_subscription = True auto_cleanup = False INDEX = 'https://www.nsfwcorp.com' - LOGIN = INDEX + '/login' - use_embedded_content = False + LOGIN = INDEX + '/login/target/' + SETTINGS = INDEX + '/settings/' + use_embedded_content = True language = 'en' publication_type = 'magazine' masthead_url = 'http://assets.nsfwcorp.com/media/headers/nsfw_banner.jpg' @@ -46,15 +46,6 @@ class NotSafeForWork(BasicNewsRecipe): , 'language' : language } - remove_tags_before = dict(attrs={'id':'fromToLine'}) - remove_tags_after = dict(attrs={'id':'unlockButtonDiv'}) - remove_tags=[ - dict(name=['meta', 'link', 'iframe', 'embed', 'object']) - ,dict(name='a', attrs={'class':'switchToDeskNotes'}) - ,dict(attrs={'id':'unlockButtonDiv'}) - ] - remove_attributes = ['lang'] - def get_browser(self): br = BasicNewsRecipe.get_browser() br.open(self.LOGIN) @@ -65,30 +56,12 @@ class NotSafeForWork(BasicNewsRecipe): br.open(self.LOGIN, data) return br - def parse_index(self): - articles = [] - soup = self.index_to_soup(self.INDEX) - dispatches = soup.find(attrs={'id':'dispatches'}) - if dispatches: - for item in dispatches.findAll('h3'): - description = u'' - title_link = item.find('span', attrs={'class':'dispatchTitle'}) - description_link = item.find('span', attrs={'class':'dispatchSubtitle'}) - feed_link = item.find('a', href=True) - if feed_link: - url = self.INDEX + feed_link['href'] - title = self.tag_to_string(title_link) - description = self.tag_to_string(description_link) - date = strftime(self.timefmt) - articles.append({ - 'title' :title - ,'date' :date - ,'url' :url - ,'description':description - }) - return [('Dispatches', articles)] + def get_feeds(self): + self.feeds = [] + soup = self.index_to_soup(self.SETTINGS) + for item in soup.findAll('input', attrs={'type':'text'}): + if item.has_key('value') and item['value'].startswith('http://www.nsfwcorp.com/feed/'): + self.feeds.append(item['value']) + return self.feeds + return self.feeds - def preprocess_html(self, soup): - for item in soup.findAll(style=True): - del item['style'] - return soup diff --git a/recipes/nytimes.recipe b/recipes/nytimes.recipe index bf138ee289..ba97a2c0be 100644 --- a/recipes/nytimes.recipe +++ b/recipes/nytimes.recipe @@ -6,22 +6,41 @@ __copyright__ = '2008, Kovid Goyal ' nytimes.com ''' import re, string, time -from calibre import entity_to_unicode, strftime +from calibre import strftime from datetime import timedelta, date +from time import sleep from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, BeautifulStoneSoup - class NYTimes(BasicNewsRecipe): + recursions=1 # set this to zero to omit Related articles lists + + # set getTechBlogs to True to include the technology blogs + # set tech_oldest_article to control article age + # set tech_max_articles_per_feed to control article count + getTechBlogs = True + remove_empty_feeds = True + tech_oldest_article = 14 + tech_max_articles_per_feed = 25 + + # set headlinesOnly to True for the headlines-only version. If True, webEdition is ignored. headlinesOnly = True - # set webEdition to True for the Web edition of the newspaper. Set oldest_article to the - # number of days old an article can be for inclusion. If oldest_article = 0 all articles - # will be included. Note: oldest_article is ignored if webEdition = False + # set webEdition to True for the Web edition of the newspaper. Set oldest_web_article to the + # number of days old an article can be for inclusion. If oldest_web_article = None all articles + # will be included. Note: oldest_web_article is ignored if webEdition = False webEdition = False - oldest_article = 7 + oldest_web_article = 7 + + # download higher resolution images than the small thumbnails typically included in the article + # the down side of having large beautiful images is the file size is much larger, on the order of 7MB per paper + useHighResImages = True + + # replace paid Kindle Version: the name will be changed to "The New York Times" to cause + # previous paid versions of the new york times to best sent to the back issues folder on the kindle + replaceKindleVersion = False # includeSections: List of sections to include. If empty, all sections found will be included. # Otherwise, only the sections named will be included. For example, @@ -82,79 +101,123 @@ class NYTimes(BasicNewsRecipe): ('Education',u'education'), ('Multimedia',u'multimedia'), (u'Obituaries',u'obituaries'), - (u'Sunday Magazine',u'magazine'), - (u'Week in Review',u'weekinreview')] + (u'Sunday Magazine',u'magazine') + ] + + tech_feeds = [ + (u'Tech - Pogues Posts', u'http://pogue.blogs.nytimes.com/feed/'), + (u'Tech - Bits', u'http://bits.blogs.nytimes.com/feed/'), + (u'Tech - Gadgetwise', u'http://gadgetwise.blogs.nytimes.com/feed/'), + (u'Tech - Open', u'http://open.blogs.nytimes.com/feed/') + ] if headlinesOnly: title='New York Times Headlines' - description = 'Headlines from the New York Times. Needs a subscription from http://www.nytimes.com' - needs_subscription = 'optional' + description = 'Headlines from the New York Times' + needs_subscription = False elif webEdition: title='New York Times (Web)' description = 'New York Times on the Web' - needs_subscription = True + needs_subscription = False + elif replaceKindleVersion: + title='The New York Times' + description = 'Today\'s New York Times' + needs_subscription = False else: title='New York Times' description = 'Today\'s New York Times' - needs_subscription = True + needs_subscription = False - - month_list = ['january','february','march','april','may','june','july','august','september','october','november','december'] - - def decode_us_date(self,datestr): - udate = datestr.strip().lower().split() + def decode_url_date(self,url): + urlitems = url.split('/') try: - m = self.month_list.index(udate[0])+1 + d = date(int(urlitems[3]),int(urlitems[4]),int(urlitems[5])) except: - return date.today() - d = int(udate[1]) - y = int(udate[2]) - try: - d = date(y,m,d) - except: - d = date.today + try: + d = date(int(urlitems[4]),int(urlitems[5]),int(urlitems[6])) + except: + return None return d - earliest_date = date.today() - timedelta(days=oldest_article) + if oldest_web_article is None: + earliest_date = date.today() + else: + earliest_date = date.today() - timedelta(days=oldest_web_article) + oldest_article = 365 # by default, a long time ago __author__ = 'GRiker/Kovid Goyal/Nick Redding' language = 'en' requires_version = (0, 7, 5) - + encoding = 'utf-8' timefmt = '' - masthead_url = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif' + + #simultaneous_downloads = 1 # no longer required to deal with ads + cover_margins = (18,18,'grey99') remove_tags_before = dict(id='article') remove_tags_after = dict(id='article') - remove_tags = [dict(attrs={'class':[ - 'articleFooter', - 'articleTools', - 'columnGroup doubleRule', - 'columnGroup singleRule', - 'columnGroup last', - 'columnGroup last', - 'doubleRule', - 'dottedLine', - 'entry-meta', - 'entry-response module', - 'icon enlargeThis', - 'leftNavTabs', - 'metaFootnote', - 'module box nav', - 'nextArticleLink', - 'nextArticleLink clearfix', - 'post-tools', - 'relatedSearchesModule', - 'side_tool', - 'singleAd', - re.compile('^subNavigation'), - re.compile('^leaderboard'), - re.compile('^module'), - ]}), - dict(id=[ + remove_tags = [ + dict(attrs={'class':[ + 'articleFooter', + 'articleTools', + 'columnGroup singleRule', + 'columnGroup last', + 'columnGroup last', + 'doubleRule', + 'dottedLine', + 'entry-meta', + 'entry-response module', + 'leftNavTabs', + 'metaFootnote', + 'module box nav', + 'nextArticleLink', + 'nextArticleLink clearfix', + 'post-tools', + 'relatedSearchesModule', + 'side_tool', + 'singleAd', + 'entry entry-utility', #added for DealBook + 'entry-tags', #added for DealBook + 'footer promos clearfix', #added for DealBook + 'footer links clearfix', #added for DealBook + 'tabsContainer', #added for other blog downloads + 'column lastColumn', #added for other blog downloads + 'pageHeaderWithLabel', #added for other gadgetwise downloads + 'column two', #added for other blog downloads + 'column two last', #added for other blog downloads + 'column three', #added for other blog downloads + 'column three last', #added for other blog downloads + 'column four',#added for other blog downloads + 'column four last',#added for other blog downloads + 'column last', #added for other blog downloads + 'entry entry-related', + 'subNavigation tabContent active', #caucus blog navigation + 'mediaOverlay slideshow', + 'wideThumb', + 'video', #added 02-11-2011 + 'videoHeader',#added 02-11-2011 + 'articleInlineVideoHolder', #added 02-11-2011 + 'assetCompanionAd', + re.compile('^subNavigation'), + re.compile('^leaderboard'), + re.compile('^module'), + re.compile('commentCount'), + 'credit' + ]}), + dict(name='div', attrs={'class':re.compile('toolsList')}), # bits + dict(name='div', attrs={'class':re.compile('postNavigation')}), # bits + dict(name='div', attrs={'class':'tweet'}), + dict(name='span', attrs={'class':'commentCount meta'}), + dict(name='div', attrs={'id':'header'}), + dict(name='div', attrs={'id':re.compile('commentsContainer')}), # bits, pogue, gadgetwise, open + dict(name='ul', attrs={'class':re.compile('entry-tools')}), # pogue, gadgetwise + dict(name='div', attrs={'class':re.compile('nocontent')}), # pogue, gadgetwise + dict(name='div', attrs={'id':re.compile('respond')}), # open + dict(name='div', attrs={'class':re.compile('entry-tags')}), # pogue + dict(id=[ 'adxLeaderboard', 'adxSponLink', 'archive', @@ -183,22 +246,29 @@ class NYTimes(BasicNewsRecipe): 'side_index', 'side_tool', 'toolsRight', + 'skybox', #added for DealBook + 'TopAd', #added for DealBook + 'related-content', #added for DealBook ]), - dict(name=['script', 'noscript', 'style','form','hr'])] + dict(name=['script', 'noscript', 'style','form','hr'])] no_stylesheets = True extra_css = ''' .articleHeadline { text-align: left; margin-top:0.5em; margin-bottom:0.25em; } - .credit { text-align: right; font-size: small; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .byline { text-align: left; font-size: small; line-height:1em; margin-top:10px; margin-left:0; margin-right:0; margin-bottom: 0; } - .dateline { text-align: left; font-size: small; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .kicker { font-size: small; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .timestamp { text-align: left; font-size: small; } - .caption { font-size: small; font-style:italic; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .credit { font-weight: normal; text-align: right; font-size: 50%; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .byline { text-align: left; font-size: 50%; line-height:1em; margin-top:10px; margin-left:0; margin-right:0; margin-bottom: 0; } + .dateline { text-align: left; font-size: 50%; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .kicker { font-size: 50%; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .timestamp { font-weight: normal; text-align: left; font-size: 50%; } + .caption { font-size: 50%; font-style:italic; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } a:link {text-decoration: none; } + .date{font-size: 50%; } + .update{font-size: 50%; } .articleBody { } - .authorId {text-align: left; } + .authorId {text-align: left; font-size: 50%; } .image {text-align: center;} - .source {text-align: left; }''' + .aside {color:blue;margin:0px 0px 0px 0px; padding: 0px 0px 0px 0px; font-size:100%;} + .asidenote {color:blue;margin:0px 0px 0px 0px; padding: 0px 0px 0px 0px; font-size:100%;font-weight:bold;} + .source {text-align: left; font-size: x-small; }''' articles = {} @@ -222,11 +292,11 @@ class NYTimes(BasicNewsRecipe): del ans[idx] idx_max = idx_max-1 continue - if self.verbose: + if True: #self.verbose self.log("Section %s: %d articles" % (ans[idx][0], len(ans[idx][1])) ) for article in ans[idx][1]: total_article_count += 1 - if self.verbose: + if True: #self.verbose self.log("\t%-40.40s... \t%-60.60s..." % (article['title'].encode('cp1252','replace'), article['url'].encode('cp1252','replace'))) idx = idx+1 @@ -237,7 +307,7 @@ class NYTimes(BasicNewsRecipe): def exclude_url(self,url): if not url.startswith("http"): return True - if not url.endswith(".html"): + if not url.endswith(".html") and 'dealbook.nytimes.com' not in url: #added for DealBook return True if 'nytimes.com' not in url: return True @@ -280,88 +350,76 @@ class NYTimes(BasicNewsRecipe): def get_browser(self): br = BasicNewsRecipe.get_browser() - if self.username is not None and self.password is not None: - br.open('http://www.nytimes.com/auth/login') - br.form = br.forms().next() - br['userid'] = self.username - br['password'] = self.password - raw = br.submit().read() - if 'Please try again' in raw: - raise Exception('Your username and password are incorrect') return br - def skip_ad_pages(self, soup): - # Skip ad pages served before actual article - skip_tag = soup.find(True, {'name':'skip'}) - if skip_tag is not None: - self.log.warn("Found forwarding link: %s" % skip_tag.parent['href']) - url = 'http://www.nytimes.com' + re.sub(r'\?.*', '', skip_tag.parent['href']) - url += '?pagewanted=all' - self.log.warn("Skipping ad to article at '%s'" % url) - return self.index_to_soup(url, raw=True) - + cover_tag = 'NY_NYT' def get_cover_url(self): - cover = None - st = time.localtime() - year = str(st.tm_year) - month = "%.2d" % st.tm_mon - day = "%.2d" % st.tm_mday - cover = 'http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/nytfrontpage/scan.jpg' + cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.cover_tag+'.jpg' br = BasicNewsRecipe.get_browser() + daysback=1 try: br.open(cover) except: + while daysback<7: + cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str((date.today() - timedelta(days=daysback)).day)+'/lg/'+self.cover_tag+'.jpg' + br = BasicNewsRecipe.get_browser() + try: + br.open(cover) + except: + daysback = daysback+1 + continue + break + if daysback==7: self.log("\nCover unavailable") cover = None return cover + masthead_url = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif' + def short_title(self): return self.title - def index_to_soup(self, url_or_raw, raw=False): - ''' - OVERRIDE of class method - deals with various page encodings between index and articles - ''' - def get_the_soup(docEncoding, url_or_raw, raw=False) : - if re.match(r'\w+://', url_or_raw): - br = self.clone_browser(self.browser) - f = br.open_novisit(url_or_raw) + + def article_to_soup(self, url_or_raw, raw=False): + from contextlib import closing + import copy + from calibre.ebooks.chardet import xml_to_unicode + if re.match(r'\w+://', url_or_raw): + br = self.clone_browser(self.browser) + open_func = getattr(br, 'open_novisit', br.open) + with closing(open_func(url_or_raw)) as f: _raw = f.read() - f.close() - if not _raw: - raise RuntimeError('Could not fetch index from %s'%url_or_raw) + if not _raw: + raise RuntimeError('Could not fetch index from %s'%url_or_raw) + else: + _raw = url_or_raw + if raw: + return _raw + if not isinstance(_raw, unicode) and self.encoding: + if callable(self.encoding): + _raw = self.encoding(_raw) else: - _raw = url_or_raw - if raw: - return _raw + _raw = _raw.decode(self.encoding, 'replace') - if not isinstance(_raw, unicode) and self.encoding: - _raw = _raw.decode(docEncoding, 'replace') - massage = list(BeautifulSoup.MARKUP_MASSAGE) - massage.append((re.compile(r'&(\S+?);'), lambda match: entity_to_unicode(match, encoding=self.encoding))) - return BeautifulSoup(_raw, markupMassage=massage) + nmassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE) + nmassage.extend(self.preprocess_regexps) + nmassage += [(re.compile(r'', re.DOTALL), lambda m: '')] + # Some websites have buggy doctype declarations that mess up beautifulsoup + # Remove comments as they can leave detritus when extracting tags leaves + # multiple nested comments + nmassage.append((re.compile(r'', re.DOTALL), lambda m: '')) + usrc = xml_to_unicode(_raw, self.verbose, strip_encoding_pats=True)[0] + usrc = self.preprocess_raw_html(usrc, url_or_raw) + return BeautifulSoup(usrc, markupMassage=nmassage) - # Entry point - soup = get_the_soup( self.encoding, url_or_raw ) - contentType = soup.find(True,attrs={'http-equiv':'Content-Type'}) - docEncoding = str(contentType)[str(contentType).find('charset=') + len('charset='):str(contentType).rfind('"')] - if docEncoding == '' : - docEncoding = self.encoding - - if self.verbose > 2: - self.log( " document encoding: '%s'" % docEncoding) - if docEncoding != self.encoding : - soup = get_the_soup(docEncoding, url_or_raw) - - return soup def massageNCXText(self, description): # Kindle TOC descriptions won't render certain characters if description: massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)) # Replace '&' with '&' - massaged = re.sub("&","&", massaged) + massaged = re.sub("&","&", massaged) + massaged = re.sub("&","&", massaged) return self.fixChars(massaged) else: return description @@ -383,6 +441,16 @@ class NYTimes(BasicNewsRecipe): if self.filterDuplicates: if url in self.url_list: return + if self.webEdition: + date_tag = self.decode_url_date(url) + if date_tag is not None: + if self.oldest_web_article is not None: + if date_tag < self.earliest_date: + self.log("Skipping article %s" % url) + return + else: + self.log("Skipping article %s" % url) + return self.url_list.append(url) title = self.tag_to_string(a, use_alt=True).strip() description = '' @@ -407,6 +475,31 @@ class NYTimes(BasicNewsRecipe): description=description, author=author, content='')) + def get_tech_feeds(self,ans): + if self.getTechBlogs: + tech_articles = {} + key_list = [] + save_oldest_article = self.oldest_article + save_max_articles_per_feed = self.max_articles_per_feed + self.oldest_article = self.tech_oldest_article + self.max_articles_per_feed = self.tech_max_articles_per_feed + self.feeds = self.tech_feeds + tech = self.parse_feeds() + self.oldest_article = save_oldest_article + self.max_articles_per_feed = save_max_articles_per_feed + self.feeds = None + for f in tech: + key_list.append(f.title) + tech_articles[f.title] = [] + for a in f.articles: + tech_articles[f.title].append( + dict(title=a.title, url=a.url, date=a.date, + description=a.summary, author=a.author, + content=a.content)) + tech_ans = [(k, tech_articles[k]) for k in key_list if tech_articles.has_key(k)] + for x in tech_ans: + ans.append(x) + return ans def parse_web_edition(self): @@ -418,31 +511,41 @@ class NYTimes(BasicNewsRecipe): if sec_title in self.excludeSections: print "SECTION EXCLUDED: ",sec_title continue + try: + soup = self.index_to_soup('http://www.nytimes.com/pages/'+index_url+'/index.html') + except: + continue print 'Index URL: '+'http://www.nytimes.com/pages/'+index_url+'/index.html' - soup = self.index_to_soup('http://www.nytimes.com/pages/'+index_url+'/index.html') + self.key = sec_title # Find each article for div in soup.findAll(True, - attrs={'class':['section-headline', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): - if div['class'] in ['story', 'story headline'] : + attrs={'class':['section-headline', 'ledeStory', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): + if div['class'] in ['story', 'story headline', 'storyHeader'] : self.handle_article(div) + elif div['class'] == 'ledeStory': + divsub = div.find('div','storyHeader') + if divsub is not None: + self.handle_article(divsub) + ulrefer = div.find('ul','refer') + if ulrefer is not None: + for lidiv in ulrefer.findAll('li'): + self.handle_article(lidiv) elif div['class'] == 'headlinesOnly multiline flush': for lidiv in div.findAll('li'): self.handle_article(lidiv) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_todays_index(self): soup = self.index_to_soup('http://www.nytimes.com/pages/todayspaper/index.html') - skipping = False # Find each article for div in soup.findAll(True, attrs={'class':['section-headline', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): - if div['class'] in ['section-headline','sectionHeader']: self.key = string.capwords(self.feed_title(div)) self.key = self.key.replace('Op-ed','Op-Ed') @@ -466,7 +569,7 @@ class NYTimes(BasicNewsRecipe): self.handle_article(lidiv) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_headline_index(self): @@ -514,7 +617,7 @@ class NYTimes(BasicNewsRecipe): for h3_item in search_div.findAll('h3'): byline = h3_item.h6 if byline is not None: - author = self.tag_to_string(byline,usa_alt=False) + author = self.tag_to_string(byline,use_alt=False) else: author = '' a = h3_item.find('a', href=True) @@ -540,7 +643,7 @@ class NYTimes(BasicNewsRecipe): self.articles[section_name].append(dict(title=title, url=url, date=pubdate, description=description, author=author, content='')) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_index(self): if self.headlinesOnly: @@ -550,174 +653,438 @@ class NYTimes(BasicNewsRecipe): else: return self.parse_todays_index() - def strip_anchors(self,soup): + def strip_anchors(self,soup,kill_all=False): paras = soup.findAll(True) for para in paras: aTags = para.findAll('a') for a in aTags: if a.img is None: - a.replaceWith(a.renderContents().decode('cp1252','replace')) + if kill_all or (self.recursions==0): + a.replaceWith(self.tag_to_string(a,False)) + else: + if a.has_key('href'): + if a['href'].startswith('http://www.nytimes'): + if not a['href'].endswith('pagewanted=all'): + url = re.sub(r'\?.*', '', a['href']) + if self.exclude_url(url): + a.replaceWith(self.tag_to_string(a,False)) + else: + a['href'] = url+'?pagewanted=all' + elif not (a['href'].startswith('http://pogue') or \ + a['href'].startswith('http://bits') or \ + a['href'].startswith('http://travel') or \ + a['href'].startswith('http://business') or \ + a['href'].startswith('http://tech') or \ + a['href'].startswith('http://health') or \ + a['href'].startswith('http://dealbook') or \ + a['href'].startswith('http://open')): + a.replaceWith(self.tag_to_string(a,False)) + return soup + + def handle_tags(self,soup): + try: + print("HANDLE TAGS: TITLE = "+self.tag_to_string(soup.title)) + except: + print("HANDLE TAGS: NO TITLE") + if soup is None: + print("ERROR: handle_tags received NoneType") + return None + +## print("HANDLING AD FORWARD:") +## print(soup) + if self.keep_only_tags: + body = Tag(soup, 'body') + try: + if isinstance(self.keep_only_tags, dict): + self.keep_only_tags = [self.keep_only_tags] + for spec in self.keep_only_tags: + for tag in soup.find('body').findAll(**spec): + body.insert(len(body.contents), tag) + soup.find('body').replaceWith(body) + except AttributeError: # soup has no body element + pass + + def remove_beyond(tag, next): + while tag is not None and getattr(tag, 'name', None) != 'body': + after = getattr(tag, next) + while after is not None: + ns = getattr(tag, next) + after.extract() + after = ns + tag = tag.parent + + if self.remove_tags_after is not None: + rt = [self.remove_tags_after] if isinstance(self.remove_tags_after, dict) else self.remove_tags_after + for spec in rt: + tag = soup.find(**spec) + remove_beyond(tag, 'nextSibling') + + if self.remove_tags_before is not None: + tag = soup.find(**self.remove_tags_before) + remove_beyond(tag, 'previousSibling') + + for kwds in self.remove_tags: + for tag in soup.findAll(**kwds): + tag.extract() + return soup def preprocess_html(self, soup): + #print("PREPROCESS TITLE="+self.tag_to_string(soup.title)) + skip_tag = soup.find(True, {'name':'skip'}) + if skip_tag is not None: + #url = 'http://www.nytimes.com' + re.sub(r'\?.*', '', skip_tag.parent['href']) + url = 'http://www.nytimes.com' + skip_tag.parent['href'] + #url += '?pagewanted=all' + self.log.warn("Skipping ad to article at '%s'" % url) + sleep(5) + soup = self.handle_tags(self.article_to_soup(url)) - if self.webEdition & (self.oldest_article>0): - date_tag = soup.find(True,attrs={'class': ['dateline','date']}) - if date_tag: - date_str = self.tag_to_string(date_tag,use_alt=False) - date_str = date_str.replace('Published:','') - date_items = date_str.split(',') + # check if the article is from one of the tech blogs + blog=soup.find('div',attrs={'id':['pogue','bits','gadgetwise','open']}) + + if blog is not None: + old_body = soup.find('body') + new_body=Tag(soup,'body') + new_body.append(soup.find('div',attrs={'id':'content'})) + new_body.find('div',attrs={'id':'content'})['id']='blogcontent' # identify for postprocess_html + old_body.replaceWith(new_body) + for divr in soup.findAll('div',attrs={'class':re.compile('w190 right')}): + if divr.find(text=re.compile('Sign up')): + divr.extract() + divr = soup.find('div',attrs={'id':re.compile('related-content')}) + if divr is not None: + # handle related articles + rlist = [] + ul = divr.find('ul') + if ul is not None: + for li in ul.findAll('li'): + atag = li.find('a') + if atag is not None: + if atag['href'].startswith('http://pogue') or atag['href'].startswith('http://bits') or \ + atag['href'].startswith('http://open'): + atag.find(text=True).replaceWith(self.massageNCXText(self.tag_to_string(atag,False))) + rlist.append(atag) + divr.extract() + if rlist != []: + asidediv = Tag(soup,'div',[('class','aside')]) + if soup.find('hr') is None: + asidediv.append(Tag(soup,'hr')) + h4 = Tag(soup,'h4',[('class','asidenote')]) + h4.insert(0,"Related Posts") + asidediv.append(h4) + ul = Tag(soup,'ul') + for r in rlist: + li = Tag(soup,'li',[('class','aside')]) + r['class'] = 'aside' + li.append(r) + ul.append(li) + asidediv.append(ul) + asidediv.append(Tag(soup,'hr')) + smain = soup.find('body') + smain.append(asidediv) + for atag in soup.findAll('a'): + img = atag.find('img') + if img is not None: + atag.replaceWith(img) + elif not atag.has_key('href'): + atag.replaceWith(atag.renderContents().decode('cp1252','replace')) + elif not (atag['href'].startswith('http://www.nytimes') or atag['href'].startswith('http://pogue') or \ + atag['href'].startswith('http://bits') or atag['href'].startswith('http://open')): + atag.replaceWith(atag.renderContents().decode('cp1252','replace')) + hdr = soup.find('address') + if hdr is not None: + hdr.name='span' + for span_credit in soup.findAll('span','credit'): + sp = Tag(soup,'span') + span_credit.replaceWith(sp) + sp.append(Tag(soup,'br')) + sp.append(span_credit) + sp.append(Tag(soup,'br')) + + else: # nytimes article + + related = [] # these will be the related articles + first_outer = None # first related outer tag + first_related = None # first related tag + for outerdiv in soup.findAll(attrs={'class': re.compile('articleInline runaroundLeft')}): + for rdiv in soup.findAll('div','columnGroup doubleRule'): + if rdiv.find('h3') is not None: + if self.tag_to_string(rdiv.h3,False).startswith('Related'): + rdiv.h3.find(text=True).replaceWith("Related articles") + rdiv.h3['class'] = 'asidenote' + for litag in rdiv.findAll('li'): + if litag.find('a') is not None: + if litag.find('a')['href'].startswith('http://www.nytimes.com'): + url = re.sub(r'\?.*', '', litag.find('a')['href']) + litag.find('a')['href'] = url+'?pagewanted=all' + litag.extract() + related.append(litag) + if first_related is None: + first_related = rdiv + first_outer = outerdiv + else: + litag.extract() + if related != []: + for r in related: + if r.h6: # don't want the anchor inside a h6 tag + r.h6.replaceWith(r.h6.a) + first_related.ul.append(r) + first_related.insert(0,Tag(soup,'hr')) + first_related.append(Tag(soup,'hr')) + first_related['class'] = 'aside' + first_outer.replaceWith(first_related) # replace the outer tag with the related tag + + for rdiv in soup.findAll(attrs={'class': re.compile('articleInline runaroundLeft')}): + rdiv.extract() + + kicker_tag = soup.find(attrs={'class':'kicker'}) + if kicker_tag: # remove Op_Ed author head shots + tagline = self.tag_to_string(kicker_tag) + if tagline=='Op-Ed Columnist': + img_div = soup.find('div','inlineImage module') + if img_div: + img_div.extract() + + if self.useHighResImages: try: - datestring = date_items[0]+' '+date_items[1] - article_date = self.decode_us_date(datestring) + #open up all the "Enlarge this Image" pop-ups and download the full resolution jpegs + enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) + if enlargeThisList: + for popupref in enlargeThisList: + popupreflink = popupref.find('a') + if popupreflink: + reflinkstring = str(popupreflink['href']) + refstart = reflinkstring.find("javascript:pop_me_up2('") + len("javascript:pop_me_up2('") + refend = reflinkstring.find(".html", refstart) + len(".html") + reflinkstring = reflinkstring[refstart:refend] + + popuppage = self.browser.open(reflinkstring) + popuphtml = popuppage.read() + popuppage.close() + if popuphtml: + st = time.localtime() + year = str(st.tm_year) + month = "%.2d" % st.tm_mon + day = "%.2d" % st.tm_mday + imgstartpos = popuphtml.find('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') + len('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') + highResImageLink = 'http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/' + popuphtml[imgstartpos:popuphtml.find('.jpg',imgstartpos)+4] + popupSoup = BeautifulSoup(popuphtml) + highResTag = popupSoup.find('img', {'src':highResImageLink}) + if highResTag: + try: + newWidth = highResTag['width'] + newHeight = highResTag['height'] + imageTag = popupref.parent.find("img") + except: + self.log("Error: finding width and height of img") + popupref.extract() + if imageTag: + try: + imageTag['src'] = highResImageLink + imageTag['width'] = newWidth + imageTag['height'] = newHeight + except: + self.log("Error setting the src width and height parameters") + except Exception: + self.log("Error pulling high resolution images") + + try: + #in case pulling images failed, delete the enlarge this text + enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) + if enlargeThisList: + for popupref in enlargeThisList: + popupref.extract() except: - article_date = date.today() - if article_date < self.earliest_date: - self.log("Skipping article dated %s" % date_str) - return None + self.log("Error removing Enlarge this text") - kicker_tag = soup.find(attrs={'class':'kicker'}) - if kicker_tag: # remove Op_Ed author head shots - tagline = self.tag_to_string(kicker_tag) - if tagline=='Op-Ed Columnist': - img_div = soup.find('div','inlineImage module') - if img_div: - img_div.extract() - return self.strip_anchors(soup) - def postprocess_html(self,soup, True): - try: - if self.one_picture_per_article: - # Remove all images after first - largeImg = soup.find(True, {'class':'articleSpanImage'}) - inlineImgs = soup.findAll(True, {'class':'inlineImage module'}) - if largeImg: - for inlineImg in inlineImgs: - inlineImg.extract() - else: - if inlineImgs: - firstImg = inlineImgs[0] - for inlineImg in inlineImgs[1:]: - inlineImg.extract() - # Move firstImg before article body - cgFirst = soup.find(True, {'class':re.compile('columnGroup *first')}) - if cgFirst: - # Strip all sibling NavigableStrings: noise - navstrings = cgFirst.findAll(text=True, recursive=False) - [ns.extract() for ns in navstrings] - headline_found = False - tag = cgFirst.find(True) - insertLoc = 0 - while True: - insertLoc += 1 - if hasattr(tag,'class') and tag['class'] == 'articleHeadline': - headline_found = True - break - tag = tag.nextSibling - if not tag: - headline_found = False - break - if headline_found: - cgFirst.insert(insertLoc,firstImg) - else: - self.log(">>> No class:'columnGroup first' found <<<") - except: - self.log("ERROR: One picture per article in postprocess_html") + return self.strip_anchors(soup,False) - try: - # Change captions to italic - for caption in soup.findAll(True, {'class':'caption'}) : - if caption and len(caption) > 0: - cTag = Tag(soup, "p", [("class", "caption")]) - c = self.fixChars(self.tag_to_string(caption,use_alt=False)).strip() - mp_off = c.find("More Photos") - if mp_off >= 0: - c = c[:mp_off] - cTag.insert(0, c) - caption.replaceWith(cTag) - except: - self.log("ERROR: Problem in change captions to italic") + def postprocess_html(self,soup,first_fetch): + if not first_fetch: # remove Related links + for aside in soup.findAll('div','aside'): + aside.extract() + soup = self.strip_anchors(soup,True) - try: - # Change to

- h1 = soup.find('h1') - if h1: - headline = h1.find("nyt_headline") - if headline: - tag = Tag(soup, "h2") - tag['class'] = "headline" - tag.insert(0, self.fixChars(headline.contents[0])) - h1.replaceWith(tag) - else: - # Blog entry - replace headline, remove
tags - headline = soup.find('title') - if headline: - tag = Tag(soup, "h2") - tag['class'] = "headline" - tag.insert(0, self.fixChars(headline.contents[0])) - soup.insert(0, tag) - hrs = soup.findAll('hr') - for hr in hrs: - hr.extract() - except: - self.log("ERROR: Problem in Change to

") + if soup.find('div',attrs={'id':'blogcontent'}) is None: + if first_fetch: + aside = soup.find('div','aside') + if aside is not None: # move the related list to the end of the article + art = soup.find('div',attrs={'id':'article'}) + if art is None: + art = soup.find('div',attrs={'class':'article'}) + if art is not None: + art.append(aside) + try: + if self.one_picture_per_article: + # Remove all images after first + largeImg = soup.find(True, {'class':'articleSpanImage'}) + inlineImgs = soup.findAll(True, {'class':'inlineImage module'}) + if largeImg: + for inlineImg in inlineImgs: + inlineImg.extract() + else: + if inlineImgs: + firstImg = inlineImgs[0] + for inlineImg in inlineImgs[1:]: + inlineImg.extract() + # Move firstImg before article body + cgFirst = soup.find(True, {'class':re.compile('columnGroup *first')}) + if cgFirst: + # Strip all sibling NavigableStrings: noise + navstrings = cgFirst.findAll(text=True, recursive=False) + [ns.extract() for ns in navstrings] + headline_found = False + tag = cgFirst.find(True) + insertLoc = 0 + while True: + insertLoc += 1 + if hasattr(tag,'class') and tag['class'] == 'articleHeadline': + headline_found = True + break + tag = tag.nextSibling + if not tag: + headline_found = False + break + if headline_found: + cgFirst.insert(insertLoc,firstImg) + else: + self.log(">>> No class:'columnGroup first' found <<<") + except: + self.log("ERROR: One picture per article in postprocess_html") - try: - # Change

to

- used in editorial blogs - masthead = soup.find("h1") - if masthead: - # Nuke the href - if masthead.a: - del(masthead.a['href']) - tag = Tag(soup, "h3") - tag.insert(0, self.fixChars(masthead.contents[0])) - masthead.replaceWith(tag) - except: - self.log("ERROR: Problem in Change

to

- used in editorial blogs") + try: + # Change captions to italic + for caption in soup.findAll(True, {'class':'caption'}) : + if caption and len(caption) > 0: + cTag = Tag(soup, "p", [("class", "caption")]) + c = self.fixChars(self.tag_to_string(caption,use_alt=False)).strip() + mp_off = c.find("More Photos") + if mp_off >= 0: + c = c[:mp_off] + cTag.insert(0, c) + caption.replaceWith(cTag) + except: + self.log("ERROR: Problem in change captions to italic") - try: - # Change to - for subhead in soup.findAll(True, {'class':'bold'}) : - if subhead.contents: - bTag = Tag(soup, "b") - bTag.insert(0, subhead.contents[0]) - subhead.replaceWith(bTag) - except: - self.log("ERROR: Problem in Change

to

- used in editorial blogs") + try: + # Change to

+ h1 = soup.find('h1') + blogheadline = str(h1) #added for dealbook + if h1: + headline = h1.find("nyt_headline") + if headline: + tag = Tag(soup, "h2") + tag['class'] = "headline" + tag.insert(0, self.fixChars(headline.contents[0])) + h1.replaceWith(tag) + elif blogheadline.find('entry-title'):#added for dealbook + tag = Tag(soup, "h2")#added for dealbook + tag['class'] = "headline"#added for dealbook + tag.insert(0, self.fixChars(h1.contents[0]))#added for dealbook + h1.replaceWith(tag)#added for dealbook - try: - divTag = soup.find('div',attrs={'id':'articleBody'}) - if divTag: - divTag['class'] = divTag['id'] - except: - self.log("ERROR: Problem in soup.find(div,attrs={id:articleBody})") + else: + # Blog entry - replace headline, remove
tags - BCC I think this is no longer functional 1-18-2011 + headline = soup.find('title') + if headline: + tag = Tag(soup, "h2") + tag['class'] = "headline" + tag.insert(0, self.fixChars(self.tag_to_string(headline,False))) + soup.insert(0, tag) + hrs = soup.findAll('hr') + for hr in hrs: + hr.extract() + except: + self.log("ERROR: Problem in Change to

") - try: - # Add class="authorId" to
so we can format with CSS - divTag = soup.find('div',attrs={'id':'authorId'}) - if divTag and divTag.contents[0]: - tag = Tag(soup, "p") - tag['class'] = "authorId" - tag.insert(0, self.fixChars(self.tag_to_string(divTag.contents[0], - use_alt=False))) - divTag.replaceWith(tag) - except: - self.log("ERROR: Problem in Add class=authorId to
so we can format with CSS") + try: + #if this is from a blog (dealbook, fix the byline format + bylineauthor = soup.find('address',attrs={'class':'byline author vcard'}) + if bylineauthor: + tag = Tag(soup, "h6") + tag['class'] = "byline" + tag.insert(0, self.fixChars(self.tag_to_string(bylineauthor,False))) + bylineauthor.replaceWith(tag) + except: + self.log("ERROR: fixing byline author format") - return soup + try: + #if this is a blog (dealbook) fix the credit style for the pictures + blogcredit = soup.find('div',attrs={'class':'credit'}) + if blogcredit: + tag = Tag(soup, "h6") + tag['class'] = "credit" + tag.insert(0, self.fixChars(self.tag_to_string(blogcredit,False))) + blogcredit.replaceWith(tag) + except: + self.log("ERROR: fixing credit format") + + + try: + # Change

to

- used in editorial blogs + masthead = soup.find("h1") + if masthead: + # Nuke the href + if masthead.a: + del(masthead.a['href']) + tag = Tag(soup, "h3") + tag.insert(0, self.fixChars(masthead.contents[0])) + masthead.replaceWith(tag) + except: + self.log("ERROR: Problem in Change

to

- used in editorial blogs") + + try: + # Change to + for subhead in soup.findAll(True, {'class':'bold'}) : + if subhead.contents: + bTag = Tag(soup, "b") + bTag.insert(0, subhead.contents[0]) + subhead.replaceWith(bTag) + except: + self.log("ERROR: Problem in Change

to

- used in editorial blogs") + try: + #remove the update tag + blogupdated = soup.find('span', {'class':'update'}) + if blogupdated: + blogupdated.replaceWith("") + except: + self.log("ERROR: Removing strong tag") + + try: + divTag = soup.find('div',attrs={'id':'articleBody'}) + if divTag: + divTag['class'] = divTag['id'] + except: + self.log("ERROR: Problem in soup.find(div,attrs={id:articleBody})") + + try: + # Add class="authorId" to
so we can format with CSS + divTag = soup.find('div',attrs={'id':'authorId'}) + if divTag and divTag.contents[0]: + tag = Tag(soup, "p") + tag['class'] = "authorId" + tag.insert(0, self.fixChars(self.tag_to_string(divTag.contents[0], + use_alt=False))) + divTag.replaceWith(tag) + except: + self.log("ERROR: Problem in Add class=authorId to
so we can format with CSS") + + return soup def populate_article_metadata(self, article, soup, first): - if first and hasattr(self, 'add_toc_thumbnail'): - idxdiv = soup.find('div',attrs={'class':'articleSpanImage'}) - if idxdiv is not None: - if idxdiv.img: - self.add_toc_thumbnail(article, idxdiv.img['src']) - else: - img = soup.find('img') - if img is not None: - self.add_toc_thumbnail(article, img['src']) - + if not first: + return + idxdiv = soup.find('div',attrs={'class':'articleSpanImage'}) + if idxdiv is not None: + if idxdiv.img: + self.add_toc_thumbnail(article, re.sub(r'links\\link\d+\\','',idxdiv.img['src'])) + else: + img = soup.find('body').find('img') + if img is not None: + self.add_toc_thumbnail(article, re.sub(r'links\\link\d+\\','',img['src'])) shortparagraph = "" try: if len(article.text_summary.strip()) == 0: @@ -731,13 +1098,22 @@ class NYTimes(BasicNewsRecipe): #account for blank paragraphs and short paragraphs by appending them to longer ones if len(refparagraph) > 0: if len(refparagraph) > 70: #approximately one line of text - article.summary = article.text_summary = shortparagraph + refparagraph + newpara = shortparagraph + refparagraph + newparaDateline,newparaEm,newparaDesc = newpara.partition('—') + if newparaEm == '': + newparaDateline,newparaEm,newparaDesc = newpara.partition('—') + if newparaEm == '': + newparaDesc = newparaDateline + article.summary = article.text_summary = newparaDesc.strip() return else: shortparagraph = refparagraph + " " if shortparagraph.strip().find(" ") == -1 and not shortparagraph.strip().endswith(":"): shortparagraph = shortparagraph + "- " + else: + article.summary = article.text_summary = self.massageNCXText(article.text_summary) except: self.log("Error creating article descriptions") return + diff --git a/recipes/nytimes_sub.recipe b/recipes/nytimes_sub.recipe index 3c1bdcbc0d..d550a5158f 100644 --- a/recipes/nytimes_sub.recipe +++ b/recipes/nytimes_sub.recipe @@ -6,31 +6,42 @@ __copyright__ = '2008, Kovid Goyal ' nytimes.com ''' import re, string, time -from calibre import entity_to_unicode, strftime +from calibre import strftime from datetime import timedelta, date +from time import sleep from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, BeautifulStoneSoup - class NYTimes(BasicNewsRecipe): + recursions=1 # set this to zero to omit Related articles lists + + # set getTechBlogs to True to include the technology blogs + # set tech_oldest_article to control article age + # set tech_max_articles_per_feed to control article count + getTechBlogs = True + remove_empty_feeds = True + tech_oldest_article = 14 + tech_max_articles_per_feed = 25 + + # set headlinesOnly to True for the headlines-only version. If True, webEdition is ignored. headlinesOnly = False - # set webEdition to True for the Web edition of the newspaper. Set oldest_article to the - # number of days old an article can be for inclusion. If oldest_article = 0 all articles - # will be included. Note: oldest_article is ignored if webEdition = False + # set webEdition to True for the Web edition of the newspaper. Set oldest_web_article to the + # number of days old an article can be for inclusion. If oldest_web_article = None all articles + # will be included. Note: oldest_web_article is ignored if webEdition = False webEdition = False - oldest_article = 7 - - # replace paid Kindle Version: the name will be changed to "The New York Times" to cause - # previous paid versions of the new york times to best sent to the back issues folder on the kindle - replaceKindleVersion = False + oldest_web_article = None # download higher resolution images than the small thumbnails typically included in the article # the down side of having large beautiful images is the file size is much larger, on the order of 7MB per paper useHighResImages = True + # replace paid Kindle Version: the name will be changed to "The New York Times" to cause + # previous paid versions of the new york times to best sent to the back issues folder on the kindle + replaceKindleVersion = False + # includeSections: List of sections to include. If empty, all sections found will be included. # Otherwise, only the sections named will be included. For example, # @@ -90,107 +101,123 @@ class NYTimes(BasicNewsRecipe): ('Education',u'education'), ('Multimedia',u'multimedia'), (u'Obituaries',u'obituaries'), - (u'Sunday Magazine',u'magazine'), - (u'Week in Review',u'weekinreview')] + (u'Sunday Magazine',u'magazine') + ] + + tech_feeds = [ + (u'Tech - Pogues Posts', u'http://pogue.blogs.nytimes.com/feed/'), + (u'Tech - Bits', u'http://bits.blogs.nytimes.com/feed/'), + (u'Tech - Gadgetwise', u'http://gadgetwise.blogs.nytimes.com/feed/'), + (u'Tech - Open', u'http://open.blogs.nytimes.com/feed/') + ] + if headlinesOnly: title='New York Times Headlines' description = 'Headlines from the New York Times' - needs_subscription = True + needs_subscription = False elif webEdition: title='New York Times (Web)' description = 'New York Times on the Web' - needs_subscription = True + needs_subscription = False elif replaceKindleVersion: title='The New York Times' description = 'Today\'s New York Times' - needs_subscription = True + needs_subscription = False else: title='New York Times' - description = 'Today\'s New York Times. Needs subscription from http://www.nytimes.com' - needs_subscription = True + description = 'Today\'s New York Times' + needs_subscription = False - - month_list = ['january','february','march','april','may','june','july','august','september','october','november','december'] - - def decode_us_date(self,datestr): - udate = datestr.strip().lower().split() + def decode_url_date(self,url): + urlitems = url.split('/') try: - m = self.month_list.index(udate[0])+1 + d = date(int(urlitems[3]),int(urlitems[4]),int(urlitems[5])) except: - return date.today() - d = int(udate[1]) - y = int(udate[2]) - try: - d = date(y,m,d) - except: - d = date.today + try: + d = date(int(urlitems[4]),int(urlitems[5]),int(urlitems[6])) + except: + return None return d - earliest_date = date.today() - timedelta(days=oldest_article) + if oldest_web_article is None: + earliest_date = date.today() + else: + earliest_date = date.today() - timedelta(days=oldest_web_article) + oldest_article = 365 # by default, a long time ago - __author__ = 'GRiker/Kovid Goyal/Nick Redding/Ben Collier' + __author__ = 'GRiker/Kovid Goyal/Nick Redding' language = 'en' requires_version = (0, 7, 5) - + encoding = 'utf-8' timefmt = '' - masthead_url = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif' + + #simultaneous_downloads = 1 # no longer required to deal with ads + cover_margins = (18,18,'grey99') remove_tags_before = dict(id='article') remove_tags_after = dict(id='article') - remove_tags = [dict(attrs={'class':[ - 'articleFooter', - 'articleTools', - 'columnGroup doubleRule', - 'columnGroup singleRule', - 'columnGroup last', - 'columnGroup last', - 'doubleRule', - 'dottedLine', - 'entry-meta', - 'entry-response module', - #'icon enlargeThis', #removed to provide option for high res images - 'leftNavTabs', - 'metaFootnote', - 'module box nav', - 'nextArticleLink', - 'nextArticleLink clearfix', - 'post-tools', - 'relatedSearchesModule', - 'side_tool', - 'singleAd', - 'entry entry-utility', #added for DealBook - 'entry-tags', #added for DealBook - 'footer promos clearfix', #added for DealBook - 'footer links clearfix', #added for DealBook - 'tabsContainer', #added for other blog downloads - 'column lastColumn', #added for other blog downloads - 'pageHeaderWithLabel', #added for other gadgetwise downloads - 'column two', #added for other blog downloads - 'column two last', #added for other blog downloads - 'column three', #added for other blog downloads - 'column three last', #added for other blog downloads - 'column four',#added for other blog downloads - 'column four last',#added for other blog downloads - 'column last', #added for other blog downloads - 'timestamp published', #added for other blog downloads - 'entry entry-related', - 'subNavigation tabContent active', #caucus blog navigation - 'columnGroup doubleRule', - 'mediaOverlay slideshow', - 'headlinesOnly multiline flush', - 'wideThumb', - 'video', #added 02-11-2011 - 'videoHeader',#added 02-11-2011 - 'articleInlineVideoHolder', #added 02-11-2011 - 'assetCompanionAd', - re.compile('^subNavigation'), - re.compile('^leaderboard'), - re.compile('^module'), - ]}), - dict(id=[ + remove_tags = [ + dict(attrs={'class':[ + 'articleFooter', + 'articleTools', + 'columnGroup singleRule', + 'columnGroup last', + 'columnGroup last', + 'doubleRule', + 'dottedLine', + 'entry-meta', + 'entry-response module', + 'leftNavTabs', + 'metaFootnote', + 'module box nav', + 'nextArticleLink', + 'nextArticleLink clearfix', + 'post-tools', + 'relatedSearchesModule', + 'side_tool', + 'singleAd', + 'entry entry-utility', #added for DealBook + 'entry-tags', #added for DealBook + 'footer promos clearfix', #added for DealBook + 'footer links clearfix', #added for DealBook + 'tabsContainer', #added for other blog downloads + 'column lastColumn', #added for other blog downloads + 'pageHeaderWithLabel', #added for other gadgetwise downloads + 'column two', #added for other blog downloads + 'column two last', #added for other blog downloads + 'column three', #added for other blog downloads + 'column three last', #added for other blog downloads + 'column four',#added for other blog downloads + 'column four last',#added for other blog downloads + 'column last', #added for other blog downloads + 'entry entry-related', + 'subNavigation tabContent active', #caucus blog navigation + 'mediaOverlay slideshow', + 'wideThumb', + 'video', #added 02-11-2011 + 'videoHeader',#added 02-11-2011 + 'articleInlineVideoHolder', #added 02-11-2011 + 'assetCompanionAd', + re.compile('^subNavigation'), + re.compile('^leaderboard'), + re.compile('^module'), + re.compile('commentCount'), + 'credit' + ]}), + dict(name='div', attrs={'class':re.compile('toolsList')}), # bits + dict(name='div', attrs={'class':re.compile('postNavigation')}), # bits + dict(name='div', attrs={'class':'tweet'}), + dict(name='span', attrs={'class':'commentCount meta'}), + dict(name='div', attrs={'id':'header'}), + dict(name='div', attrs={'id':re.compile('commentsContainer')}), # bits, pogue, gadgetwise, open + dict(name='ul', attrs={'class':re.compile('entry-tools')}), # pogue, gadgetwise + dict(name='div', attrs={'class':re.compile('nocontent')}), # pogue, gadgetwise + dict(name='div', attrs={'id':re.compile('respond')}), # open + dict(name='div', attrs={'class':re.compile('entry-tags')}), # pogue + dict(id=[ 'adxLeaderboard', 'adxSponLink', 'archive', @@ -223,21 +250,25 @@ class NYTimes(BasicNewsRecipe): 'TopAd', #added for DealBook 'related-content', #added for DealBook ]), - dict(name=['script', 'noscript', 'style','form','hr'])] + dict(name=['script', 'noscript', 'style','form','hr'])] no_stylesheets = True extra_css = ''' .articleHeadline { text-align: left; margin-top:0.5em; margin-bottom:0.25em; } - .credit { text-align: right; font-size: small; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .byline { text-align: left; font-size: small; line-height:1em; margin-top:10px; margin-left:0; margin-right:0; margin-bottom: 0; } - .dateline { text-align: left; font-size: small; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .kicker { font-size: small; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } - .timestamp { text-align: left; font-size: small; } - .caption { font-size: small; font-style:italic; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .credit { font-weight: normal; text-align: right; font-size: 50%; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .byline { text-align: left; font-size: 50%; line-height:1em; margin-top:10px; margin-left:0; margin-right:0; margin-bottom: 0; } + .dateline { text-align: left; font-size: 50%; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .kicker { font-size: 50%; line-height:1em;margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } + .timestamp { font-weight: normal; text-align: left; font-size: 50%; } + .caption { font-size: 50%; font-style:italic; line-height:1em; margin-top:5px; margin-left:0; margin-right:0; margin-bottom: 0; } a:link {text-decoration: none; } + .date{font-size: 50%; } + .update{font-size: 50%; } .articleBody { } - .authorId {text-align: left; } + .authorId {text-align: left; font-size: 50%; } .image {text-align: center;} - .source {text-align: left; }''' + .aside {color:blue;margin:0px 0px 0px 0px; padding: 0px 0px 0px 0px; font-size:100%;} + .asidenote {color:blue;margin:0px 0px 0px 0px; padding: 0px 0px 0px 0px; font-size:100%;font-weight:bold;} + .source {text-align: left; font-size: x-small; }''' articles = {} @@ -261,11 +292,11 @@ class NYTimes(BasicNewsRecipe): del ans[idx] idx_max = idx_max-1 continue - if self.verbose: + if True: #self.verbose self.log("Section %s: %d articles" % (ans[idx][0], len(ans[idx][1])) ) for article in ans[idx][1]: total_article_count += 1 - if self.verbose: + if True: #self.verbose self.log("\t%-40.40s... \t%-60.60s..." % (article['title'].encode('cp1252','replace'), article['url'].encode('cp1252','replace'))) idx = idx+1 @@ -276,7 +307,7 @@ class NYTimes(BasicNewsRecipe): def exclude_url(self,url): if not url.startswith("http"): return True - if not url.endswith(".html") and 'dealbook.nytimes.com' not in url and 'blogs.nytimes.com' not in url: #added for DealBook + if not url.endswith(".html") and 'dealbook.nytimes.com' not in url: #added for DealBook return True if 'nytimes.com' not in url: return True @@ -319,88 +350,76 @@ class NYTimes(BasicNewsRecipe): def get_browser(self): br = BasicNewsRecipe.get_browser() - if self.username is not None and self.password is not None: - br.open('http://www.nytimes.com/auth/login') - br.form = br.forms().next() - br['userid'] = self.username - br['password'] = self.password - raw = br.submit().read() - if 'Please try again' in raw: - raise Exception('Your username and password are incorrect') return br - def skip_ad_pages(self, soup): - # Skip ad pages served before actual article - skip_tag = soup.find(True, {'name':'skip'}) - if skip_tag is not None: - self.log.warn("Found forwarding link: %s" % skip_tag.parent['href']) - url = 'http://www.nytimes.com' + re.sub(r'\?.*', '', skip_tag.parent['href']) - url += '?pagewanted=all' - self.log.warn("Skipping ad to article at '%s'" % url) - return self.index_to_soup(url, raw=True) - + cover_tag = 'NY_NYT' def get_cover_url(self): - cover = None - st = time.localtime() - year = str(st.tm_year) - month = "%.2d" % st.tm_mon - day = "%.2d" % st.tm_mday - cover = 'http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/nytfrontpage/scan.jpg' + cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.cover_tag+'.jpg' br = BasicNewsRecipe.get_browser() + daysback=1 try: br.open(cover) except: + while daysback<7: + cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str((date.today() - timedelta(days=daysback)).day)+'/lg/'+self.cover_tag+'.jpg' + br = BasicNewsRecipe.get_browser() + try: + br.open(cover) + except: + daysback = daysback+1 + continue + break + if daysback==7: self.log("\nCover unavailable") cover = None return cover + masthead_url = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif' + def short_title(self): return self.title - def index_to_soup(self, url_or_raw, raw=False): - ''' - OVERRIDE of class method - deals with various page encodings between index and articles - ''' - def get_the_soup(docEncoding, url_or_raw, raw=False) : - if re.match(r'\w+://', url_or_raw): - br = self.clone_browser(self.browser) - f = br.open_novisit(url_or_raw) + + def article_to_soup(self, url_or_raw, raw=False): + from contextlib import closing + import copy + from calibre.ebooks.chardet import xml_to_unicode + if re.match(r'\w+://', url_or_raw): + br = self.clone_browser(self.browser) + open_func = getattr(br, 'open_novisit', br.open) + with closing(open_func(url_or_raw)) as f: _raw = f.read() - f.close() - if not _raw: - raise RuntimeError('Could not fetch index from %s'%url_or_raw) + if not _raw: + raise RuntimeError('Could not fetch index from %s'%url_or_raw) + else: + _raw = url_or_raw + if raw: + return _raw + if not isinstance(_raw, unicode) and self.encoding: + if callable(self.encoding): + _raw = self.encoding(_raw) else: - _raw = url_or_raw - if raw: - return _raw + _raw = _raw.decode(self.encoding, 'replace') - if not isinstance(_raw, unicode) and self.encoding: - _raw = _raw.decode(docEncoding, 'replace') - massage = list(BeautifulSoup.MARKUP_MASSAGE) - massage.append((re.compile(r'&(\S+?);'), lambda match: entity_to_unicode(match, encoding=self.encoding))) - return BeautifulSoup(_raw, markupMassage=massage) + nmassage = copy.copy(BeautifulSoup.MARKUP_MASSAGE) + nmassage.extend(self.preprocess_regexps) + nmassage += [(re.compile(r'', re.DOTALL), lambda m: '')] + # Some websites have buggy doctype declarations that mess up beautifulsoup + # Remove comments as they can leave detritus when extracting tags leaves + # multiple nested comments + nmassage.append((re.compile(r'', re.DOTALL), lambda m: '')) + usrc = xml_to_unicode(_raw, self.verbose, strip_encoding_pats=True)[0] + usrc = self.preprocess_raw_html(usrc, url_or_raw) + return BeautifulSoup(usrc, markupMassage=nmassage) - # Entry point - soup = get_the_soup( self.encoding, url_or_raw ) - contentType = soup.find(True,attrs={'http-equiv':'Content-Type'}) - docEncoding = str(contentType)[str(contentType).find('charset=') + len('charset='):str(contentType).rfind('"')] - if docEncoding == '' : - docEncoding = self.encoding - - if self.verbose > 2: - self.log( " document encoding: '%s'" % docEncoding) - if docEncoding != self.encoding : - soup = get_the_soup(docEncoding, url_or_raw) - - return soup def massageNCXText(self, description): # Kindle TOC descriptions won't render certain characters if description: massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)) # Replace '&' with '&' - massaged = re.sub("&","&", massaged) + massaged = re.sub("&","&", massaged) + massaged = re.sub("&","&", massaged) return self.fixChars(massaged) else: return description @@ -422,6 +441,16 @@ class NYTimes(BasicNewsRecipe): if self.filterDuplicates: if url in self.url_list: return + if self.webEdition: + date_tag = self.decode_url_date(url) + if date_tag is not None: + if self.oldest_web_article is not None: + if date_tag < self.earliest_date: + self.log("Skipping article %s" % url) + return + else: + self.log("Skipping article %s" % url) + return self.url_list.append(url) title = self.tag_to_string(a, use_alt=True).strip() description = '' @@ -446,6 +475,31 @@ class NYTimes(BasicNewsRecipe): description=description, author=author, content='')) + def get_tech_feeds(self,ans): + if self.getTechBlogs: + tech_articles = {} + key_list = [] + save_oldest_article = self.oldest_article + save_max_articles_per_feed = self.max_articles_per_feed + self.oldest_article = self.tech_oldest_article + self.max_articles_per_feed = self.tech_max_articles_per_feed + self.feeds = self.tech_feeds + tech = self.parse_feeds() + self.oldest_article = save_oldest_article + self.max_articles_per_feed = save_max_articles_per_feed + self.feeds = None + for f in tech: + key_list.append(f.title) + tech_articles[f.title] = [] + for a in f.articles: + tech_articles[f.title].append( + dict(title=a.title, url=a.url, date=a.date, + description=a.summary, author=a.author, + content=a.content)) + tech_ans = [(k, tech_articles[k]) for k in key_list if tech_articles.has_key(k)] + for x in tech_ans: + ans.append(x) + return ans def parse_web_edition(self): @@ -457,31 +511,41 @@ class NYTimes(BasicNewsRecipe): if sec_title in self.excludeSections: print "SECTION EXCLUDED: ",sec_title continue + try: + soup = self.index_to_soup('http://www.nytimes.com/pages/'+index_url+'/index.html') + except: + continue print 'Index URL: '+'http://www.nytimes.com/pages/'+index_url+'/index.html' - soup = self.index_to_soup('http://www.nytimes.com/pages/'+index_url+'/index.html') + self.key = sec_title # Find each article for div in soup.findAll(True, - attrs={'class':['section-headline', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): - if div['class'] in ['story', 'story headline'] : + attrs={'class':['section-headline', 'ledeStory', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): + if div['class'] in ['story', 'story headline', 'storyHeader'] : self.handle_article(div) + elif div['class'] == 'ledeStory': + divsub = div.find('div','storyHeader') + if divsub is not None: + self.handle_article(divsub) + ulrefer = div.find('ul','refer') + if ulrefer is not None: + for lidiv in ulrefer.findAll('li'): + self.handle_article(lidiv) elif div['class'] == 'headlinesOnly multiline flush': for lidiv in div.findAll('li'): self.handle_article(lidiv) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_todays_index(self): soup = self.index_to_soup('http://www.nytimes.com/pages/todayspaper/index.html') - skipping = False # Find each article for div in soup.findAll(True, attrs={'class':['section-headline', 'story', 'story headline','sectionHeader','headlinesOnly multiline flush']}): - if div['class'] in ['section-headline','sectionHeader']: self.key = string.capwords(self.feed_title(div)) self.key = self.key.replace('Op-ed','Op-Ed') @@ -505,7 +569,7 @@ class NYTimes(BasicNewsRecipe): self.handle_article(lidiv) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_headline_index(self): @@ -553,7 +617,7 @@ class NYTimes(BasicNewsRecipe): for h3_item in search_div.findAll('h3'): byline = h3_item.h6 if byline is not None: - author = self.tag_to_string(byline,usa_alt=False) + author = self.tag_to_string(byline,use_alt=False) else: author = '' a = h3_item.find('a', href=True) @@ -579,7 +643,7 @@ class NYTimes(BasicNewsRecipe): self.articles[section_name].append(dict(title=title, url=url, date=pubdate, description=description, author=author, content='')) self.ans = [(k, self.articles[k]) for k in self.ans if self.articles.has_key(k)] - return self.filter_ans(self.ans) + return self.filter_ans(self.get_tech_feeds(self.ans)) def parse_index(self): if self.headlinesOnly: @@ -589,155 +653,309 @@ class NYTimes(BasicNewsRecipe): else: return self.parse_todays_index() - def strip_anchors(self,soup): + def strip_anchors(self,soup,kill_all=False): paras = soup.findAll(True) for para in paras: aTags = para.findAll('a') for a in aTags: if a.img is None: - a.replaceWith(a.renderContents().decode('cp1252','replace')) + if kill_all or (self.recursions==0): + a.replaceWith(self.tag_to_string(a,False)) + else: + if a.has_key('href'): + if a['href'].startswith('http://www.nytimes'): + if not a['href'].endswith('pagewanted=all'): + url = re.sub(r'\?.*', '', a['href']) + if self.exclude_url(url): + a.replaceWith(self.tag_to_string(a,False)) + else: + a['href'] = url+'?pagewanted=all' + elif not (a['href'].startswith('http://pogue') or \ + a['href'].startswith('http://bits') or \ + a['href'].startswith('http://travel') or \ + a['href'].startswith('http://business') or \ + a['href'].startswith('http://tech') or \ + a['href'].startswith('http://health') or \ + a['href'].startswith('http://dealbook') or \ + a['href'].startswith('http://open')): + a.replaceWith(self.tag_to_string(a,False)) + return soup + + def handle_tags(self,soup): + try: + print("HANDLE TAGS: TITLE = "+self.tag_to_string(soup.title)) + except: + print("HANDLE TAGS: NO TITLE") + if soup is None: + print("ERROR: handle_tags received NoneType") + return None + +## print("HANDLING AD FORWARD:") +## print(soup) + if self.keep_only_tags: + body = Tag(soup, 'body') + try: + if isinstance(self.keep_only_tags, dict): + self.keep_only_tags = [self.keep_only_tags] + for spec in self.keep_only_tags: + for tag in soup.find('body').findAll(**spec): + body.insert(len(body.contents), tag) + soup.find('body').replaceWith(body) + except AttributeError: # soup has no body element + pass + + def remove_beyond(tag, next): + while tag is not None and getattr(tag, 'name', None) != 'body': + after = getattr(tag, next) + while after is not None: + ns = getattr(tag, next) + after.extract() + after = ns + tag = tag.parent + + if self.remove_tags_after is not None: + rt = [self.remove_tags_after] if isinstance(self.remove_tags_after, dict) else self.remove_tags_after + for spec in rt: + tag = soup.find(**spec) + remove_beyond(tag, 'nextSibling') + + if self.remove_tags_before is not None: + tag = soup.find(**self.remove_tags_before) + remove_beyond(tag, 'previousSibling') + + for kwds in self.remove_tags: + for tag in soup.findAll(**kwds): + tag.extract() + return soup def preprocess_html(self, soup): - if self.webEdition & (self.oldest_article>0): - date_tag = soup.find(True,attrs={'class': ['dateline','date']}) - if date_tag: - date_str = self.tag_to_string(date_tag,use_alt=False) - date_str = date_str.replace('Published:','') - date_items = date_str.split(',') + #print("PREPROCESS TITLE="+self.tag_to_string(soup.title)) + skip_tag = soup.find(True, {'name':'skip'}) + if skip_tag is not None: + #url = 'http://www.nytimes.com' + re.sub(r'\?.*', '', skip_tag.parent['href']) + url = 'http://www.nytimes.com' + skip_tag.parent['href'] + #url += '?pagewanted=all' + self.log.warn("Skipping ad to article at '%s'" % url) + sleep(5) + soup = self.handle_tags(self.article_to_soup(url)) + + # check if the article is from one of the tech blogs + blog=soup.find('div',attrs={'id':['pogue','bits','gadgetwise','open']}) + + if blog is not None: + old_body = soup.find('body') + new_body=Tag(soup,'body') + new_body.append(soup.find('div',attrs={'id':'content'})) + new_body.find('div',attrs={'id':'content'})['id']='blogcontent' # identify for postprocess_html + old_body.replaceWith(new_body) + for divr in soup.findAll('div',attrs={'class':re.compile('w190 right')}): + if divr.find(text=re.compile('Sign up')): + divr.extract() + divr = soup.find('div',attrs={'id':re.compile('related-content')}) + if divr is not None: + # handle related articles + rlist = [] + ul = divr.find('ul') + if ul is not None: + for li in ul.findAll('li'): + atag = li.find('a') + if atag is not None: + if atag['href'].startswith('http://pogue') or atag['href'].startswith('http://bits') or \ + atag['href'].startswith('http://open'): + atag.find(text=True).replaceWith(self.massageNCXText(self.tag_to_string(atag,False))) + rlist.append(atag) + divr.extract() + if rlist != []: + asidediv = Tag(soup,'div',[('class','aside')]) + if soup.find('hr') is None: + asidediv.append(Tag(soup,'hr')) + h4 = Tag(soup,'h4',[('class','asidenote')]) + h4.insert(0,"Related Posts") + asidediv.append(h4) + ul = Tag(soup,'ul') + for r in rlist: + li = Tag(soup,'li',[('class','aside')]) + r['class'] = 'aside' + li.append(r) + ul.append(li) + asidediv.append(ul) + asidediv.append(Tag(soup,'hr')) + smain = soup.find('body') + smain.append(asidediv) + for atag in soup.findAll('a'): + img = atag.find('img') + if img is not None: + atag.replaceWith(img) + elif not atag.has_key('href'): + atag.replaceWith(atag.renderContents().decode('cp1252','replace')) + elif not (atag['href'].startswith('http://www.nytimes') or atag['href'].startswith('http://pogue') or \ + atag['href'].startswith('http://bits') or atag['href'].startswith('http://open')): + atag.replaceWith(atag.renderContents().decode('cp1252','replace')) + hdr = soup.find('address') + if hdr is not None: + hdr.name='span' + for span_credit in soup.findAll('span','credit'): + sp = Tag(soup,'span') + span_credit.replaceWith(sp) + sp.append(Tag(soup,'br')) + sp.append(span_credit) + sp.append(Tag(soup,'br')) + + else: # nytimes article + + related = [] # these will be the related articles + first_outer = None # first related outer tag + first_related = None # first related tag + for outerdiv in soup.findAll(attrs={'class': re.compile('articleInline runaroundLeft')}): + for rdiv in soup.findAll('div','columnGroup doubleRule'): + if rdiv.find('h3') is not None: + if self.tag_to_string(rdiv.h3,False).startswith('Related'): + rdiv.h3.find(text=True).replaceWith("Related articles") + rdiv.h3['class'] = 'asidenote' + for litag in rdiv.findAll('li'): + if litag.find('a') is not None: + if litag.find('a')['href'].startswith('http://www.nytimes.com'): + url = re.sub(r'\?.*', '', litag.find('a')['href']) + litag.find('a')['href'] = url+'?pagewanted=all' + litag.extract() + related.append(litag) + if first_related is None: + first_related = rdiv + first_outer = outerdiv + else: + litag.extract() + if related != []: + for r in related: + if r.h6: # don't want the anchor inside a h6 tag + r.h6.replaceWith(r.h6.a) + first_related.ul.append(r) + first_related.insert(0,Tag(soup,'hr')) + first_related.append(Tag(soup,'hr')) + first_related['class'] = 'aside' + first_outer.replaceWith(first_related) # replace the outer tag with the related tag + + for rdiv in soup.findAll(attrs={'class': re.compile('articleInline runaroundLeft')}): + rdiv.extract() + + kicker_tag = soup.find(attrs={'class':'kicker'}) + if kicker_tag: # remove Op_Ed author head shots + tagline = self.tag_to_string(kicker_tag) + if tagline=='Op-Ed Columnist': + img_div = soup.find('div','inlineImage module') + if img_div: + img_div.extract() + + if self.useHighResImages: try: - datestring = date_items[0]+' '+date_items[1] - article_date = self.decode_us_date(datestring) - except: - article_date = date.today() - if article_date < self.earliest_date: - self.log("Skipping article dated %s" % date_str) - return None + #open up all the "Enlarge this Image" pop-ups and download the full resolution jpegs + enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) + if enlargeThisList: + for popupref in enlargeThisList: + popupreflink = popupref.find('a') + if popupreflink: + reflinkstring = str(popupreflink['href']) + refstart = reflinkstring.find("javascript:pop_me_up2('") + len("javascript:pop_me_up2('") + refend = reflinkstring.find(".html", refstart) + len(".html") + reflinkstring = reflinkstring[refstart:refend] - #all articles are from today, no need to print the date on every page - try: - if not self.webEdition: - date_tag = soup.find(True,attrs={'class': ['dateline','date']}) - if date_tag: - date_tag.extract() - except: - self.log("Error removing the published date") - - if self.useHighResImages: - try: - #open up all the "Enlarge this Image" pop-ups and download the full resolution jpegs - enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) - if enlargeThisList: - for popupref in enlargeThisList: - popupreflink = popupref.find('a') - if popupreflink: - reflinkstring = str(popupreflink['href']) - refstart = reflinkstring.find("javascript:pop_me_up2('") + len("javascript:pop_me_up2('") - refend = reflinkstring.find(".html", refstart) + len(".html") - reflinkstring = reflinkstring[refstart:refend] - - popuppage = self.browser.open(reflinkstring) - popuphtml = popuppage.read() - popuppage.close() - if popuphtml: - st = time.localtime() - year = str(st.tm_year) - month = "%.2d" % st.tm_mon - day = "%.2d" % st.tm_mday - imgstartpos = popuphtml.find('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') + len('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') - highResImageLink = 'http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/' + popuphtml[imgstartpos:popuphtml.find('.jpg',imgstartpos)+4] - popupSoup = BeautifulSoup(popuphtml) - highResTag = popupSoup.find('img', {'src':highResImageLink}) - if highResTag: - try: - newWidth = highResTag['width'] - newHeight = highResTag['height'] - imageTag = popupref.parent.find("img") - except: - self.log("Error: finding width and height of img") - popupref.extract() - if imageTag: + popuppage = self.browser.open(reflinkstring) + popuphtml = popuppage.read() + popuppage.close() + if popuphtml: + st = time.localtime() + year = str(st.tm_year) + month = "%.2d" % st.tm_mon + day = "%.2d" % st.tm_mday + imgstartpos = popuphtml.find('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') + len('http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/') + highResImageLink = 'http://graphics8.nytimes.com/images/' + year + '/' + month +'/' + day +'/' + popuphtml[imgstartpos:popuphtml.find('.jpg',imgstartpos)+4] + popupSoup = BeautifulSoup(popuphtml) + highResTag = popupSoup.find('img', {'src':highResImageLink}) + if highResTag: try: - imageTag['src'] = highResImageLink - imageTag['width'] = newWidth - imageTag['height'] = newHeight + newWidth = highResTag['width'] + newHeight = highResTag['height'] + imageTag = popupref.parent.find("img") except: - self.log("Error setting the src width and height parameters") - except Exception: - self.log("Error pulling high resolution images") + self.log("Error: finding width and height of img") + popupref.extract() + if imageTag: + try: + imageTag['src'] = highResImageLink + imageTag['width'] = newWidth + imageTag['height'] = newHeight + except: + self.log("Error setting the src width and height parameters") + except Exception: + self.log("Error pulling high resolution images") + + try: + #in case pulling images failed, delete the enlarge this text + enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) + if enlargeThisList: + for popupref in enlargeThisList: + popupref.extract() + except: + self.log("Error removing Enlarge this text") + + + return self.strip_anchors(soup,False) + + def postprocess_html(self,soup,first_fetch): + if not first_fetch: # remove Related links + for aside in soup.findAll('div','aside'): + aside.extract() + soup = self.strip_anchors(soup,True) + + if soup.find('div',attrs={'id':'blogcontent'}) is None: + if first_fetch: + aside = soup.find('div','aside') + if aside is not None: # move the related list to the end of the article + art = soup.find('div',attrs={'id':'article'}) + if art is None: + art = soup.find('div',attrs={'class':'article'}) + if art is not None: + art.append(aside) + try: + if self.one_picture_per_article: + # Remove all images after first + largeImg = soup.find(True, {'class':'articleSpanImage'}) + inlineImgs = soup.findAll(True, {'class':'inlineImage module'}) + if largeImg: + for inlineImg in inlineImgs: + inlineImg.extract() + else: + if inlineImgs: + firstImg = inlineImgs[0] + for inlineImg in inlineImgs[1:]: + inlineImg.extract() + # Move firstImg before article body + cgFirst = soup.find(True, {'class':re.compile('columnGroup *first')}) + if cgFirst: + # Strip all sibling NavigableStrings: noise + navstrings = cgFirst.findAll(text=True, recursive=False) + [ns.extract() for ns in navstrings] + headline_found = False + tag = cgFirst.find(True) + insertLoc = 0 + while True: + insertLoc += 1 + if hasattr(tag,'class') and tag['class'] == 'articleHeadline': + headline_found = True + break + tag = tag.nextSibling + if not tag: + headline_found = False + break + if headline_found: + cgFirst.insert(insertLoc,firstImg) + else: + self.log(">>> No class:'columnGroup first' found <<<") + except: + self.log("ERROR: One picture per article in postprocess_html") try: - #remove "Related content" bar - runAroundsFound = soup.findAll('div',{'class':['articleInline runaroundLeft','articleInline doubleRule runaroundLeft','articleInline runaroundLeft firstArticleInline','articleInline runaroundLeft ','articleInline runaroundLeft lastArticleInline']}) - if runAroundsFound: - for runAround in runAroundsFound: - #find all section headers - hlines = runAround.findAll(True ,{'class':['sectionHeader','sectionHeader flushBottom']}) - if hlines: - for hline in hlines: - hline.extract() - - #find all section headers - hlines = runAround.findAll('h6') - if hlines: - for hline in hlines: - hline.extract() - except: - self.log("Error removing related content bar") - - - try: - #in case pulling images failed, delete the enlarge this text - enlargeThisList = soup.findAll('div',{'class':'icon enlargeThis'}) - if enlargeThisList: - for popupref in enlargeThisList: - popupref.extract() - except: - self.log("Error removing Enlarge this text") - - return self.strip_anchors(soup) - - def postprocess_html(self,soup, True): - try: - if self.one_picture_per_article: - # Remove all images after first - largeImg = soup.find(True, {'class':'articleSpanImage'}) - inlineImgs = soup.findAll(True, {'class':'inlineImage module'}) - if largeImg: - for inlineImg in inlineImgs: - inlineImg.extract() - else: - if inlineImgs: - firstImg = inlineImgs[0] - for inlineImg in inlineImgs[1:]: - inlineImg.extract() - # Move firstImg before article body - cgFirst = soup.find(True, {'class':re.compile('columnGroup *first')}) - if cgFirst: - # Strip all sibling NavigableStrings: noise - navstrings = cgFirst.findAll(text=True, recursive=False) - [ns.extract() for ns in navstrings] - headline_found = False - tag = cgFirst.find(True) - insertLoc = 0 - while True: - insertLoc += 1 - if hasattr(tag,'class') and tag['class'] == 'articleHeadline': - headline_found = True - break - tag = tag.nextSibling - if not tag: - headline_found = False - break - if headline_found: - cgFirst.insert(insertLoc,firstImg) - else: - self.log(">>> No class:'columnGroup first' found <<<") - except: - self.log("ERROR: One picture per article in postprocess_html") - - try: # Change captions to italic for caption in soup.findAll(True, {'class':'caption'}) : if caption and len(caption) > 0: @@ -748,10 +966,10 @@ class NYTimes(BasicNewsRecipe): c = c[:mp_off] cTag.insert(0, c) caption.replaceWith(cTag) - except: + except: self.log("ERROR: Problem in change captions to italic") - try: + try: # Change to

h1 = soup.find('h1') blogheadline = str(h1) #added for dealbook @@ -774,38 +992,38 @@ class NYTimes(BasicNewsRecipe): if headline: tag = Tag(soup, "h2") tag['class'] = "headline" - tag.insert(0, self.fixChars(headline.renderContents())) + tag.insert(0, self.fixChars(self.tag_to_string(headline,False))) soup.insert(0, tag) hrs = soup.findAll('hr') for hr in hrs: hr.extract() - except: + except: self.log("ERROR: Problem in Change to

") - try: + try: #if this is from a blog (dealbook, fix the byline format bylineauthor = soup.find('address',attrs={'class':'byline author vcard'}) if bylineauthor: tag = Tag(soup, "h6") tag['class'] = "byline" - tag.insert(0, self.fixChars(bylineauthor.renderContents())) + tag.insert(0, self.fixChars(self.tag_to_string(bylineauthor,False))) bylineauthor.replaceWith(tag) - except: - self.log("ERROR: fixing byline author format") + except: + self.log("ERROR: fixing byline author format") - try: + try: #if this is a blog (dealbook) fix the credit style for the pictures blogcredit = soup.find('div',attrs={'class':'credit'}) if blogcredit: tag = Tag(soup, "h6") tag['class'] = "credit" - tag.insert(0, self.fixChars(blogcredit.renderContents())) + tag.insert(0, self.fixChars(self.tag_to_string(blogcredit,False))) blogcredit.replaceWith(tag) - except: - self.log("ERROR: fixing credit format") + except: + self.log("ERROR: fixing credit format") - try: + try: # Change

to

- used in editorial blogs masthead = soup.find("h1") if masthead: @@ -815,34 +1033,34 @@ class NYTimes(BasicNewsRecipe): tag = Tag(soup, "h3") tag.insert(0, self.fixChars(masthead.contents[0])) masthead.replaceWith(tag) - except: + except: self.log("ERROR: Problem in Change

to

- used in editorial blogs") - try: + try: # Change to for subhead in soup.findAll(True, {'class':'bold'}) : if subhead.contents: bTag = Tag(soup, "b") bTag.insert(0, subhead.contents[0]) subhead.replaceWith(bTag) - except: + except: self.log("ERROR: Problem in Change

to

- used in editorial blogs") - try: + try: #remove the update tag blogupdated = soup.find('span', {'class':'update'}) if blogupdated: blogupdated.replaceWith("") - except: + except: self.log("ERROR: Removing strong tag") - try: + try: divTag = soup.find('div',attrs={'id':'articleBody'}) if divTag: divTag['class'] = divTag['id'] - except: + except: self.log("ERROR: Problem in soup.find(div,attrs={id:articleBody})") - try: + try: # Add class="authorId" to
so we can format with CSS divTag = soup.find('div',attrs={'id':'authorId'}) if divTag and divTag.contents[0]: @@ -851,27 +1069,26 @@ class NYTimes(BasicNewsRecipe): tag.insert(0, self.fixChars(self.tag_to_string(divTag.contents[0], use_alt=False))) divTag.replaceWith(tag) - except: + except: self.log("ERROR: Problem in Add class=authorId to
so we can format with CSS") return soup - def populate_article_metadata(self, article, soup, first): - if first and hasattr(self, 'add_toc_thumbnail'): - idxdiv = soup.find('div',attrs={'class':'articleSpanImage'}) - if idxdiv is not None: - if idxdiv.img: - self.add_toc_thumbnail(article, idxdiv.img['src']) - else: - img = soup.find('img') - if img is not None: - self.add_toc_thumbnail(article, img['src']) + def populate_article_metadata(self, article, soup, first): + if not first: + return + idxdiv = soup.find('div',attrs={'class':'articleSpanImage'}) + if idxdiv is not None: + if idxdiv.img: + self.add_toc_thumbnail(article, re.sub(r'links\\link\d+\\','',idxdiv.img['src'])) + else: + img = soup.find('body').find('img') + if img is not None: + self.add_toc_thumbnail(article, re.sub(r'links\\link\d+\\','',img['src'])) shortparagraph = "" try: if len(article.text_summary.strip()) == 0: articlebodies = soup.findAll('div',attrs={'class':'articleBody'}) - if not articlebodies: #added to account for blog formats - articlebodies = soup.findAll('div', attrs={'class':'entry-content'}) #added to account for blog formats if articlebodies: for articlebody in articlebodies: if articlebody: @@ -880,15 +1097,23 @@ class NYTimes(BasicNewsRecipe): refparagraph = self.massageNCXText(self.tag_to_string(p,use_alt=False)).strip() #account for blank paragraphs and short paragraphs by appending them to longer ones if len(refparagraph) > 0: - if len(refparagraph) > 140: #approximately two lines of text - article.summary = article.text_summary = shortparagraph + refparagraph + if len(refparagraph) > 70: #approximately one line of text + newpara = shortparagraph + refparagraph + newparaDateline,newparaEm,newparaDesc = newpara.partition('—') + if newparaEm == '': + newparaDateline,newparaEm,newparaDesc = newpara.partition('—') + if newparaEm == '': + newparaDesc = newparaDateline + article.summary = article.text_summary = newparaDesc.strip() return else: shortparagraph = refparagraph + " " if shortparagraph.strip().find(" ") == -1 and not shortparagraph.strip().endswith(":"): shortparagraph = shortparagraph + "- " - + else: + article.summary = article.text_summary = self.massageNCXText(article.text_summary) except: self.log("Error creating article descriptions") return + diff --git a/recipes/pajama.recipe b/recipes/pajama.recipe index 8c5ba74317..9b474b6e65 100644 --- a/recipes/pajama.recipe +++ b/recipes/pajama.recipe @@ -1,27 +1,27 @@ from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import BeautifulSoup class PajamasMedia(BasicNewsRecipe): title = u'Pajamas Media' description = u'Provides exclusive news and opinion for forty countries.' language = 'en' __author__ = 'Krittika Goyal' - oldest_article = 1 #days + oldest_article = 2 #days max_articles_per_feed = 25 recursions = 1 match_regexps = [r'http://pajamasmedia.com/blog/.*/2/$'] #encoding = 'latin1' remove_stylesheets = True - #remove_tags_before = dict(name='h1', attrs={'class':'heading'}) - remove_tags_after = dict(name='div', attrs={'class':'paged-nav'}) - remove_tags = [ - dict(name='iframe'), - dict(name='div', attrs={'class':['pages']}), - #dict(name='div', attrs={'id':['bookmark']}), - #dict(name='span', attrs={'class':['related_link', 'slideshowcontrols']}), - #dict(name='ul', attrs={'class':'articleTools'}), - ] + auto_cleanup = True + ##remove_tags_before = dict(name='h1', attrs={'class':'heading'}) + #remove_tags_after = dict(name='div', attrs={'class':'paged-nav'}) + #remove_tags = [ + #dict(name='iframe'), + #dict(name='div', attrs={'class':['pages']}), + ##dict(name='div', attrs={'id':['bookmark']}), + ##dict(name='span', attrs={'class':['related_link', 'slideshowcontrols']}), + ##dict(name='ul', attrs={'class':'articleTools'}), + #] feeds = [ ('pajamas Media', @@ -29,20 +29,20 @@ class PajamasMedia(BasicNewsRecipe): ] - def preprocess_html(self, soup): - story = soup.find(name='div', attrs={'id':'innerpage-content'}) - #td = heading.findParent(name='td') - #td.extract() + #def preprocess_html(self, soup): + #story = soup.find(name='div', attrs={'id':'innerpage-content'}) + ##td = heading.findParent(name='td') + ##td.extract() - soup = BeautifulSoup('t') - body = soup.find(name='body') - body.insert(0, story) - return soup + #soup = BeautifulSoup('t') + #body = soup.find(name='body') + #body.insert(0, story) + #return soup - def postprocess_html(self, soup, first): - if not first: - h = soup.find(attrs={'class':'innerpage-header'}) - if h: h.extract() - auth = soup.find(attrs={'class':'author'}) - if auth: auth.extract() - return soup + #def postprocess_html(self, soup, first): + #if not first: + #h = soup.find(attrs={'class':'innerpage-header'}) + #if h: h.extract() + #auth = soup.find(attrs={'class':'author'}) + #if auth: auth.extract() + #return soup diff --git a/recipes/poradnia_pwn.recipe b/recipes/poradnia_pwn.recipe new file mode 100644 index 0000000000..b3e2825618 --- /dev/null +++ b/recipes/poradnia_pwn.recipe @@ -0,0 +1,63 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe +class PoradniaPWN(BasicNewsRecipe): + title = u'Poradnia Językowa PWN' + __author__ = 'fenuks' + description = u'Internetowa poradnia językowa Wydawnictwa Naukowego PWN. Poradnię prowadzi Redaktor Naczelny Słowników Języka Polskiego, prof. Mirosław Bańko. Pomagają mu eksperci - znani polscy językoznawcy. Współpracuje z nami m.in. prof. Jerzy Bralczyk oraz dr Jan Grzenia.' + category = 'language' + language = 'pl' + #cover_url = '' + oldest_article = 14 + max_articles_per_feed = 100000 + INDEX = "http://poradnia.pwn.pl/" + no_stylesheets = True + remove_attributes = ['style'] + remove_javascript = True + use_embedded_content = False + #preprocess_regexps = [(re.compile('', re.IGNORECASE), lambda m: '
'), (re.compile('', re.IGNORECASE), lambda m: '
')] + keep_only_tags = [dict(name="div", attrs={"class":"searchhi"})] + feeds = [(u'Poradnia', u'http://rss.pwn.pl/poradnia.rss')] + + '''def find_articles(self, url): + articles = [] + soup=self.index_to_soup(url) + counter = int(soup.find(name='p', attrs={'class':'count'}).findAll('b')[-1].string) + counter = 500 + pos = 0 + next = url + while next: + soup=self.index_to_soup(next) + tag=soup.find(id="listapytan") + art=tag.findAll(name='li') + for i in art: + if i.h4: + title=i.h4.a.string + url=self.INDEX+i.h4.a['href'] + #date=soup.find(id='footer').ul.li.string[41:-1] + articles.append({'title' : title, + 'url' : url, + 'date' : '', + 'description' : '' + }) + pos += 10 + if not pos >=counter: + next = 'http://poradnia.pwn.pl/lista.php?kat=18&od=' + str(pos) + print u'Tworzenie listy artykułów dla', next + else: + next = None + print articles + return articles + + def parse_index(self): + feeds = [] + feeds.append((u"Poradnia", self.find_articles('http://poradnia.pwn.pl/lista.php'))) + + return feeds''' + + def preprocess_html(self, soup): + for i in soup.findAll(name=['ul', 'li']): + i.name="div" + for z in soup.findAll(name='a'): + if not z['href'].startswith('http'): + z['href'] = 'http://poradnia.pwn.pl/' + z['href'] + return soup diff --git a/recipes/sivil_dusunce.recipe b/recipes/sivil_dusunce.recipe index 66bb895f0f..3ae665771a 100644 --- a/recipes/sivil_dusunce.recipe +++ b/recipes/sivil_dusunce.recipe @@ -1,12 +1,13 @@ -from calibre.web.feeds.news import BasicNewsRecipe +# -*- coding: utf-8 -*- -class BasicUserRecipe1324913680(BasicNewsRecipe): +from calibre.web.feeds.news import BasicNewsRecipe +class AdvancedUserRecipe1355341662(BasicNewsRecipe): title = u'Sivil Dusunce' language = 'tr' __author__ = 'asalet_r' oldest_article = 7 - max_articles_per_feed = 20 + max_articles_per_feed = 50 auto_cleanup = True - feeds = [(u'Sivil Dusunce', u'http://www.sivildusunce.com/feed/')] + feeds = [(u'Sivil Dusunce', u'http://www.sivildusunce.com/?t=rss&xml=1')] diff --git a/recipes/sueddeutsche.recipe b/recipes/sueddeutsche.recipe index 624321e730..33750b024c 100644 --- a/recipes/sueddeutsche.recipe +++ b/recipes/sueddeutsche.recipe @@ -8,19 +8,19 @@ Fetch sueddeutsche.de from calibre.web.feeds.news import BasicNewsRecipe class Sueddeutsche(BasicNewsRecipe): - title = u'Süddeutsche.de' # 2012-01-26 AGe Correct Title - description = 'News from Germany, Access to online content' # 2012-01-26 AGe - __author__ = 'Oliver Niesner and Armin Geller' #Update AGe 2012-01-26 - publisher = u'Süddeutsche Zeitung' # 2012-01-26 AGe add - category = 'news, politics, Germany' # 2012-01-26 AGe add - timefmt = ' [%a, %d %b %Y]' # 2012-01-26 AGe add %a + title = u'Süddeutsche.de' + description = 'News from Germany, Access to online content' + __author__ = 'Oliver Niesner and Armin Geller' #Update AGe 2012-12-05 + publisher = u'Süddeutsche Zeitung' + category = 'news, politics, Germany' + timefmt = ' [%a, %d %b %Y]' oldest_article = 7 max_articles_per_feed = 100 language = 'de' encoding = 'utf-8' - publication_type = 'newspaper' # 2012-01-26 add + publication_type = 'newspaper' cover_source = 'http://www.sueddeutsche.de/verlag' # 2012-01-26 AGe add from Darko Miletic paid content source - masthead_url = 'http://www.sueddeutsche.de/static_assets/build/img/sdesiteheader/logo_homepage.441d531c.png' # 2012-01-26 AGe add + masthead_url = 'http://www.sueddeutsche.de/static_assets/img/sdesiteheader/logo_standard.a152b0df.png' # 2012-12-05 AGe add use_embedded_content = False no_stylesheets = True @@ -40,9 +40,9 @@ class Sueddeutsche(BasicNewsRecipe): (u'Sport', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5ESport%24?output=rss'), (u'Leben', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5ELeben%24?output=rss'), (u'Karriere', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EKarriere%24?output=rss'), - (u'Bildung', u'http://rss.sueddeutsche.de/rss/bildung'), #2012-01-26 AGe New - (u'Gesundheit', u'http://rss.sueddeutsche.de/rss/gesundheit'), #2012-01-26 AGe New - (u'Stil', u'http://rss.sueddeutsche.de/rss/stil'), #2012-01-26 AGe New + (u'Bildung', u'http://rss.sueddeutsche.de/rss/bildung'), + (u'Gesundheit', u'http://rss.sueddeutsche.de/rss/gesundheit'), + (u'Stil', u'http://rss.sueddeutsche.de/rss/stil'), (u'München & Region', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EMünchen&Region%24?output=rss'), (u'Bayern', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EBayern%24?output=rss'), (u'Medien', u'http://suche.sueddeutsche.de/query/%23/sort/-docdatetime/drilldown/%C2%A7ressort%3A%5EMedien%24?output=rss'), diff --git a/recipes/titanic_de.recipe b/recipes/titanic_de.recipe new file mode 100644 index 0000000000..edc9580602 --- /dev/null +++ b/recipes/titanic_de.recipe @@ -0,0 +1,20 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class Titanic(BasicNewsRecipe): + title = u'Titanic' + language = 'de' + __author__ = 'Krittika Goyal' + oldest_article = 14 #days + max_articles_per_feed = 25 + #encoding = 'cp1252' + use_embedded_content = False + + no_stylesheets = True + auto_cleanup = True + + + feeds = [ +('News', + 'http://www.titanic-magazin.de/ich.war.bei.der.waffen.rss'), +] + diff --git a/recipes/tvp_info.recipe b/recipes/tvp_info.recipe new file mode 100644 index 0000000000..64528d4194 --- /dev/null +++ b/recipes/tvp_info.recipe @@ -0,0 +1,20 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe +class TVPINFO(BasicNewsRecipe): + title = u'TVP.INFO' + __author__ = 'fenuks' + description = u'Serwis informacyjny TVP.INFO' + category = 'news' + language = 'pl' + cover_url = 'http://s.v3.tvp.pl/files/tvp-info/gfx/logo.png' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + remove_empty_feeds = True + remove_javascript = True + use_embedded_content = False + ignore_duplicate_articles = {'title', 'url'} + keep_only_tags = [dict(id='contentNews')] + remove_tags = [dict(attrs={'class':['toolbox', 'modulBox read', 'modulBox social', 'videoPlayerBox']}), dict(id='belka')] + feeds = [(u'Wiadomo\u015bci', u'http://tvp.info/informacje?xslt=tvp-info/news/rss.xslt&src_id=191865'), + (u'\u015awiat', u'http://tvp.info/informacje/swiat?xslt=tvp-info/news/rss.xslt&src_id=191867'), (u'Biznes', u'http://tvp.info/informacje/biznes?xslt=tvp-info/news/rss.xslt&src_id=191868'), (u'Nauka', u'http://tvp.info/informacje/nauka?xslt=tvp-info/news/rss.xslt&src_id=191870'), (u'Kultura', u'http://tvp.info/informacje/kultura?xslt=tvp-info/news/rss.xslt&src_id=191869'), (u'Rozmaito\u015bci', u'http://tvp.info/informacje/rozmaitosci?xslt=tvp-info/news/rss.xslt&src_id=191872'), (u'Opinie', u'http://tvp.info/opinie?xslt=tvp-info/news/rss.xslt&src_id=191875'), (u'Komentarze', u'http://tvp.info/opinie/komentarze?xslt=tvp-info/news/rss.xslt&src_id=238200'), (u'Wywiady', u'http://tvp.info/opinie/wywiady?xslt=tvp-info/news/rss.xslt&src_id=236644')] diff --git a/recipes/ukraiyns_kii_tizhdien.recipe b/recipes/ukraiyns_kii_tizhdien.recipe new file mode 100644 index 0000000000..3064ebfe55 --- /dev/null +++ b/recipes/ukraiyns_kii_tizhdien.recipe @@ -0,0 +1,13 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1356283265(BasicNewsRecipe): + title = u'\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0438\u0439 \u0422\u0438\u0436\u0434\u0435\u043d\u044c' + __author__ = 'rpalyvoda' + oldest_article = 7 + max_articles_per_feed = 100 + language = 'uk' + cover_url = 'http://tyzhden.ua/Images/Style1/tyzhden.ua-logo2.gif' + masthead_url = 'http://tyzhden.ua/Images/Style1/tyzhden.ua-logo2.gif' + auto_cleanup = True + + feeds = [(u'\u041d\u043e\u0432\u0438\u043d\u0438', u'http://tyzhden.ua/RSS/News/'), (u'\u041e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u044c\u043d\u0456 \u043d\u043e\u0432\u0438\u043d\u0438', u'http://tyzhden.ua/RSS/News.Original/'), (u'\u041f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457', u'http://tyzhden.ua/RSS/Publications/')] diff --git a/recipes/weblogs_sl.recipe b/recipes/weblogs_sl.recipe index 8622cccef8..b260d2dde5 100644 --- a/recipes/weblogs_sl.recipe +++ b/recipes/weblogs_sl.recipe @@ -2,8 +2,8 @@ __license__ = 'GPL v3' __copyright__ = '4 February 2011, desUBIKado' __author__ = 'desUBIKado' -__version__ = 'v0.08' -__date__ = '30, June 2012' +__version__ = 'v0.09' +__date__ = '02, December 2012' ''' http://www.weblogssl.com/ ''' @@ -37,6 +37,7 @@ class weblogssl(BasicNewsRecipe): ,(u'Xataka Mexico', u'http://feeds.weblogssl.com/xatakamx') ,(u'Xataka M\xf3vil', u'http://feeds.weblogssl.com/xatakamovil') ,(u'Xataka Android', u'http://feeds.weblogssl.com/xatakandroid') + ,(u'Xataka Windows', u'http://feeds.weblogssl.com/xatakawindows') ,(u'Xataka Foto', u'http://feeds.weblogssl.com/xatakafoto') ,(u'Xataka ON', u'http://feeds.weblogssl.com/xatakaon') ,(u'Xataka Ciencia', u'http://feeds.weblogssl.com/xatakaciencia') @@ -80,19 +81,31 @@ class weblogssl(BasicNewsRecipe): keep_only_tags = [dict(name='div', attrs={'id':'infoblock'}), dict(name='div', attrs={'class':'post'}), - dict(name='div', attrs={'id':'blog-comments'}) + dict(name='div', attrs={'id':'blog-comments'}), + dict(name='div', attrs={'class':'container'}) #m.xataka.com ] - remove_tags = [dict(name='div', attrs={'id':'comment-nav'})] + remove_tags = [dict(name='div', attrs={'id':'comment-nav'}), + dict(name='menu', attrs={'class':'social-sharing'}), #m.xataka.com + dict(name='section' , attrs={'class':'comments'}), #m.xataka.com + dict(name='div' , attrs={'class':'article-comments'}), #m.xataka.com + dict(name='nav' , attrs={'class':'article-taxonomy'}) #m.xataka.com + ] + + remove_tags_after = dict(name='section' , attrs={'class':'comments'}) def print_version(self, url): return url.replace('http://www.', 'http://m.') preprocess_regexps = [ # Para poner una linea en blanco entre un comentario y el siguiente - (re.compile(r'
  • ', re.DOTALL|re.IGNORECASE), lambda m: ''), + (re.compile(r'', re.DOTALL|re.IGNORECASE), lambda m: '') ] + # Para sustituir el video incrustado de YouTube por una imagen def preprocess_html(self, soup): @@ -108,14 +121,16 @@ class weblogssl(BasicNewsRecipe): # Para obtener la url original del articulo a partir de la de "feedsportal" # El siguiente código es gracias al usuario "bosplans" de www.mobileread.com - # http://www.mobileread.com/forums/sho...d.php?t=130297 + # http://www.mobileread.com/forums/showthread.php?t=130297 def get_article_url(self, article): link = article.get('link', None) if link is None: return article + # if link.split('/')[-4]=="xataka2": + # return article.get('feedburner_origlink', article.get('link', article.get('guid'))) if link.split('/')[-4]=="xataka2": - return article.get('feedburner_origlink', article.get('link', article.get('guid'))) + return article.get('guid', None) if link.split('/')[-1]=="story01.htm": link=link.split('/')[-2] a=['0B','0C','0D','0E','0F','0G','0N' ,'0L0S','0A'] diff --git a/recipes/zaman.recipe b/recipes/zaman.recipe index c322febab1..50a17e2112 100644 --- a/recipes/zaman.recipe +++ b/recipes/zaman.recipe @@ -9,15 +9,15 @@ class Zaman (BasicNewsRecipe): __author__ = u'thomass' oldest_article = 2 max_articles_per_feed =50 - # no_stylesheets = True + no_stylesheets = True #delay = 1 - #use_embedded_content = False - encoding = 'ISO 8859-9' - publisher = 'Zaman' + use_embedded_content = False + encoding = 'utf-8' + publisher = 'Feza Gazetecilik' category = 'news, haberler,TR,gazete' language = 'tr' publication_type = 'newspaper ' - extra_css = '.buyukbaslik{font-weight: bold; font-size: 18px;color:#0000FF}'#body{ font-family: Verdana,Helvetica,Arial,sans-serif } .introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} ' + extra_css = 'h1{text-transform: capitalize; font-weight: bold; font-size: 22px;color:#0000FF} p{text-align:justify} ' #.introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} ' conversion_options = { 'tags' : category ,'language' : language @@ -26,25 +26,26 @@ class Zaman (BasicNewsRecipe): } cover_img_url = 'https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/188140_81722291869_2111820_n.jpg' masthead_url = 'http://medya.zaman.com.tr/extentions/zaman.com.tr/img/section/logo-section.png' + ignore_duplicate_articles = { 'title', 'url' } + auto_cleanup = False + remove_empty_feeds= True - #keep_only_tags = [dict(name='div', attrs={'id':[ 'news-detail-content']}), dict(name='td', attrs={'class':['columnist-detail','columnist_head']}) ] - remove_tags = [ dict(name='img', attrs={'src':['http://medya.zaman.com.tr/zamantryeni/pics/zamanonline.gif']})]#,dict(name='div', attrs={'class':['radioEmbedBg','radyoProgramAdi']}),dict(name='a', attrs={'class':['webkit-html-attribute-value webkit-html-external-link']}),dict(name='table', attrs={'id':['yaziYorumTablosu']}),dict(name='img', attrs={'src':['http://medya.zaman.com.tr/pics/paylas.gif','http://medya.zaman.com.tr/extentions/zaman.com.tr/img/columnist/ma-16.png']}) + #keep_only_tags = [dict(name='div', attrs={'id':[ 'contentposition19']})]#,dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'news-detail-content']}), dict(name='td', attrs={'class':['columnist-detail','columnist_head']}), ] + remove_tags = [ dict(name='img', attrs={'src':['http://cmsmedya.zaman.com.tr/images/logo/logo.bmp']}),dict(name='hr', attrs={'class':['interactive-hr']})]# remove_tags = [ dict(name='div', attrs={'class':[ 'detayUyari']}),dict(name='div', attrs={'class':[ 'detayYorum']}),dict(name='div', attrs={'class':[ 'addthis_toolbox addthis_default_style ']}),dict(name='div', attrs={'id':[ 'tumYazi']})]#,dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='div', attrs={'id':[ 'xxx']}),dict(name='img', attrs={'src':['http://medya.zaman.com.tr/zamantryeni/pics/zamanonline.gif']}),dict(name='div', attrs={'class':['radioEmbedBg','radyoProgramAdi']}),dict(name='a', attrs={'class':['webkit-html-attribute-value webkit-html-external-link']}),dict(name='table', attrs={'id':['yaziYorumTablosu']}),dict(name='img', attrs={'src':['http://medya.zaman.com.tr/pics/paylas.gif','http://medya.zaman.com.tr/extentions/zaman.com.tr/img/columnist/ma-16.png']}),dict(name='div', attrs={'id':[ 'news-detail-gallery']}),dict(name='div', attrs={'id':[ 'news-detail-title-bottom-part']}),dict(name='div', attrs={'id':[ 'news-detail-news-paging-main']})]# #remove_attributes = ['width','height'] remove_empty_feeds= True feeds = [ - ( u'Anasayfa', u'http://www.zaman.com.tr/anasayfa.rss'), - ( u'Son Dakika', u'http://www.zaman.com.tr/sondakika.rss'), - #( u'En çok Okunanlar', u'http://www.zaman.com.tr/max_all.rss'), - #( u'Manşet', u'http://www.zaman.com.tr/manset.rss'), - ( u'Gündem', u'http://www.zaman.com.tr/gundem.rss'), + ( u'Manşet', u'http://www.zaman.com.tr/manset.rss'), ( u'Yazarlar', u'http://www.zaman.com.tr/yazarlar.rss'), ( u'Politika', u'http://www.zaman.com.tr/politika.rss'), ( u'Ekonomi', u'http://www.zaman.com.tr/ekonomi.rss'), ( u'Dış Haberler', u'http://www.zaman.com.tr/dishaberler.rss'), + ( u'Son Dakika', u'http://www.zaman.com.tr/sondakika.rss'), + ( u'Gündem', u'http://www.zaman.com.tr/gundem.rss'), ( u'Yorumlar', u'http://www.zaman.com.tr/yorumlar.rss'), ( u'Röportaj', u'http://www.zaman.com.tr/roportaj.rss'), ( u'Dizi Yazı', u'http://www.zaman.com.tr/dizi.rss'), @@ -59,8 +60,9 @@ class Zaman (BasicNewsRecipe): ( u'Cuma Eki', u'http://www.zaman.com.tr/cuma.rss'), ( u'Cumaertesi Eki', u'http://www.zaman.com.tr/cumaertesi.rss'), ( u'Pazar Eki', u'http://www.zaman.com.tr/pazar.rss'), + ( u'En çok Okunanlar', u'http://www.zaman.com.tr/max_all.rss'), + ( u'Anasayfa', u'http://www.zaman.com.tr/anasayfa.rss'), ] def print_version(self, url): - return url.replace('http://www.zaman.com.tr/haber.do?haberno=', 'http://www.zaman.com.tr/yazdir.do?haberno=') - + return url.replace('http://www.zaman.com.tr/newsDetail_getNewsById.action?newsId=', 'http://www.zaman.com.tr/newsDetail_openPrintPage.action?newsId=') diff --git a/recipes/zaufana_trzecia_strona.recipe b/recipes/zaufana_trzecia_strona.recipe new file mode 100644 index 0000000000..13e7d98cce --- /dev/null +++ b/recipes/zaufana_trzecia_strona.recipe @@ -0,0 +1,16 @@ +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from calibre.web.feeds.news import BasicNewsRecipe +class ZTS(BasicNewsRecipe): + title = u'Zaufana Trzecia Strona' + __author__ = 'fenuks' + description = u'Niezależne źródło wiadomości o świecie bezpieczeństwa IT' + category = 'IT, security' + language = 'pl' + cover_url = 'http://www.zaufanatrzeciastrona.pl/wp-content/uploads/2012/08/z3s_h100.png' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + remove_empty_feeds = True + keep_only_tags = [dict(name='div', attrs={'class':'post postcontent'})] + remove_tags = [dict(name='div', attrs={'class':'dolna-ramka'})] + feeds = [(u'Strona g\u0142\xf3wna', u'http://feeds.feedburner.com/ZaufanaTrzeciaStronaGlowna'), (u'Drobiazgi', u'http://feeds.feedburner.com/ZaufanaTrzeciaStronaDrobiazgi')] diff --git a/recipes/zaxid_net.recipe b/recipes/zaxid_net.recipe new file mode 100644 index 0000000000..c1dde37320 --- /dev/null +++ b/recipes/zaxid_net.recipe @@ -0,0 +1,13 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1356281741(BasicNewsRecipe): + title = u'Zaxid.net' + __author__ = 'rpalyvoda' + oldest_article = 7 + max_articles_per_feed = 100 + language = 'uk' + cover_url = 'http://upload.wikimedia.org/wikipedia/uk/b/bc/Zaxid-net.jpg' + masthead_url = 'http://upload.wikimedia.org/wikipedia/uk/b/bc/Zaxid-net.jpg' + auto_cleanup = True + + feeds = [(u'\u0422\u043e\u043f \u043d\u043e\u0432\u0438\u043d\u0438', u'http://feeds.feedburner.com/zaxid/topNews'), (u'\u0421\u0442\u0440\u0456\u0447\u043a\u0430 \u043d\u043e\u0432\u0438\u043d', u'http://feeds.feedburner.com/zaxid/AllNews'), (u'\u041d\u043e\u0432\u0438\u043d\u0438 \u041b\u044c\u0432\u043e\u0432\u0430', u'http://feeds.feedburner.com/zaxid/Lviv'), (u'\u041d\u043e\u0432\u0438\u043d\u0438 \u0423\u043a\u0440\u0430\u0457\u043d\u0438', u'http://feeds.feedburner.com/zaxid/Ukraine'), (u'\u041d\u043e\u0432\u0438\u043d\u0438 \u0441\u0432\u0456\u0442\u0443', u'http://feeds.feedburner.com/zaxid/World'), (u'\u041d\u043e\u0432\u0438\u043d\u0438 - \u0420\u0430\u0434\u0456\u043e 24', u'\u0420\u0430\u0434\u0456\u043e 24'), (u'\u0411\u043b\u043e\u0433\u0438', u'http://feeds.feedburner.com/zaxid/Blogs'), (u"\u041f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 - \u0406\u043d\u0442\u0435\u0440\u0432'\u044e", u'http://feeds.feedburner.com/zaxid/Interview'), (u'\u041f\u0443\u0431\u043b\u0456\u043a\u0430\u0446\u0456\u0457 - \u0421\u0442\u0430\u0442\u0442\u0456', u'http://feeds.feedburner.com/zaxid/Articles'), (u'\u0410\u0444\u0456\u0448\u0430', u'http://zaxid.net/rss/subcategory/140.xml'), (u'\u0413\u0430\u043b\u0438\u0447\u0438\u043d\u0430', u'http://feeds.feedburner.com/zaxid/Galicia'), (u'\u041a\u0443\u043b\u044c\u0442\u0443\u0440\u0430.NET', u'http://feeds.feedburner.com/zaxid/KulturaNET'), (u"\u043d\u0435\u0412\u0456\u0434\u043e\u043c\u0456 \u043b\u044c\u0432\u0456\u0432'\u044f\u043d\u0438", u'http://feeds.feedburner.com/zaxid/UnknownLviv'), (u'\u041b\u0435\u043e\u043f\u043e\u043b\u0456\u0441 MULTIPLEX', u'http://feeds.feedburner.com/zaxid/LeopolisMULTIPLEX'), (u'\u0411\u0438\u0442\u0432\u0430 \u0437\u0430 \u043c\u043e\u0432\u0443', u'http://zaxid.net/rss/subcategory/138.xml'), (u'\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u0430 \u0441\u0445\u0435\u043c\u0430 \u041b\u044c\u0432\u043e\u0432\u0430', u'http://zaxid.net/rss/subcategory/132.xml'), (u'\u0414\u0435\u043c\u0456\u0444\u043e\u043b\u043e\u0433\u0456\u0437\u0430\u0446\u0456\u044f', u'http://zaxid.net/rss/subcategory/130.xml'), (u"\u041c\u0438 \u043f\u0430\u043c'\u044f\u0442\u0430\u0454\u043c\u043e", u'http://feeds.feedburner.com/zaxid/WeRemember'), (u'20 \u0440\u043e\u043a\u0456\u0432 \u041d\u0435\u0437\u0430\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0456', u'http://zaxid.net/rss/subcategory/129.xml'), (u'\u041f\u0440\u0430\u0432\u043e \u043d\u0430 \u0434\u0438\u0442\u0438\u043d\u0441\u0442\u0432\u043e', u'http://feeds.feedburner.com/zaxid/Childhood'), (u'\u0410\u043d\u043e\u043d\u0441\u0438', u'http://feeds.feedburner.com/zaxid/Announcements')] diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip index a2b20c7a69..6aa473571b 100644 Binary files a/resources/compiled_coffeescript.zip and b/resources/compiled_coffeescript.zip differ diff --git a/resources/content_server/browse/browse.css b/resources/content_server/browse/browse.css index 2c50853ae9..b32c470803 100644 --- a/resources/content_server/browse/browse.css +++ b/resources/content_server/browse/browse.css @@ -81,6 +81,7 @@ body { background-color: #39a9cf; -moz-border-radius: 5px; -webkit-border-radius: 5px; + border-radius: 5px; text-shadow: #27211b 1px 1px 1px; -moz-box-shadow: 5px 5px 5px #222; -webkit-box-shadow: 5px 5px 5px #222; diff --git a/resources/images/devices/ipad.png b/resources/images/devices/ipad.png index 823109194f..d5b6eef662 100644 Binary files a/resources/images/devices/ipad.png and b/resources/images/devices/ipad.png differ diff --git a/session.vim b/session.vim index 9bcbbe7800..54c269978f 100644 --- a/session.vim +++ b/session.vim @@ -12,6 +12,7 @@ let g:syntastic_cpp_include_dirs = [ \'/usr/include/fontconfig', \'src/qtcurve/common', 'src/qtcurve', \'src/unrar', + \'src/qt-harfbuzz/src', \'/usr/include/ImageMagick', \] let g:syntastic_c_include_dirs = g:syntastic_cpp_include_dirs diff --git a/setup/build_environment.py b/setup/build_environment.py index afb7c61920..e192d2627e 100644 --- a/setup/build_environment.py +++ b/setup/build_environment.py @@ -6,12 +6,13 @@ __license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, socket, struct, subprocess, sys, glob +import os, socket, struct, subprocess, glob from distutils.spawn import find_executable from PyQt4 import pyqtconfig from setup import isosx, iswindows, islinux, is64bit +is64bit OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk' @@ -81,6 +82,7 @@ def consolidate(envvar, default): pyqt = pyqtconfig.Configuration() qt_inc = pyqt.qt_inc_dir +qt_private_inc = [] qt_lib = pyqt.qt_lib_dir ft_lib_dirs = [] ft_libs = [] @@ -140,6 +142,8 @@ elif isosx: png_libs = ['png12'] ft_libs = ['freetype'] ft_inc_dirs = ['/sw/include/freetype2'] + bq = glob.glob('/sw/build/qt-*/include')[-1] + qt_private_inc = ['%s/%s'%(bq, m) for m in ('QtGui', 'QtCore')] else: # Include directories png_inc_dirs = pkgconfig_include_dirs('libpng', 'PNG_INC_DIR', diff --git a/setup/check.py b/setup/check.py index 538f33289c..d00c8b2786 100644 --- a/setup/check.py +++ b/setup/check.py @@ -102,7 +102,8 @@ class Check(Command): errors = True if errors: cPickle.dump(cache, open(self.CACHE, 'wb'), -1) - subprocess.call(['gvim', '-f', f]) + subprocess.call(['gvim', '-S', + self.j(self.SRC, '../session.vim'), '-f', f]) raise SystemExit(1) cache[f] = mtime for x in builtins: diff --git a/setup/extensions.py b/setup/extensions.py index c167916afb..a2ed890e71 100644 --- a/setup/extensions.py +++ b/setup/extensions.py @@ -18,7 +18,7 @@ from setup.build_environment import (chmlib_inc_dirs, msvc, MT, win_inc, win_lib, win_ddk, magick_inc_dirs, magick_lib_dirs, magick_libs, chmlib_lib_dirs, sqlite_inc_dirs, icu_inc_dirs, icu_lib_dirs, win_ddk_lib_dirs, ft_libs, ft_lib_dirs, ft_inc_dirs, - zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit) + zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit, qt_private_inc) MT isunix = islinux or isosx or isbsd @@ -183,6 +183,13 @@ extensions = [ sip_files = ['calibre/gui2/progress_indicator/QProgressIndicator.sip'] ), + Extension('qt_hack', + ['calibre/ebooks/pdf/render/qt_hack.cpp'], + inc_dirs = qt_private_inc + ['calibre/ebooks/pdf/render', 'qt-harfbuzz/src'], + headers = ['calibre/ebooks/pdf/render/qt_hack.h'], + sip_files = ['calibre/ebooks/pdf/render/qt_hack.sip'] + ), + Extension('unrar', ['unrar/%s.cpp'%(x.partition('.')[0]) for x in ''' rar.o strlist.o strfn.o pathfn.o savepos.o smallfn.o global.o file.o @@ -545,6 +552,9 @@ class Build(Command): VERSION = 1.0.0 CONFIG += %s ''')%(ext.name, ' '.join(ext.headers), ' '.join(ext.sources), archs) + if ext.inc_dirs: + idir = ' '.join(ext.inc_dirs) + pro += 'INCLUDEPATH = %s\n'%idir pro = pro.replace('\\', '\\\\') open(ext.name+'.pro', 'wb').write(pro) qmc = [QMAKE, '-o', 'Makefile'] diff --git a/setup/installer/windows/__init__.py b/setup/installer/windows/__init__.py index eea0f9b487..5e1ad4a7c0 100644 --- a/setup/installer/windows/__init__.py +++ b/setup/installer/windows/__init__.py @@ -39,18 +39,6 @@ class Win32(WinBase): def msi64(self): return installer_name('msi', is64bit=True) - def sign_msi(self): - import xattr - print ('Signing installers ...') - sign64 = False - msi64 = self.msi64 - if os.path.exists(msi64) and 'user.signed' not in xattr.list(msi64): - subprocess.check_call(['scp', msi64, self.VM_NAME + - ':build/%s/%s'%(__appname__, msi64)]) - sign64 = True - subprocess.check_call(['ssh', self.VM_NAME, '~/sign.sh'], shell=False) - return sign64 - def do_dl(self, installer, errmsg): subprocess.check_call(('scp', '%s:build/%s/%s'%(self.VM_NAME, __appname__, installer), 'dist')) @@ -62,14 +50,8 @@ class Win32(WinBase): installer = self.installer() if os.path.exists('build/winfrozen'): shutil.rmtree('build/winfrozen') - sign64 = self.sign_msi() - if sign64: - self.do_dl(self.msi64, 'Failed to d/l signed 64 bit installer') - import xattr - xattr.set(self.msi64, 'user.signed', 'true') self.do_dl(installer, 'Failed to freeze') - installer = 'dist/%s-portable-installer-%s.exe'%(__appname__, __version__) self.do_dl(installer, 'Failed to get portable installer') diff --git a/setup/installer/windows/freeze.py b/setup/installer/windows/freeze.py index bd05fb06c9..c420e867d7 100644 --- a/setup/installer/windows/freeze.py +++ b/setup/installer/windows/freeze.py @@ -91,6 +91,7 @@ class Win32Freeze(Command, WixMixIn): if not is64bit: self.build_portable() self.build_portable_installer() + self.sign_installers() def remove_CRT_from_manifests(self): ''' @@ -101,7 +102,8 @@ class Win32Freeze(Command, WixMixIn): repl_pat = re.compile( r'(?is).*?Microsoft\.VC\d+\.CRT.*?') - for dll in glob.glob(self.j(self.dll_dir, '*.dll')): + for dll in (glob.glob(self.j(self.dll_dir, '*.dll')) + + glob.glob(self.j(self.plugins_dir, '*.pyd'))): bn = self.b(dll) with open(dll, 'rb') as f: raw = f.read() @@ -488,6 +490,17 @@ class Win32Freeze(Command, WixMixIn): subprocess.check_call([LZMA + r'\bin\elzma.exe', '-9', '--lzip', name]) + def sign_installers(self): + self.info('Signing installers...') + files = glob.glob(self.j('dist', '*.msi')) + glob.glob(self.j('dist', + '*.exe')) + if not files: + raise ValueError('No installers found') + subprocess.check_call(['signtool.exe', 'sign', '/a', '/d', + 'calibre - E-book management', '/du', + 'http://calibre-ebook.com', '/t', + 'http://timestamp.verisign.com/scripts/timstamp.dll'] + files) + def add_dir_to_zip(self, zf, path, prefix=''): ''' Add a directory recursively to the zip file with an optional prefix. @@ -586,6 +599,10 @@ class Win32Freeze(Command, WixMixIn): # from files 'unrar.pyd', 'wpd.pyd', 'podofo.pyd', 'progress_indicator.pyd', + # As per this https://bugs.launchpad.net/bugs/1087816 + # on some systems magick.pyd fails to load from memory + # on 64 bit + 'magick.pyd', }: self.add_to_zipfile(zf, pyd, x) os.remove(self.j(x, pyd)) diff --git a/setup/iso_639/ca.po b/setup/iso_639/ca.po index 31c366ebbd..fa4aebed41 100644 --- a/setup/iso_639/ca.po +++ b/setup/iso_639/ca.po @@ -12,14 +12,14 @@ msgstr "" "Report-Msgid-Bugs-To: Debian iso-codes team \n" "POT-Creation-Date: 2011-11-25 14:01+0000\n" -"PO-Revision-Date: 2012-11-25 22:19+0000\n" +"PO-Revision-Date: 2012-12-22 17:18+0000\n" "Last-Translator: Ferran Rius \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-26 04:39+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-23 04:38+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: ca\n" #. name for aaa @@ -2048,7 +2048,7 @@ msgstr "Atta; Faire" #. name for azz msgid "Nahuatl; Highland Puebla" -msgstr "Nahuatl; serra de Puebla" +msgstr "Nàhuatl; Puebla serra" #. name for baa msgid "Babatana" @@ -6156,7 +6156,7 @@ msgstr "Desano" #. name for deu msgid "German" -msgstr "Espanyol" +msgstr "Alemany" #. name for dev msgid "Domung" @@ -8052,7 +8052,7 @@ msgstr "Francès crioll; Guaiana" #. name for gct msgid "German; Colonia Tovar" -msgstr "Espanyol; Colonia Tovar" +msgstr "Alemany; Colonial Tovar" #. name for gda msgid "Lohar; Gade" @@ -10836,7 +10836,7 @@ msgstr "Jumleli" #. name for jmn msgid "Naga; Makuri" -msgstr "" +msgstr "Naga; Makuri" #. name for jmr msgid "Kamara" @@ -11624,7 +11624,7 @@ msgstr "Kurmukar" #. name for kfw msgid "Naga; Kharam" -msgstr "" +msgstr "Naga; Kharam" #. name for kfx msgid "Pahari; Kullu" @@ -11776,7 +11776,7 @@ msgstr "Kuturmi" #. name for khk msgid "Mongolian; Halh" -msgstr "" +msgstr "Mongol; Halh" #. name for khl msgid "Lusi" @@ -11932,7 +11932,7 @@ msgstr "Kiwai; Septentrional" #. name for kix msgid "Naga; Khiamniungan" -msgstr "" +msgstr "Naga; Khiamniungan" #. name for kiy msgid "Kirikiri" @@ -13400,7 +13400,7 @@ msgstr "Karo (Etiòpia)" #. name for kxi msgid "Murut; Keningau" -msgstr "" +msgstr "Keningau Murut" #. name for kxj msgid "Kulfa" @@ -14692,7 +14692,7 @@ msgstr "Lepki" #. name for lpn msgid "Naga; Long Phuri" -msgstr "" +msgstr "Naga; Long Phuri" #. name for lpo msgid "Lipo" @@ -15016,7 +15016,7 @@ msgstr "Litzlitz" #. name for lzn msgid "Naga; Leinong" -msgstr "" +msgstr "Naga; Leinong" #. name for lzz msgid "Laz" @@ -16456,7 +16456,7 @@ msgstr "Monimbo" #. name for mon msgid "Mongolian" -msgstr "mongol" +msgstr "Mongol" #. name for moo msgid "Monom" @@ -16560,15 +16560,15 @@ msgstr "Mindiri" #. name for mpo msgid "Miu" -msgstr "" +msgstr "Miu" #. name for mpp msgid "Migabac" -msgstr "" +msgstr "Migabac" #. name for mpq msgid "Matís" -msgstr "" +msgstr "Matis" #. name for mpr msgid "Vangunu" @@ -16580,51 +16580,51 @@ msgstr "" #. name for mpt msgid "Mian" -msgstr "" +msgstr "Mian" #. name for mpu msgid "Makuráp" -msgstr "" +msgstr "Makurap" #. name for mpv msgid "Mungkip" -msgstr "" +msgstr "Munkip" #. name for mpw msgid "Mapidian" -msgstr "" +msgstr "Mauaiana; Mapidian" #. name for mpx msgid "Misima-Paneati" -msgstr "" +msgstr "Misima-Paneati" #. name for mpy msgid "Mapia" -msgstr "" +msgstr "Mapia" #. name for mpz msgid "Mpi" -msgstr "" +msgstr "Mpi" #. name for mqa msgid "Maba (Indonesia)" -msgstr "" +msgstr "Maba (Indonèsia)" #. name for mqb msgid "Mbuko" -msgstr "" +msgstr "Mbuko" #. name for mqc msgid "Mangole" -msgstr "" +msgstr "Mangole" #. name for mqe msgid "Matepi" -msgstr "" +msgstr "Matepí" #. name for mqf msgid "Momuna" -msgstr "" +msgstr "Momuna" #. name for mqg msgid "Malay; Kota Bangun Kutai" @@ -16636,11 +16636,11 @@ msgstr "Mixtec; Tlazoyaltepec" #. name for mqi msgid "Mariri" -msgstr "" +msgstr "Mariri" #. name for mqj msgid "Mamasa" -msgstr "" +msgstr "Mamasa" #. name for mqk msgid "Manobo; Rajah Kabunsuwan" @@ -16648,31 +16648,31 @@ msgstr "Manobo; Rajah Kabunsuwan" #. name for mql msgid "Mbelime" -msgstr "" +msgstr "Mbelime" #. name for mqm msgid "Marquesan; South" -msgstr "" +msgstr "Marquesà: Meridional" #. name for mqn msgid "Moronene" -msgstr "" +msgstr "Moronene" #. name for mqo msgid "Modole" -msgstr "" +msgstr "Modole" #. name for mqp msgid "Manipa" -msgstr "" +msgstr "Manipa" #. name for mqq msgid "Minokok" -msgstr "" +msgstr "Minokok" #. name for mqr msgid "Mander" -msgstr "" +msgstr "Mander" #. name for mqs msgid "Makian; West" @@ -16680,7 +16680,7 @@ msgstr "Makià; Occidental" #. name for mqt msgid "Mok" -msgstr "" +msgstr "Mok" #. name for mqu msgid "Mandari" @@ -16688,35 +16688,35 @@ msgstr "Mandari" #. name for mqv msgid "Mosimo" -msgstr "" +msgstr "Mosimo" #. name for mqw msgid "Murupi" -msgstr "" +msgstr "Murupi" #. name for mqx msgid "Mamuju" -msgstr "" +msgstr "Mamuju" #. name for mqy msgid "Manggarai" -msgstr "" +msgstr "Mangarai" #. name for mqz msgid "Malasanga" -msgstr "" +msgstr "Malasanga" #. name for mra msgid "Mlabri" -msgstr "" +msgstr "Mlabri" #. name for mrb msgid "Marino" -msgstr "" +msgstr "Marino" #. name for mrc msgid "Maricopa" -msgstr "" +msgstr "Maricopa" #. name for mrd msgid "Magar; Western" @@ -16732,7 +16732,7 @@ msgstr "" #. name for mrg msgid "Mising" -msgstr "" +msgstr "Miri" #. name for mrh msgid "Chin; Mara" @@ -16740,7 +16740,7 @@ msgstr "Chin; Mara" #. name for mri msgid "Maori" -msgstr "" +msgstr "Maori" #. name for mrj msgid "Mari; Western" @@ -16752,11 +16752,11 @@ msgstr "" #. name for mrl msgid "Mortlockese" -msgstr "" +msgstr "Mortlockès" #. name for mrm msgid "Merlav" -msgstr "" +msgstr "Merlav" #. name for mrn msgid "Cheke Holo" @@ -16764,15 +16764,15 @@ msgstr "" #. name for mro msgid "Mru" -msgstr "" +msgstr "Mru" #. name for mrp msgid "Morouas" -msgstr "" +msgstr "Morouas" #. name for mrq msgid "Marquesan; North" -msgstr "" +msgstr "Marquesà; Septentrional" #. name for mrr msgid "Maria (India)" @@ -16780,7 +16780,7 @@ msgstr "Maria; Índia" #. name for mrs msgid "Maragus" -msgstr "" +msgstr "Maragus" #. name for mrt msgid "Marghi Central" @@ -16792,23 +16792,23 @@ msgstr "Mono (Camerun)" #. name for mrv msgid "Mangareva" -msgstr "" +msgstr "Mangareva" #. name for mrw msgid "Maranao" -msgstr "" +msgstr "Maranao" #. name for mrx msgid "Maremgi" -msgstr "" +msgstr "Maremgi" #. name for mry msgid "Mandaya" -msgstr "" +msgstr "Mandaya" #. name for mrz msgid "Marind" -msgstr "" +msgstr "Marind" #. name for msa msgid "Malay (macrolanguage)" @@ -16816,7 +16816,7 @@ msgstr "Malai (macrollengua)" #. name for msb msgid "Masbatenyo" -msgstr "" +msgstr "Masbatenyo" #. name for msc msgid "Maninka; Sankaran" @@ -16828,15 +16828,15 @@ msgstr "Llenguatge de signes maia iucatec" #. name for mse msgid "Musey" -msgstr "" +msgstr "Musei" #. name for msf msgid "Mekwei" -msgstr "" +msgstr "Mekwei" #. name for msg msgid "Moraid" -msgstr "" +msgstr "Moraid" #. name for msh msgid "Malagasy; Masikoro" @@ -16848,15 +16848,15 @@ msgstr "Malai; Sabah" #. name for msj msgid "Ma (Democratic Republic of Congo)" -msgstr "" +msgstr "Ma (República Democràtica del Congo)" #. name for msk msgid "Mansaka" -msgstr "" +msgstr "Mansaka" #. name for msl msgid "Molof" -msgstr "" +msgstr "Molof" #. name for msm msgid "Manobo; Agusan" @@ -16868,11 +16868,11 @@ msgstr "" #. name for mso msgid "Mombum" -msgstr "" +msgstr "Mombum" #. name for msp msgid "Maritsauá" -msgstr "" +msgstr "Maritsauà" #. name for msq msgid "Caac" @@ -16884,23 +16884,23 @@ msgstr "Llenguatge de signes mongol" #. name for mss msgid "Masela; West" -msgstr "" +msgstr "Masela; Occidental" #. name for msu msgid "Musom" -msgstr "" +msgstr "Musom" #. name for msv msgid "Maslam" -msgstr "" +msgstr "Maslam" #. name for msw msgid "Mansoanka" -msgstr "" +msgstr "Mansoanka" #. name for msx msgid "Moresada" -msgstr "" +msgstr "Moresada" #. name for msy msgid "Aruamu" @@ -16908,7 +16908,7 @@ msgstr "" #. name for msz msgid "Momare" -msgstr "" +msgstr "Momare" #. name for mta msgid "Manobo; Cotabato" @@ -16920,11 +16920,11 @@ msgstr "" #. name for mtc msgid "Munit" -msgstr "" +msgstr "Munit" #. name for mtd msgid "Mualang" -msgstr "" +msgstr "Mualang" #. name for mte msgid "Mono (Solomon Islands)" @@ -16932,7 +16932,7 @@ msgstr "Mono (Illes Salomó)" #. name for mtf msgid "Murik (Papua New Guinea)" -msgstr "" +msgstr "Múric" #. name for mtg msgid "Una" @@ -16940,15 +16940,15 @@ msgstr "" #. name for mth msgid "Munggui" -msgstr "" +msgstr "Munggui" #. name for mti msgid "Maiwa (Papua New Guinea)" -msgstr "" +msgstr "Maiwa (Papua Nova Guinea)" #. name for mtj msgid "Moskona" -msgstr "" +msgstr "Moskona" #. name for mtk msgid "Mbe'" @@ -16956,15 +16956,15 @@ msgstr "Mbe (Camerun)" #. name for mtl msgid "Montol" -msgstr "" +msgstr "Montol" #. name for mtm msgid "Mator" -msgstr "" +msgstr "Mator" #. name for mtn msgid "Matagalpa" -msgstr "" +msgstr "Matagalpa" #. name for mto msgid "Mixe; Totontepec" @@ -16976,11 +16976,11 @@ msgstr "" #. name for mtq msgid "Muong" -msgstr "" +msgstr "Muong" #. name for mtr msgid "Mewari" -msgstr "" +msgstr "Mewari" #. name for mts msgid "Yora" @@ -16988,7 +16988,7 @@ msgstr "" #. name for mtt msgid "Mota" -msgstr "" +msgstr "Mota" #. name for mtu msgid "Mixtec; Tututepec" @@ -17012,15 +17012,15 @@ msgstr "" #. name for mua msgid "Mundang" -msgstr "" +msgstr "Mundang" #. name for mub msgid "Mubi" -msgstr "" +msgstr "Mubi" #. name for muc msgid "Mbu'" -msgstr "" +msgstr "Mbu" #. name for mud msgid "Aleut; Mednyj" @@ -17028,35 +17028,35 @@ msgstr "" #. name for mue msgid "Media Lengua" -msgstr "" +msgstr "Media Lengua" #. name for mug msgid "Musgu" -msgstr "" +msgstr "Musgu" #. name for muh msgid "Mündü" -msgstr "" +msgstr "Mundu" #. name for mui msgid "Musi" -msgstr "" +msgstr "Musi" #. name for muj msgid "Mabire" -msgstr "" +msgstr "Mabire" #. name for muk msgid "Mugom" -msgstr "" +msgstr "Mugu" #. name for mul msgid "Multiple languages" -msgstr "" +msgstr "Llengües diverses" #. name for mum msgid "Maiwala" -msgstr "" +msgstr "Maiwala" #. name for muo msgid "Nyong" @@ -17064,7 +17064,7 @@ msgstr "" #. name for mup msgid "Malvi" -msgstr "" +msgstr "Malvi" #. name for muq msgid "Miao; Eastern Xiangxi" @@ -17072,7 +17072,7 @@ msgstr "Miao; Xiangxi oriental" #. name for mur msgid "Murle" -msgstr "" +msgstr "Murle" #. name for mus msgid "Creek" @@ -17088,7 +17088,7 @@ msgstr "" #. name for muv msgid "Muthuvan" -msgstr "" +msgstr "Muthuvan" #. name for mux msgid "Bo-Ung" @@ -17096,31 +17096,31 @@ msgstr "" #. name for muy msgid "Muyang" -msgstr "" +msgstr "Muyang" #. name for muz msgid "Mursi" -msgstr "" +msgstr "Mursi" #. name for mva msgid "Manam" -msgstr "" +msgstr "Manam" #. name for mvb msgid "Mattole" -msgstr "" +msgstr "Mattole" #. name for mvd msgid "Mamboru" -msgstr "" +msgstr "Mamboru" #. name for mve msgid "Marwari (Pakistan)" -msgstr "" +msgstr "Marwari; Pakistan" #. name for mvf msgid "Mongolian; Peripheral" -msgstr "" +msgstr "Mongol; Perifèric" #. name for mvg msgid "Mixtec; Yucuañe" @@ -17128,15 +17128,15 @@ msgstr "Mixtec; Yucuañe" #. name for mvh msgid "Mire" -msgstr "" +msgstr "Mire" #. name for mvi msgid "Miyako" -msgstr "" +msgstr "Miyako" #. name for mvk msgid "Mekmek" -msgstr "" +msgstr "Mekmek" #. name for mvl msgid "Mbara (Australia)" @@ -17144,15 +17144,15 @@ msgstr "Mbara (Austràlia)" #. name for mvm msgid "Muya" -msgstr "" +msgstr "Muya" #. name for mvn msgid "Minaveha" -msgstr "" +msgstr "Minaveha" #. name for mvo msgid "Marovo" -msgstr "" +msgstr "Marovo" #. name for mvp msgid "Duri" @@ -17160,35 +17160,35 @@ msgstr "" #. name for mvq msgid "Moere" -msgstr "" +msgstr "Moere" #. name for mvr msgid "Marau" -msgstr "" +msgstr "Marau" #. name for mvs msgid "Massep" -msgstr "" +msgstr "Massep" #. name for mvt msgid "Mpotovoro" -msgstr "" +msgstr "Mpotovoro" #. name for mvu msgid "Marfa" -msgstr "" +msgstr "Marfa" #. name for mvv msgid "Murut; Tagal" -msgstr "" +msgstr "Tagal Murut" #. name for mvw msgid "Machinga" -msgstr "" +msgstr "Machinga" #. name for mvx msgid "Meoswar" -msgstr "" +msgstr "Meoswar" #. name for mvy msgid "Kohistani; Indus" @@ -17196,11 +17196,11 @@ msgstr "" #. name for mvz msgid "Mesqan" -msgstr "" +msgstr "Masqan" #. name for mwa msgid "Mwatebu" -msgstr "" +msgstr "Mwatebu" #. name for mwb msgid "Juwal" @@ -17212,7 +17212,7 @@ msgstr "" #. name for mwd msgid "Mudbura" -msgstr "" +msgstr "Mudbura" #. name for mwe msgid "Mwera (Chimwera)" @@ -17220,7 +17220,7 @@ msgstr "Mwera (Lindi)" #. name for mwf msgid "Murrinh-Patha" -msgstr "" +msgstr "Murrinh-Patha" #. name for mwg msgid "Aiklep" @@ -17228,7 +17228,7 @@ msgstr "" #. name for mwh msgid "Mouk-Aria" -msgstr "" +msgstr "Mouk-Aria" #. name for mwi msgid "Labo" @@ -17236,7 +17236,7 @@ msgstr "" #. name for mwj msgid "Maligo" -msgstr "" +msgstr "Maligo" #. name for mwk msgid "Maninkakan; Kita" @@ -17244,7 +17244,7 @@ msgstr "Maninkakan; Kita" #. name for mwl msgid "Mirandese" -msgstr "" +msgstr "Mirandès" #. name for mwm msgid "Sar" @@ -17256,7 +17256,7 @@ msgstr "" #. name for mwo msgid "Maewo; Central" -msgstr "" +msgstr "Maewo" #. name for mwp msgid "Kala Lagaw Ya" @@ -17268,23 +17268,23 @@ msgstr "Chin; Mün" #. name for mwr msgid "Marwari" -msgstr "" +msgstr "Marwari" #. name for mws msgid "Mwimbi-Muthambi" -msgstr "" +msgstr "Mwimbi-Muthambi" #. name for mwt msgid "Moken" -msgstr "" +msgstr "Moken" #. name for mwu msgid "Mittu" -msgstr "" +msgstr "Mittu" #. name for mwv msgid "Mentawai" -msgstr "" +msgstr "Mentawai" #. name for mww msgid "Hmong Daw" @@ -17292,15 +17292,15 @@ msgstr "Miao; blanc" #. name for mwx msgid "Mediak" -msgstr "" +msgstr "Mediak" #. name for mwy msgid "Mosiro" -msgstr "" +msgstr "Mosiro" #. name for mwz msgid "Moingi" -msgstr "" +msgstr "Moingi" #. name for mxa msgid "Mixtec; Northwest Oaxaca" @@ -17312,31 +17312,31 @@ msgstr "Mixtec; Tezoatlan" #. name for mxc msgid "Manyika" -msgstr "" +msgstr "Manyika" #. name for mxd msgid "Modang" -msgstr "" +msgstr "Modang" #. name for mxe msgid "Mele-Fila" -msgstr "" +msgstr "Mele-Fila" #. name for mxf msgid "Malgbe" -msgstr "" +msgstr "Malgbe" #. name for mxg msgid "Mbangala" -msgstr "" +msgstr "Mbangala" #. name for mxh msgid "Mvuba" -msgstr "" +msgstr "Mvuba" #. name for mxi msgid "Mozarabic" -msgstr "" +msgstr "Mossaràbic" #. name for mxj msgid "Deng; Geman" @@ -17344,7 +17344,7 @@ msgstr "" #. name for mxk msgid "Monumbo" -msgstr "" +msgstr "Monumbo" #. name for mxl msgid "Gbe; Maxi" @@ -17352,7 +17352,7 @@ msgstr "Gbe; Maxi" #. name for mxm msgid "Meramera" -msgstr "" +msgstr "Meramera" #. name for mxn msgid "Moi (Indonesia)" @@ -17360,7 +17360,7 @@ msgstr "Moi (Indonèsia)" #. name for mxo msgid "Mbowe" -msgstr "" +msgstr "Mbowe" #. name for mxp msgid "Mixe; Tlahuitoltepec" @@ -17372,7 +17372,7 @@ msgstr "Mixe; Juquila" #. name for mxr msgid "Murik (Malaysia)" -msgstr "" +msgstr "Kayan; Murik" #. name for mxs msgid "Mixtec; Huitepec" @@ -17384,7 +17384,7 @@ msgstr "Mixtec; Jamiltepec" #. name for mxu msgid "Mada (Cameroon)" -msgstr "" +msgstr "Mada (Camerun)" #. name for mxv msgid "Mixtec; Metlatónoc" @@ -17396,7 +17396,7 @@ msgstr "" #. name for mxx msgid "Mahou" -msgstr "" +msgstr "Mahou" #. name for mxy msgid "Mixtec; Southeastern Nochixtlán" @@ -17404,7 +17404,7 @@ msgstr "Mixtec; Nochixtlan sud-oriental" #. name for mxz msgid "Masela; Central" -msgstr "" +msgstr "Masela; Central" #. name for mya msgid "Burmese" @@ -17412,19 +17412,19 @@ msgstr "birmà" #. name for myb msgid "Mbay" -msgstr "" +msgstr "Mbay" #. name for myc msgid "Mayeka" -msgstr "" +msgstr "Mayeka" #. name for myd msgid "Maramba" -msgstr "" +msgstr "Maramba" #. name for mye msgid "Myene" -msgstr "" +msgstr "Myene" #. name for myf msgid "Bambassi" @@ -17432,19 +17432,19 @@ msgstr "" #. name for myg msgid "Manta" -msgstr "" +msgstr "Manta" #. name for myh msgid "Makah" -msgstr "" +msgstr "Makah" #. name for myi msgid "Mina (India)" -msgstr "" +msgstr "Mina (Índia)" #. name for myj msgid "Mangayat" -msgstr "" +msgstr "Mangayat" #. name for myk msgid "Senoufo; Mamara" @@ -17452,11 +17452,11 @@ msgstr "Senufo; Mamara" #. name for myl msgid "Moma" -msgstr "" +msgstr "Moma" #. name for mym msgid "Me'en" -msgstr "" +msgstr "Meen" #. name for myo msgid "Anfillo" @@ -17472,15 +17472,15 @@ msgstr "Maninka; Forest" #. name for myr msgid "Muniche" -msgstr "" +msgstr "Munitxe" #. name for mys msgid "Mesmes" -msgstr "" +msgstr "Mesmes" #. name for myu msgid "Mundurukú" -msgstr "" +msgstr "Munduruku" #. name for myv msgid "Erzya" @@ -17488,19 +17488,19 @@ msgstr "" #. name for myw msgid "Muyuw" -msgstr "" +msgstr "Muyuw" #. name for myx msgid "Masaaba" -msgstr "" +msgstr "Masaba" #. name for myy msgid "Macuna" -msgstr "" +msgstr "Macuna" #. name for myz msgid "Mandaic; Classical" -msgstr "" +msgstr "Mandaic Clàssic" #. name for mza msgid "Mixtec; Santa María Zacatepec" @@ -17516,11 +17516,11 @@ msgstr "Llenguatge de signes de Madagascar" #. name for mzd msgid "Malimba" -msgstr "" +msgstr "Malimba" #. name for mze msgid "Morawa" -msgstr "" +msgstr "Morawa" #. name for mzg msgid "Monastic Sign Language" @@ -17536,7 +17536,7 @@ msgstr "Mazatec; Ixcatlán" #. name for mzj msgid "Manya" -msgstr "" +msgstr "Manya" #. name for mzk msgid "Mambila; Nigeria" @@ -17548,35 +17548,35 @@ msgstr "Mixe; Mazatlan" #. name for mzm msgid "Mumuye" -msgstr "" +msgstr "Mumuye" #. name for mzn msgid "Mazanderani" -msgstr "" +msgstr "Mazanderaní" #. name for mzo msgid "Matipuhy" -msgstr "" +msgstr "Matipu" #. name for mzp msgid "Movima" -msgstr "" +msgstr "Movima" #. name for mzq msgid "Mori Atas" -msgstr "" +msgstr "Mori; Atas" #. name for mzr msgid "Marúbo" -msgstr "" +msgstr "Marubo" #. name for mzs msgid "Macanese" -msgstr "" +msgstr "Crioll Macau" #. name for mzt msgid "Mintil" -msgstr "" +msgstr "Mintil" #. name for mzu msgid "Inapang" @@ -17584,7 +17584,7 @@ msgstr "" #. name for mzv msgid "Manza" -msgstr "" +msgstr "Manza" #. name for mzw msgid "Deg" @@ -17592,7 +17592,7 @@ msgstr "" #. name for mzx msgid "Mawayana" -msgstr "" +msgstr "Mauaiana" #. name for mzy msgid "Mozambican Sign Language" @@ -17600,31 +17600,31 @@ msgstr "Llenguatge de signes moçambiquès" #. name for mzz msgid "Maiadomu" -msgstr "" +msgstr "Maiadom" #. name for naa msgid "Namla" -msgstr "" +msgstr "Namla" #. name for nab msgid "Nambikuára; Southern" -msgstr "" +msgstr "Nambikwara; Meridional" #. name for nac msgid "Narak" -msgstr "" +msgstr "Narak" #. name for nad msgid "Nijadali" -msgstr "" +msgstr "Nijadali" #. name for nae msgid "Naka'ela" -msgstr "" +msgstr "Naka'ela" #. name for naf msgid "Nabak" -msgstr "" +msgstr "Nabac" #. name for nag msgid "Naga Pidgin" @@ -17632,19 +17632,19 @@ msgstr "Naga; parla mixta" #. name for naj msgid "Nalu" -msgstr "" +msgstr "Nalu" #. name for nak msgid "Nakanai" -msgstr "" +msgstr "Nakanai" #. name for nal msgid "Nalik" -msgstr "" +msgstr "Nalik" #. name for nam msgid "Nangikurrunggurr" -msgstr "" +msgstr "Nangikurrunggurr" #. name for nan msgid "Chinese; Min Nan" @@ -17652,15 +17652,15 @@ msgstr "Xinès; Min Nan" #. name for nao msgid "Naaba" -msgstr "" +msgstr "Naapa Sherpa" #. name for nap msgid "Neapolitan" -msgstr "" +msgstr "Napolità-calabrès" #. name for naq msgid "Nama (Namibia)" -msgstr "" +msgstr "Nama (Namíbia)" #. name for nar msgid "Iguta" @@ -17668,7 +17668,7 @@ msgstr "" #. name for nas msgid "Naasioi" -msgstr "" +msgstr "Nasioi" #. name for nat msgid "Hungworo" @@ -17680,71 +17680,71 @@ msgstr "nauruà" #. name for nav msgid "Navajo" -msgstr "" +msgstr "Navaho" #. name for naw msgid "Nawuri" -msgstr "" +msgstr "Nawuri" #. name for nax msgid "Nakwi" -msgstr "" +msgstr "Nakwi" #. name for nay msgid "Narrinyeri" -msgstr "" +msgstr "Narrinyeri" #. name for naz msgid "Nahuatl; Coatepec" -msgstr "" +msgstr "Nàhuatl; Coatepec" #. name for nba msgid "Nyemba" -msgstr "" +msgstr "Nyemba" #. name for nbb msgid "Ndoe" -msgstr "" +msgstr "Ndoe" #. name for nbc msgid "Naga; Chang" -msgstr "" +msgstr "Naga; Chang" #. name for nbd msgid "Ngbinda" -msgstr "" +msgstr "Ngbinda" #. name for nbe msgid "Naga; Konyak" -msgstr "" +msgstr "Naga; Konyak" #. name for nbg msgid "Nagarchal" -msgstr "" +msgstr "Nagarchal" #. name for nbh msgid "Ngamo" -msgstr "" +msgstr "Ngamo" #. name for nbi msgid "Naga; Mao" -msgstr "" +msgstr "Naga; Mao" #. name for nbj msgid "Ngarinman" -msgstr "" +msgstr "Ngarinman" #. name for nbk msgid "Nake" -msgstr "" +msgstr "Nake" #. name for nbl msgid "Ndebele; South" -msgstr "" +msgstr "Ndebele (Sudàfrica)" #. name for nbm msgid "Ngbaka Ma'bo" -msgstr "" +msgstr "Ngbaka Ma'bo" #. name for nbn msgid "Kuri" @@ -17760,11 +17760,11 @@ msgstr "" #. name for nbq msgid "Nggem" -msgstr "" +msgstr "Nggem" #. name for nbr msgid "Numana-Nunku-Gbantu-Numbu" -msgstr "" +msgstr "Sanga" #. name for nbs msgid "Namibian Sign Language" @@ -17772,27 +17772,27 @@ msgstr "Llenguatge de signes namibi" #. name for nbt msgid "Na" -msgstr "" +msgstr "Na" #. name for nbu msgid "Naga; Rongmei" -msgstr "" +msgstr "Naga; Rongmei" #. name for nbv msgid "Ngamambo" -msgstr "" +msgstr "Ngamambo" #. name for nbw msgid "Ngbandi; Southern" -msgstr "" +msgstr "Ngbandi; Meridional" #. name for nbx msgid "Ngura" -msgstr "" +msgstr "Ngura" #. name for nby msgid "Ningera" -msgstr "" +msgstr "Ningera" #. name for nca msgid "Iyo" @@ -17808,7 +17808,7 @@ msgstr "" #. name for ncd msgid "Nachering" -msgstr "" +msgstr "Nachering" #. name for nce msgid "Yale" @@ -17816,39 +17816,39 @@ msgstr "" #. name for ncf msgid "Notsi" -msgstr "" +msgstr "Notsi" #. name for ncg msgid "Nisga'a" -msgstr "" +msgstr "Nisga'a" #. name for nch msgid "Nahuatl; Central Huasteca" -msgstr "" +msgstr "Nàhuatl; Huasteca Central" #. name for nci msgid "Nahuatl; Classical" -msgstr "" +msgstr "Nàhuatl Clàssic" #. name for ncj msgid "Nahuatl; Northern Puebla" -msgstr "" +msgstr "Nàhuatl; Puebla septentrional" #. name for nck msgid "Nakara" -msgstr "" +msgstr "Nakara" #. name for ncl msgid "Nahuatl; Michoacán" -msgstr "" +msgstr "Nàhuatl; Michoacan" #. name for ncm msgid "Nambo" -msgstr "" +msgstr "Nambu" #. name for ncn msgid "Nauna" -msgstr "" +msgstr "Nauna" #. name for nco msgid "Sibe" @@ -17856,11 +17856,11 @@ msgstr "" #. name for ncp msgid "Ndaktup" -msgstr "" +msgstr "Ndaktup" #. name for ncr msgid "Ncane" -msgstr "" +msgstr "Ncane" #. name for ncs msgid "Nicaraguan Sign Language" @@ -17868,7 +17868,7 @@ msgstr "Llenguatge de signes nicaragüenc" #. name for nct msgid "Naga; Chothe" -msgstr "" +msgstr "Naga; Chothe" #. name for ncu msgid "Chumburung" @@ -17876,15 +17876,15 @@ msgstr "" #. name for ncx msgid "Nahuatl; Central Puebla" -msgstr "" +msgstr "Nàhuatl; Puebla Central" #. name for ncz msgid "Natchez" -msgstr "" +msgstr "Natchez" #. name for nda msgid "Ndasa" -msgstr "" +msgstr "Ndasa" #. name for ndb msgid "Kenswei Nsei" @@ -17892,27 +17892,27 @@ msgstr "" #. name for ndc msgid "Ndau" -msgstr "" +msgstr "Ndau" #. name for ndd msgid "Nde-Nsele-Nta" -msgstr "" +msgstr "Nde-Nsele-Nta" #. name for nde msgid "Ndebele; North" -msgstr "" +msgstr "Ndebele (Zimbawe)" #. name for ndf msgid "Nadruvian" -msgstr "" +msgstr "Nadruvià" #. name for ndg msgid "Ndengereko" -msgstr "" +msgstr "Ndengereko" #. name for ndh msgid "Ndali" -msgstr "" +msgstr "Ndali" #. name for ndi msgid "Samba Leko" @@ -17920,47 +17920,47 @@ msgstr "" #. name for ndj msgid "Ndamba" -msgstr "" +msgstr "Ndamba" #. name for ndk msgid "Ndaka" -msgstr "" +msgstr "Ndaka" #. name for ndl msgid "Ndolo" -msgstr "" +msgstr "Ndolo" #. name for ndm msgid "Ndam" -msgstr "" +msgstr "Ndam" #. name for ndn msgid "Ngundi" -msgstr "" +msgstr "Ngundi" #. name for ndo msgid "Ndonga" -msgstr "" +msgstr "Ndonga" #. name for ndp msgid "Ndo" -msgstr "" +msgstr "Ndo" #. name for ndq msgid "Ndombe" -msgstr "" +msgstr "Ndombe" #. name for ndr msgid "Ndoola" -msgstr "" +msgstr "Ndoola" #. name for nds msgid "German; Low" -msgstr "" +msgstr "Alemany; Baix" #. name for ndt msgid "Ndunga" -msgstr "" +msgstr "Ndunga" #. name for ndu msgid "Dugun" @@ -17968,15 +17968,15 @@ msgstr "" #. name for ndv msgid "Ndut" -msgstr "" +msgstr "Ndut" #. name for ndw msgid "Ndobo" -msgstr "" +msgstr "Ndobo" #. name for ndx msgid "Nduga" -msgstr "" +msgstr "Nduga" #. name for ndy msgid "Lutos" @@ -17984,11 +17984,11 @@ msgstr "" #. name for ndz msgid "Ndogo" -msgstr "" +msgstr "Ndogo" #. name for nea msgid "Ngad'a; Eastern" -msgstr "" +msgstr "Ngada; Oriental" #. name for neb msgid "Toura (Côte d'Ivoire)" @@ -17996,55 +17996,55 @@ msgstr "Toura (Costa d'Ivori)" #. name for nec msgid "Nedebang" -msgstr "" +msgstr "Nedebang" #. name for ned msgid "Nde-Gbite" -msgstr "" +msgstr "Nde-Gbite" #. name for nee msgid "Nêlêmwa-Nixumwak" -msgstr "" +msgstr "kumak" #. name for nef msgid "Nefamese" -msgstr "" +msgstr "Nefamese" #. name for neg msgid "Negidal" -msgstr "" +msgstr "Negidal" #. name for neh msgid "Nyenkha" -msgstr "" +msgstr "Nyenkha" #. name for nei msgid "Hittite; Neo-" -msgstr "" +msgstr "Neo-Hittita" #. name for nej msgid "Neko" -msgstr "" +msgstr "Neko" #. name for nek msgid "Neku" -msgstr "" +msgstr "Neku" #. name for nem msgid "Nemi" -msgstr "" +msgstr "Nemi" #. name for nen msgid "Nengone" -msgstr "" +msgstr "Nengone" #. name for neo msgid "Ná-Meo" -msgstr "" +msgstr "Na-Meo" #. name for nep msgid "Nepali" -msgstr "" +msgstr "Nepalès" #. name for neq msgid "Mixe; North Central" @@ -18060,11 +18060,11 @@ msgstr "Kinnauri; Bhoti" #. name for net msgid "Nete" -msgstr "" +msgstr "Nete" #. name for nev msgid "Nyaheun" -msgstr "" +msgstr "Nyaheun" #. name for new msgid "Bhasa; Nepal" @@ -18072,15 +18072,15 @@ msgstr "" #. name for nex msgid "Neme" -msgstr "" +msgstr "Neme" #. name for ney msgid "Neyo" -msgstr "" +msgstr "Neyo" #. name for nez msgid "Nez Perce" -msgstr "" +msgstr "Nez" #. name for nfa msgid "Dhao" @@ -18096,7 +18096,7 @@ msgstr "" #. name for nfr msgid "Nafaanra" -msgstr "" +msgstr "Nafaanra" #. name for nfu msgid "Mfumte" @@ -18104,43 +18104,43 @@ msgstr "" #. name for nga msgid "Ngbaka" -msgstr "" +msgstr "Ngbaka" #. name for ngb msgid "Ngbandi; Northern" -msgstr "" +msgstr "Ngbandi; Septentrional" #. name for ngc msgid "Ngombe (Democratic Republic of Congo)" -msgstr "" +msgstr "Ngombe (República Democràtica del Congo)" #. name for ngd msgid "Ngando (Central African Republic)" -msgstr "" +msgstr "Ngando (República Centrafricana)" #. name for nge msgid "Ngemba" -msgstr "" +msgstr "Ngemba" #. name for ngg msgid "Ngbaka Manza" -msgstr "" +msgstr "Ngbaka Manza" #. name for ngh msgid "N/u" -msgstr "" +msgstr "N'u" #. name for ngi msgid "Ngizim" -msgstr "" +msgstr "Ngizim" #. name for ngj msgid "Ngie" -msgstr "" +msgstr "Ngie" #. name for ngk msgid "Ngalkbun" -msgstr "" +msgstr "Ngalkbun" #. name for ngl msgid "Lomwe" @@ -18152,23 +18152,23 @@ msgstr "Crioll dels homes Ngatik" #. name for ngn msgid "Ngwo" -msgstr "" +msgstr "Ngwo" #. name for ngo msgid "Ngoni" -msgstr "" +msgstr "Ngoní" #. name for ngp msgid "Ngulu" -msgstr "" +msgstr "Ngulu" #. name for ngq msgid "Ngurimi" -msgstr "" +msgstr "Ngurimi" #. name for ngr msgid "Nanggu" -msgstr "" +msgstr "Nanggu" #. name for ngs msgid "Gvoko" @@ -18176,23 +18176,23 @@ msgstr "" #. name for ngt msgid "Ngeq" -msgstr "" +msgstr "Ngeq" #. name for ngu msgid "Nahuatl; Guerrero" -msgstr "" +msgstr "Nàhuatl; Guerrero" #. name for ngv msgid "Nagumi" -msgstr "" +msgstr "Nagumi" #. name for ngw msgid "Ngwaba" -msgstr "" +msgstr "Ngwaba" #. name for ngx msgid "Nggwahyi" -msgstr "" +msgstr "Nggwahyi" #. name for ngy msgid "Tibea" @@ -18200,7 +18200,7 @@ msgstr "" #. name for ngz msgid "Ngungwel" -msgstr "" +msgstr "Ngungwel" #. name for nha msgid "Nhanda" @@ -18212,7 +18212,7 @@ msgstr "" #. name for nhc msgid "Nahuatl; Tabasco" -msgstr "" +msgstr "Nàhuatl; Tabasco" #. name for nhd msgid "Guaraní; Ava" @@ -18220,35 +18220,35 @@ msgstr "Guaraní; Ava" #. name for nhe msgid "Nahuatl; Eastern Huasteca" -msgstr "" +msgstr "Nàhuatl; Huastec oriental" #. name for nhf msgid "Nhuwala" -msgstr "" +msgstr "Nhuwala" #. name for nhg msgid "Nahuatl; Tetelcingo" -msgstr "" +msgstr "Nàhuatl; Tetelcingo" #. name for nhh msgid "Nahari" -msgstr "" +msgstr "Nahali" #. name for nhi msgid "Nahuatl; Zacatlán-Ahuacatlán-Tepetzintla" -msgstr "" +msgstr "Nàhuatl; Tenango" #. name for nhk msgid "Nahuatl; Isthmus-Cosoleacaque" -msgstr "" +msgstr "Nàhuatl; Cosoleacaque" #. name for nhm msgid "Nahuatl; Morelos" -msgstr "" +msgstr "Nàhuatl; Morelos" #. name for nhn msgid "Nahuatl; Central" -msgstr "" +msgstr "Nàhuatl; Central" #. name for nho msgid "Takuu" @@ -18256,79 +18256,79 @@ msgstr "" #. name for nhp msgid "Nahuatl; Isthmus-Pajapan" -msgstr "" +msgstr "Nàhuatl; Pajapan" #. name for nhq msgid "Nahuatl; Huaxcaleca" -msgstr "" +msgstr "Nàhuatl; Huaxcalec" #. name for nhr msgid "Naro" -msgstr "" +msgstr "Naro" #. name for nht msgid "Nahuatl; Ometepec" -msgstr "" +msgstr "Nàhuatl; Ometepec" #. name for nhu msgid "Noone" -msgstr "" +msgstr "Noone" #. name for nhv msgid "Nahuatl; Temascaltepec" -msgstr "" +msgstr "Nàhuatl; Temascaltepec" #. name for nhw msgid "Nahuatl; Western Huasteca" -msgstr "" +msgstr "Nàhuatl; Huastec occidental" #. name for nhx msgid "Nahuatl; Isthmus-Mecayapan" -msgstr "" +msgstr "Nàhuatl; Mecayapan" #. name for nhy msgid "Nahuatl; Northern Oaxaca" -msgstr "" +msgstr "Nàhuatl; Oaxaca Septentrional" #. name for nhz msgid "Nahuatl; Santa María La Alta" -msgstr "" +msgstr "Nàhuatl; Santa Maria" #. name for nia msgid "Nias" -msgstr "" +msgstr "Nias" #. name for nib msgid "Nakame" -msgstr "" +msgstr "Nakama" #. name for nid msgid "Ngandi" -msgstr "" +msgstr "Ngandi" #. name for nie msgid "Niellim" -msgstr "" +msgstr "Niellim" #. name for nif msgid "Nek" -msgstr "" +msgstr "Nek" #. name for nig msgid "Ngalakan" -msgstr "" +msgstr "Ngalakan" #. name for nih msgid "Nyiha (Tanzania)" -msgstr "" +msgstr "Nyiha (Tanzània)" #. name for nii msgid "Nii" -msgstr "" +msgstr "Nii" #. name for nij msgid "Ngaju" -msgstr "" +msgstr "Ngaju" #. name for nik msgid "Nicobarese; Southern" @@ -18336,31 +18336,31 @@ msgstr "Nicobarès; meridional" #. name for nil msgid "Nila" -msgstr "" +msgstr "Nila" #. name for nim msgid "Nilamba" -msgstr "" +msgstr "Nilamba" #. name for nin msgid "Ninzo" -msgstr "" +msgstr "Ninzam" #. name for nio msgid "Nganasan" -msgstr "" +msgstr "Nganassan" #. name for niq msgid "Nandi" -msgstr "" +msgstr "Nandí" #. name for nir msgid "Nimboran" -msgstr "" +msgstr "Nimboran" #. name for nis msgid "Nimi" -msgstr "" +msgstr "Nimi" #. name for nit msgid "Kolami; Southeastern" @@ -18368,7 +18368,7 @@ msgstr "Kolami; Meridional" #. name for niu msgid "Niuean" -msgstr "" +msgstr "Niueà" #. name for niv msgid "Gilyak" @@ -18376,7 +18376,7 @@ msgstr "" #. name for niw msgid "Nimo" -msgstr "" +msgstr "Nimo" #. name for nix msgid "Hema" @@ -18384,27 +18384,27 @@ msgstr "" #. name for niy msgid "Ngiti" -msgstr "" +msgstr "Ngiti" #. name for niz msgid "Ningil" -msgstr "" +msgstr "Ningil" #. name for nja msgid "Nzanyi" -msgstr "" +msgstr "Nzanyi" #. name for njb msgid "Naga; Nocte" -msgstr "" +msgstr "Naga; Nocte" #. name for njd msgid "Ndonde Hamba" -msgstr "" +msgstr "Ndonde" #. name for njh msgid "Naga; Lotha" -msgstr "" +msgstr "Naga; Lotha" #. name for nji msgid "Gudanji" @@ -18412,31 +18412,31 @@ msgstr "" #. name for njj msgid "Njen" -msgstr "" +msgstr "Njen" #. name for njl msgid "Njalgulgule" -msgstr "" +msgstr "Njalgulgule" #. name for njm msgid "Naga; Angami" -msgstr "" +msgstr "Naga; Angami" #. name for njn msgid "Naga; Liangmai" -msgstr "" +msgstr "Naga; Liangmai" #. name for njo msgid "Naga; Ao" -msgstr "" +msgstr "Naga; Ao" #. name for njr msgid "Njerep" -msgstr "" +msgstr "Njerep" #. name for njs msgid "Nisa" -msgstr "" +msgstr "Nisa" #. name for njt msgid "Ndyuka-Trio Pidgin" @@ -18444,7 +18444,7 @@ msgstr "Ndyuka-Trio; parla mixta" #. name for nju msgid "Ngadjunmaya" -msgstr "" +msgstr "Ngadjunmaya" #. name for njx msgid "Kunyi" @@ -18452,19 +18452,19 @@ msgstr "" #. name for njy msgid "Njyem" -msgstr "" +msgstr "Ndjem" #. name for nka msgid "Nkoya" -msgstr "" +msgstr "Nkoya" #. name for nkb msgid "Naga; Khoibu" -msgstr "" +msgstr "Naga; Khoibu" #. name for nkc msgid "Nkongho" -msgstr "" +msgstr "Nkongho" #. name for nkd msgid "Koireng" @@ -18476,43 +18476,43 @@ msgstr "" #. name for nkf msgid "Naga; Inpui" -msgstr "" +msgstr "Naga; Inpui" #. name for nkg msgid "Nekgini" -msgstr "" +msgstr "Nekgini" #. name for nkh msgid "Naga; Khezha" -msgstr "" +msgstr "Naga; Khezha" #. name for nki msgid "Naga; Thangal" -msgstr "" +msgstr "Naga; Thangal" #. name for nkj msgid "Nakai" -msgstr "" +msgstr "Nakai" #. name for nkk msgid "Nokuku" -msgstr "" +msgstr "Nokuku" #. name for nkm msgid "Namat" -msgstr "" +msgstr "Namat" #. name for nkn msgid "Nkangala" -msgstr "" +msgstr "Nkangala" #. name for nko msgid "Nkonya" -msgstr "" +msgstr "Nkonya" #. name for nkp msgid "Niuatoputapu" -msgstr "" +msgstr "Niuatoputapu" #. name for nkq msgid "Nkami" @@ -18520,7 +18520,7 @@ msgstr "" #. name for nkr msgid "Nukuoro" -msgstr "" +msgstr "Nukuoro" #. name for nks msgid "Asmat; North" @@ -18540,23 +18540,23 @@ msgstr "" #. name for nkw msgid "Nkutu" -msgstr "" +msgstr "Nkutu" #. name for nkx msgid "Nkoroo" -msgstr "" +msgstr "Nkoro" #. name for nkz msgid "Nkari" -msgstr "" +msgstr "Nkari" #. name for nla msgid "Ngombale" -msgstr "" +msgstr "Ngombale" #. name for nlc msgid "Nalca" -msgstr "" +msgstr "Nalca" #. name for nld msgid "Dutch" @@ -18564,7 +18564,7 @@ msgstr "Holandès" #. name for nle msgid "Nyala; East" -msgstr "" +msgstr "Nyala" #. name for nlg msgid "Gela" @@ -18576,7 +18576,7 @@ msgstr "" #. name for nlj msgid "Nyali" -msgstr "" +msgstr "Nyali" #. name for nlk msgid "Yali; Ninia" @@ -18584,63 +18584,63 @@ msgstr "" #. name for nll msgid "Nihali" -msgstr "" +msgstr "Nihali" #. name for nln msgid "Nahuatl; Durango" -msgstr "" +msgstr "Nàhuatl; Durango" #. name for nlo msgid "Ngul" -msgstr "" +msgstr "Ngul" #. name for nlr msgid "Ngarla" -msgstr "" +msgstr "Ngarla" #. name for nlu msgid "Nchumbulu" -msgstr "" +msgstr "Nchumbulu" #. name for nlv msgid "Nahuatl; Orizaba" -msgstr "" +msgstr "Nàhuatl; Orizaba" #. name for nlx msgid "Nahali" -msgstr "" +msgstr "Nahali" #. name for nly msgid "Nyamal" -msgstr "" +msgstr "Nyamal" #. name for nlz msgid "Nalögo" -msgstr "" +msgstr "Santa Cruz; Sudoccidental" #. name for nma msgid "Naga; Maram" -msgstr "" +msgstr "Naga; Maram" #. name for nmb msgid "Nambas; Big" -msgstr "" +msgstr "Nambas" #. name for nmc msgid "Ngam" -msgstr "" +msgstr "Ngam" #. name for nmd msgid "Ndumu" -msgstr "" +msgstr "Ndumu" #. name for nme msgid "Naga; Mzieme" -msgstr "" +msgstr "Naga; Mzieme" #. name for nmf msgid "Naga; Tangkhul" -msgstr "" +msgstr "Naga; Tangkhul" #. name for nmg msgid "Kwasio" @@ -18648,23 +18648,23 @@ msgstr "" #. name for nmh msgid "Naga; Monsang" -msgstr "" +msgstr "Naga; Monsang" #. name for nmi msgid "Nyam" -msgstr "" +msgstr "Nyam" #. name for nmj msgid "Ngombe (Central African Republic)" -msgstr "" +msgstr "Ngombe (República Centrafricana)" #. name for nmk msgid "Namakura" -msgstr "" +msgstr "Namakura" #. name for nml msgid "Ndemli" -msgstr "" +msgstr "Ndemli" #. name for nmm msgid "Manangba" @@ -18676,19 +18676,19 @@ msgstr "" #. name for nmo msgid "Naga; Moyon" -msgstr "" +msgstr "Naga; Moyon" #. name for nmp msgid "Nimanbur" -msgstr "" +msgstr "Nimanbur" #. name for nmq msgid "Nambya" -msgstr "" +msgstr "Nambya" #. name for nmr msgid "Nimbari" -msgstr "" +msgstr "Nimbari" #. name for nms msgid "Letemboi" @@ -18696,7 +18696,7 @@ msgstr "" #. name for nmt msgid "Namonuito" -msgstr "" +msgstr "Namonuito" #. name for nmu msgid "Maidu; Northeast" @@ -18704,35 +18704,35 @@ msgstr "Maidu; Nordoriental" #. name for nmv msgid "Ngamini" -msgstr "" +msgstr "Ngamini" #. name for nmw msgid "Nimoa" -msgstr "" +msgstr "Nimoa" #. name for nmx msgid "Nama (Papua New Guinea)" -msgstr "" +msgstr "Nama (Papua Nova Guinea)" #. name for nmy msgid "Namuyi" -msgstr "" +msgstr "Namuyi" #. name for nmz msgid "Nawdm" -msgstr "" +msgstr "Nawdm" #. name for nna msgid "Nyangumarta" -msgstr "" +msgstr "Nyangumarta" #. name for nnb msgid "Nande" -msgstr "" +msgstr "Nandí" #. name for nnc msgid "Nancere" -msgstr "" +msgstr "Nanceré" #. name for nnd msgid "Ambae; West" @@ -18740,43 +18740,43 @@ msgstr "" #. name for nne msgid "Ngandyera" -msgstr "" +msgstr "Ngandyera" #. name for nnf msgid "Ngaing" -msgstr "" +msgstr "Ngaing" #. name for nng msgid "Naga; Maring" -msgstr "" +msgstr "Naga; Maring" #. name for nnh msgid "Ngiemboon" -msgstr "" +msgstr "Ngiemboon" #. name for nni msgid "Nuaulu; North" -msgstr "" +msgstr "Nuaulu; Septentrional" #. name for nnj msgid "Nyangatom" -msgstr "" +msgstr "Nyangatom" #. name for nnk msgid "Nankina" -msgstr "" +msgstr "Nankina" #. name for nnl msgid "Naga; Northern Rengma" -msgstr "" +msgstr "Naga; Rengma septentrional" #. name for nnm msgid "Namia" -msgstr "" +msgstr "Namia" #. name for nnn msgid "Ngete" -msgstr "" +msgstr "Ngete" #. name for nno msgid "Norwegian Nynorsk" @@ -18784,23 +18784,23 @@ msgstr "Noruec; Nynorsk" #. name for nnp msgid "Naga; Wancho" -msgstr "" +msgstr "Naga; Wancho" #. name for nnq msgid "Ngindo" -msgstr "" +msgstr "Ngindo" #. name for nnr msgid "Narungga" -msgstr "" +msgstr "Narungga" #. name for nns msgid "Ningye" -msgstr "" +msgstr "Ningye" #. name for nnt msgid "Nanticoke" -msgstr "" +msgstr "Nanticoke" #. name for nnu msgid "Dwang" @@ -18808,23 +18808,23 @@ msgstr "" #. name for nnv msgid "Nugunu (Australia)" -msgstr "" +msgstr "Nugunu" #. name for nnw msgid "Nuni; Southern" -msgstr "" +msgstr "Nuni; Meridional" #. name for nnx msgid "Ngong" -msgstr "" +msgstr "Ngong" #. name for nny msgid "Nyangga" -msgstr "" +msgstr "Nyangga" #. name for nnz msgid "Nda'nda'" -msgstr "" +msgstr "Ndanda" #. name for noa msgid "Woun Meu" @@ -18836,7 +18836,7 @@ msgstr "Noruec; Bokmål" #. name for noc msgid "Nuk" -msgstr "" +msgstr "Nuk" #. name for nod msgid "Thai; Northern" @@ -18844,47 +18844,47 @@ msgstr "" #. name for noe msgid "Nimadi" -msgstr "" +msgstr "Nimadi" #. name for nof msgid "Nomane" -msgstr "" +msgstr "Nomane" #. name for nog msgid "Nogai" -msgstr "" +msgstr "Nogai" #. name for noh msgid "Nomu" -msgstr "" +msgstr "Nomu" #. name for noi msgid "Noiri" -msgstr "" +msgstr "Noiri" #. name for noj msgid "Nonuya" -msgstr "" +msgstr "Nonyua" #. name for nok msgid "Nooksack" -msgstr "" +msgstr "Nooksack" #. name for nom msgid "Nocamán" -msgstr "" +msgstr "Nocaman" #. name for non msgid "Norse; Old" -msgstr "" +msgstr "Nòrdic antic" #. name for nop msgid "Numanggang" -msgstr "" +msgstr "Numanggang" #. name for noq msgid "Ngongo" -msgstr "" +msgstr "Ngongo" #. name for nor msgid "Norwegian" @@ -18892,11 +18892,11 @@ msgstr "Noruec" #. name for nos msgid "Nisu; Eastern" -msgstr "" +msgstr "Yi; Lolo meridional" #. name for not msgid "Nomatsiguenga" -msgstr "" +msgstr "Nomatsiguenga" #. name for nou msgid "Ewage-Notu" @@ -18904,35 +18904,35 @@ msgstr "" #. name for nov msgid "Novial" -msgstr "" +msgstr "Novial" #. name for now msgid "Nyambo" -msgstr "" +msgstr "Nyambo" #. name for noy msgid "Noy" -msgstr "" +msgstr "Noy" #. name for noz msgid "Nayi" -msgstr "" +msgstr "Nayi" #. name for npa msgid "Nar Phu" -msgstr "" +msgstr "Nar-Phu" #. name for npb msgid "Nupbikha" -msgstr "" +msgstr "Nupbikha" #. name for nph msgid "Naga; Phom" -msgstr "" +msgstr "Naga; Phom" #. name for npl msgid "Nahuatl; Southeastern Puebla" -msgstr "" +msgstr "Nàhuatl; Puebla sudoriental" #. name for npn msgid "Mondropolon" @@ -18940,23 +18940,23 @@ msgstr "" #. name for npo msgid "Naga; Pochuri" -msgstr "" +msgstr "Naga; Pochuri" #. name for nps msgid "Nipsan" -msgstr "" +msgstr "Nipsan" #. name for npu msgid "Naga; Puimei" -msgstr "" +msgstr "Naga; Puimei" #. name for npy msgid "Napu" -msgstr "" +msgstr "Napu" #. name for nqg msgid "Nago; Southern" -msgstr "" +msgstr "Ede; Nago" #. name for nqk msgid "Ede Nago; Kura" @@ -18964,11 +18964,11 @@ msgstr "Ede;Nago Kura" #. name for nqm msgid "Ndom" -msgstr "" +msgstr "Ndom" #. name for nqn msgid "Nen" -msgstr "" +msgstr "Nen" #. name for nqo msgid "N'Ko" @@ -18976,39 +18976,39 @@ msgstr "" #. name for nra msgid "Ngom" -msgstr "" +msgstr "Ngom" #. name for nrb msgid "Nara" -msgstr "" +msgstr "Nara" #. name for nrc msgid "Noric" -msgstr "" +msgstr "Noric" #. name for nre msgid "Naga; Southern Rengma" -msgstr "" +msgstr "Naga; Rengma meridional" #. name for nrg msgid "Narango" -msgstr "" +msgstr "Narango" #. name for nri msgid "Naga; Chokri" -msgstr "" +msgstr "Naga; Chokri" #. name for nrl msgid "Ngarluma" -msgstr "" +msgstr "Ngarluma" #. name for nrm msgid "Narom" -msgstr "" +msgstr "Narom" #. name for nrn msgid "Norn" -msgstr "" +msgstr "Norn" #. name for nrp msgid "Picene; North" @@ -19016,7 +19016,7 @@ msgstr "" #. name for nrr msgid "Norra" -msgstr "" +msgstr "Norra" #. name for nrt msgid "Kalapuya; Northern" @@ -19028,7 +19028,7 @@ msgstr "" #. name for nrx msgid "Ngurmbur" -msgstr "" +msgstr "Ngurmbur" #. name for nrz msgid "Lala" @@ -19036,27 +19036,27 @@ msgstr "" #. name for nsa msgid "Naga; Sangtam" -msgstr "" +msgstr "Naga; Sangtam" #. name for nsc msgid "Nshi" -msgstr "" +msgstr "Nshi" #. name for nsd msgid "Nisu; Southern" -msgstr "" +msgstr "Nisu; Meridional" #. name for nse msgid "Nsenga" -msgstr "" +msgstr "Nsenga" #. name for nsg msgid "Ngasa" -msgstr "" +msgstr "Ngasa" #. name for nsh msgid "Ngoshie" -msgstr "" +msgstr "Ngishe" #. name for nsi msgid "Nigerian Sign Language" @@ -19064,7 +19064,7 @@ msgstr "Llenguatge de signes nigerià" #. name for nsk msgid "Naskapi" -msgstr "" +msgstr "Naskapi" #. name for nsl msgid "Norwegian Sign Language" @@ -19072,11 +19072,11 @@ msgstr "Llenguatge de signes noruec" #. name for nsm msgid "Naga; Sumi" -msgstr "" +msgstr "Naga; Sumi" #. name for nsn msgid "Nehan" -msgstr "" +msgstr "Nehan" #. name for nso msgid "Sotho; Northern" @@ -19096,27 +19096,27 @@ msgstr "Llenguatge de signes marítim" #. name for nss msgid "Nali" -msgstr "" +msgstr "Nali" #. name for nst msgid "Naga; Tase" -msgstr "" +msgstr "Naga; Tase" #. name for nsu msgid "Nahuatl; Sierra Negra" -msgstr "" +msgstr "Nàhuatl; Sierra Negra" #. name for nsv msgid "Nisu; Southwestern" -msgstr "" +msgstr "Nisu; Sudoccidental" #. name for nsw msgid "Navut" -msgstr "" +msgstr "Navut" #. name for nsx msgid "Nsongo" -msgstr "" +msgstr "Nsongo" #. name for nsy msgid "Nasal" @@ -19124,19 +19124,19 @@ msgstr "" #. name for nsz msgid "Nisenan" -msgstr "" +msgstr "Nisenan" #. name for nte msgid "Nathembo" -msgstr "" +msgstr "Nathembo" #. name for nti msgid "Natioro" -msgstr "" +msgstr "Natioro" #. name for ntj msgid "Ngaanyatjarra" -msgstr "" +msgstr "Ngaanyatjarra" #. name for ntk msgid "Ikoma-Nata-Isenye" @@ -19144,11 +19144,11 @@ msgstr "" #. name for ntm msgid "Nateni" -msgstr "" +msgstr "Nateni" #. name for nto msgid "Ntomba" -msgstr "" +msgstr "Ntomba" #. name for ntp msgid "Tepehuan; Northern" @@ -19160,15 +19160,15 @@ msgstr "" #. name for nts msgid "Natagaimas" -msgstr "" +msgstr "Natagaimas" #. name for ntu msgid "Natügu" -msgstr "" +msgstr "Santa Cruz: Septentrional" #. name for ntw msgid "Nottoway" -msgstr "" +msgstr "Nottoway" #. name for nty msgid "Mantsi" @@ -19176,7 +19176,7 @@ msgstr "" #. name for ntz msgid "Natanzi" -msgstr "" +msgstr "Natanzi" #. name for nua msgid "Yuaga" @@ -19184,35 +19184,35 @@ msgstr "" #. name for nuc msgid "Nukuini" -msgstr "" +msgstr "Nukini" #. name for nud msgid "Ngala" -msgstr "" +msgstr "Ngala" #. name for nue msgid "Ngundu" -msgstr "" +msgstr "Ngundu" #. name for nuf msgid "Nusu" -msgstr "" +msgstr "Nusu" #. name for nug msgid "Nungali" -msgstr "" +msgstr "Nungali" #. name for nuh msgid "Ndunda" -msgstr "" +msgstr "Ndunda" #. name for nui msgid "Ngumbi" -msgstr "" +msgstr "Ngumbi" #. name for nuj msgid "Nyole" -msgstr "" +msgstr "Nyole" #. name for nuk msgid "Nuu-chah-nulth" @@ -19220,11 +19220,11 @@ msgstr "" #. name for nul msgid "Nusa Laut" -msgstr "" +msgstr "Nusa Laut" #. name for num msgid "Niuafo'ou" -msgstr "" +msgstr "Niuafo'ou" #. name for nun msgid "Anong" @@ -19232,39 +19232,39 @@ msgstr "" #. name for nuo msgid "Nguôn" -msgstr "" +msgstr "Nguon" #. name for nup msgid "Nupe-Nupe-Tako" -msgstr "" +msgstr "Nupe" #. name for nuq msgid "Nukumanu" -msgstr "" +msgstr "Nukumanu" #. name for nur msgid "Nukuria" -msgstr "" +msgstr "Nuguria" #. name for nus msgid "Nuer" -msgstr "" +msgstr "Nuer" #. name for nut msgid "Nung (Viet Nam)" -msgstr "" +msgstr "Nung (VietNam)" #. name for nuu msgid "Ngbundu" -msgstr "" +msgstr "Ngbundu" #. name for nuv msgid "Nuni; Northern" -msgstr "" +msgstr "Nuni; Septentrional" #. name for nuw msgid "Nguluwan" -msgstr "" +msgstr "Nguluwà" #. name for nux msgid "Mehek" @@ -19272,35 +19272,35 @@ msgstr "" #. name for nuy msgid "Nunggubuyu" -msgstr "" +msgstr "Nunggubuyu" #. name for nuz msgid "Nahuatl; Tlamacazapa" -msgstr "" +msgstr "Nàhuatl; Tlamacazapa" #. name for nvh msgid "Nasarian" -msgstr "" +msgstr "Nasarià" #. name for nvm msgid "Namiae" -msgstr "" +msgstr "Namiae" #. name for nwa msgid "Nawathinehena" -msgstr "" +msgstr "Nawathinahana" #. name for nwb msgid "Nyabwa" -msgstr "" +msgstr "Nyabwa-Nyédébwa" #. name for nwc msgid "Newari; Old" -msgstr "" +msgstr "Newar; Antic" #. name for nwe msgid "Ngwe" -msgstr "" +msgstr "Ngwe" #. name for nwi msgid "Tanna; Southwest" @@ -19308,79 +19308,79 @@ msgstr "" #. name for nwm msgid "Nyamusa-Molo" -msgstr "" +msgstr "Nyamusa-Molo" #. name for nwr msgid "Nawaru" -msgstr "" +msgstr "Nawaru" #. name for nwx msgid "Newar; Middle" -msgstr "" +msgstr "Newar; Mitjà" #. name for nwy msgid "Nottoway-Meherrin" -msgstr "" +msgstr "Nottoway" #. name for nxa msgid "Nauete" -msgstr "" +msgstr "Naueti" #. name for nxd msgid "Ngando (Democratic Republic of Congo)" -msgstr "" +msgstr "Ngando (República Democràtica del Congo)" #. name for nxe msgid "Nage" -msgstr "" +msgstr "Nage" #. name for nxg msgid "Ngad'a" -msgstr "" +msgstr "Ngada; Central" #. name for nxi msgid "Nindi" -msgstr "" +msgstr "Nindi" #. name for nxl msgid "Nuaulu; South" -msgstr "" +msgstr "Nuaulu; Meridional" #. name for nxm msgid "Numidian" -msgstr "" +msgstr "Líbic" #. name for nxn msgid "Ngawun" -msgstr "" +msgstr "Ngawun" #. name for nxq msgid "Naxi" -msgstr "" +msgstr "Naxi" #. name for nxr msgid "Ninggerum" -msgstr "" +msgstr "Ninggirum" #. name for nxu msgid "Narau" -msgstr "" +msgstr "Narau" #. name for nxx msgid "Nafri" -msgstr "" +msgstr "Nafri" #. name for nya msgid "Nyanja" -msgstr "" +msgstr "Nyanja" #. name for nyb msgid "Nyangbo" -msgstr "" +msgstr "Nyangbo" #. name for nyc msgid "Nyanga-li" -msgstr "" +msgstr "Nyanga-li" #. name for nyd msgid "Nyore" @@ -19388,7 +19388,7 @@ msgstr "" #. name for nye msgid "Nyengo" -msgstr "" +msgstr "Nyengo" #. name for nyf msgid "Giryama" @@ -19396,11 +19396,11 @@ msgstr "" #. name for nyg msgid "Nyindu" -msgstr "" +msgstr "Nyindu" #. name for nyh msgid "Nyigina" -msgstr "" +msgstr "Nyigina" #. name for nyi msgid "Ama (Sudan)" @@ -19408,35 +19408,35 @@ msgstr "" #. name for nyj msgid "Nyanga" -msgstr "" +msgstr "Nyanga" #. name for nyk msgid "Nyaneka" -msgstr "" +msgstr "Nyaneka" #. name for nyl msgid "Nyeu" -msgstr "" +msgstr "Nyeu" #. name for nym msgid "Nyamwezi" -msgstr "" +msgstr "Nyamwesi" #. name for nyn msgid "Nyankole" -msgstr "" +msgstr "Nyankore" #. name for nyo msgid "Nyoro" -msgstr "" +msgstr "Nyoro" #. name for nyp msgid "Nyang'i" -msgstr "" +msgstr "Nyangi" #. name for nyq msgid "Nayini" -msgstr "" +msgstr "Nayini" #. name for nyr msgid "Nyiha (Malawi)" @@ -19444,31 +19444,31 @@ msgstr "" #. name for nys msgid "Nyunga" -msgstr "" +msgstr "Nyunga" #. name for nyt msgid "Nyawaygi" -msgstr "" +msgstr "Nyawaygi" #. name for nyu msgid "Nyungwe" -msgstr "" +msgstr "Nyungwe" #. name for nyv msgid "Nyulnyul" -msgstr "" +msgstr "Nyulnyui" #. name for nyw msgid "Nyaw" -msgstr "" +msgstr "Nyaw" #. name for nyx msgid "Nganyaywana" -msgstr "" +msgstr "Nganyaywana" #. name for nyy msgid "Nyakyusa-Ngonde" -msgstr "" +msgstr "Nyakyusa-Ngonde" #. name for nza msgid "Mbembe; Tigon" @@ -19476,19 +19476,19 @@ msgstr "Mbembe Tigon" #. name for nzb msgid "Njebi" -msgstr "" +msgstr "Njebi" #. name for nzi msgid "Nzima" -msgstr "" +msgstr "Nzema" #. name for nzk msgid "Nzakara" -msgstr "" +msgstr "Nzakara" #. name for nzm msgid "Naga; Zeme" -msgstr "" +msgstr "Naga; Zeme" #. name for nzs msgid "New Zealand Sign Language" @@ -19500,7 +19500,7 @@ msgstr "Teke; Nzikou" #. name for nzy msgid "Nzakambay" -msgstr "" +msgstr "Nzakambay" #. name for nzz msgid "Dogon; Nanga Dama" @@ -19508,11 +19508,11 @@ msgstr "Dogon; Nanga Dama" #. name for oaa msgid "Orok" -msgstr "" +msgstr "Orok" #. name for oac msgid "Oroch" -msgstr "" +msgstr "Orotx" #. name for oar msgid "Aramaic; Old (up to 700 BCE)" @@ -19628,7 +19628,7 @@ msgstr "" #. name for oht msgid "Hittite; Old" -msgstr "" +msgstr "Hittita; antic" #. name for ohu msgid "Hungarian; Old" @@ -20408,7 +20408,7 @@ msgstr "" #. name for pdc msgid "German; Pennsylvania" -msgstr "Alemany; Pennsylvania" +msgstr "Alemany; Pensilvàmia" #. name for pdi msgid "Pa Di" @@ -20936,7 +20936,7 @@ msgstr "Miwok; plana" #. name for pmx msgid "Naga; Poumei" -msgstr "" +msgstr "Naga; Poumei" #. name for pmy msgid "Malay; Papuan" @@ -21480,7 +21480,7 @@ msgstr "" #. name for puz msgid "Naga; Purum" -msgstr "" +msgstr "Naga; Purum" #. name for pwa msgid "Pawaia" @@ -21548,7 +21548,7 @@ msgstr "" #. name for pzn msgid "Naga; Para" -msgstr "" +msgstr "Naga; Para" #. name for qua msgid "Quapaw" @@ -22372,7 +22372,7 @@ msgstr "" #. name for rwr msgid "Marwari (India)" -msgstr "" +msgstr "Marwari; Índia" #. name for ryn msgid "Amami-Oshima; Northern" @@ -22552,7 +22552,7 @@ msgstr "" #. name for sbr msgid "Sembakung Murut" -msgstr "" +msgstr "Sembakung Murut" #. name for sbs msgid "Subiya" @@ -23304,7 +23304,7 @@ msgstr "Llenguatge de signes suís-italià" #. name for slg msgid "Selungai Murut" -msgstr "" +msgstr "Selungai Murut" #. name for slh msgid "Salish; Southern Puget Sound" @@ -23832,7 +23832,7 @@ msgstr "" #. name for srk msgid "Serudung Murut" -msgstr "" +msgstr "Serudung Murut" #. name for srl msgid "Isirawa" @@ -25128,7 +25128,7 @@ msgstr "" #. name for tih msgid "Murut; Timugon" -msgstr "" +msgstr "Timugon Murut" #. name for tii msgid "Tiene" @@ -25876,7 +25876,7 @@ msgstr "" #. name for tro msgid "Naga; Tarao" -msgstr "" +msgstr "Naga; Tarao" #. name for trp msgid "Kok Borok" @@ -26256,7 +26256,7 @@ msgstr "" #. name for tvt msgid "Naga; Tutsa" -msgstr "" +msgstr "Naga; Tutsa" #. name for tvw msgid "Sedoa" @@ -26744,7 +26744,7 @@ msgstr "" #. name for umn msgid "Naga; Makyan" -msgstr "" +msgstr "Naga; Makyan" #. name for umo msgid "Umotína" @@ -27224,7 +27224,7 @@ msgstr "Koraga; Mudu" #. name for vme msgid "Masela; East" -msgstr "" +msgstr "Masela; Oriental" #. name for vmf msgid "Mainfränkisch" @@ -27856,7 +27856,7 @@ msgstr "" #. name for wmm msgid "Maiwa (Indonesia)" -msgstr "" +msgstr "Maiwa (Indonèsia)" #. name for wmn msgid "Waamwang" @@ -28784,7 +28784,7 @@ msgstr "" #. name for xmz msgid "Mori Bawah" -msgstr "" +msgstr "Mori; Bawah" #. name for xna msgid "North Arabian; Ancient" @@ -28796,7 +28796,7 @@ msgstr "" #. name for xng msgid "Mongolian; Middle" -msgstr "" +msgstr "Mongol; Pre-clàssic" #. name for xnh msgid "Kuanhua" @@ -29568,7 +29568,7 @@ msgstr "" #. name for yim msgid "Naga; Yimchungru" -msgstr "" +msgstr "Naga; Yimchungru" #. name for yin msgid "Yinchia" @@ -29600,7 +29600,7 @@ msgstr "" #. name for yiv msgid "Nisu; Northern" -msgstr "" +msgstr "Yi; Eshan-Xinping" #. name for yix msgid "Yi; Axi" diff --git a/setup/iso_639/es.po b/setup/iso_639/es.po index 6e5893efc9..7b1126a18b 100644 --- a/setup/iso_639/es.po +++ b/setup/iso_639/es.po @@ -9,14 +9,14 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-11-25 14:01+0000\n" -"PO-Revision-Date: 2012-08-15 10:30+0000\n" -"Last-Translator: Jellby \n" +"PO-Revision-Date: 2012-12-24 08:05+0000\n" +"Last-Translator: Adolfo Jayme Barrientos \n" "Language-Team: Español; Castellano <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-08-16 04:40+0000\n" -"X-Generator: Launchpad (build 15810)\n" +"X-Launchpad-Export-Date: 2012-12-25 04:46+0000\n" +"X-Generator: Launchpad (build 16378)\n" #. name for aaa msgid "Ghotuo" @@ -9584,27 +9584,27 @@ msgstr "Holikachuk" #. name for hoj msgid "Hadothi" -msgstr "" +msgstr "Hadothi" #. name for hol msgid "Holu" -msgstr "" +msgstr "Holu" #. name for hom msgid "Homa" -msgstr "" +msgstr "Homa" #. name for hoo msgid "Holoholo" -msgstr "" +msgstr "Holoholo" #. name for hop msgid "Hopi" -msgstr "" +msgstr "Hopi" #. name for hor msgid "Horo" -msgstr "" +msgstr "Horo" #. name for hos msgid "Ho Chi Minh City Sign Language" @@ -9612,27 +9612,27 @@ msgstr "Lengua de signos de Ho Chi Minh" #. name for hot msgid "Hote" -msgstr "" +msgstr "Hote" #. name for hov msgid "Hovongan" -msgstr "" +msgstr "Hovongan" #. name for how msgid "Honi" -msgstr "" +msgstr "Honi" #. name for hoy msgid "Holiya" -msgstr "" +msgstr "Holiya" #. name for hoz msgid "Hozo" -msgstr "" +msgstr "Hozo" #. name for hpo msgid "Hpon" -msgstr "" +msgstr "Hpon" #. name for hps msgid "Hawai'i Pidgin Sign Language" @@ -9640,15 +9640,15 @@ msgstr "Lengua de signos pidyin hawaiana" #. name for hra msgid "Hrangkhol" -msgstr "" +msgstr "Hrangkhol" #. name for hre msgid "Hre" -msgstr "" +msgstr "Hre" #. name for hrk msgid "Haruku" -msgstr "" +msgstr "Haruku" #. name for hrm msgid "Miao; Horned" @@ -9656,19 +9656,19 @@ msgstr "" #. name for hro msgid "Haroi" -msgstr "" +msgstr "Haroi" #. name for hrr msgid "Horuru" -msgstr "" +msgstr "Horuru" #. name for hrt msgid "Hértevin" -msgstr "" +msgstr "Hértevin" #. name for hru msgid "Hruso" -msgstr "" +msgstr "Hruso" #. name for hrv msgid "Croatian" diff --git a/setup/iso_639/ja.po b/setup/iso_639/ja.po index d7f9fa4a59..d42dd10667 100644 --- a/setup/iso_639/ja.po +++ b/setup/iso_639/ja.po @@ -12,14 +12,14 @@ msgstr "" "Report-Msgid-Bugs-To: Debian iso-codes team \n" "POT-Creation-Date: 2011-11-25 14:01+0000\n" -"PO-Revision-Date: 2011-09-27 15:44+0000\n" -"Last-Translator: IIDA Yosiaki \n" +"PO-Revision-Date: 2012-12-13 13:56+0000\n" +"Last-Translator: Shushi Kurose \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-26 05:21+0000\n" -"X-Generator: Launchpad (build 14381)\n" +"X-Launchpad-Export-Date: 2012-12-14 05:34+0000\n" +"X-Generator: Launchpad (build 16369)\n" "Language: ja\n" #. name for aaa @@ -86,12 +86,9 @@ msgstr "" msgid "Abnaki; Eastern" msgstr "" -# 以下「国国」は、国立国会図書館のサイト。 -# ジブチ -# マイペディア「ジブチ」の項に「アファル語」 #. name for aar msgid "Afar" -msgstr "アファール語" +msgstr "アファル語" #. name for aas msgid "Aasáx" diff --git a/setup/iso_639/ms.po b/setup/iso_639/ms.po index 4b9d4eee4b..7da03f1ce2 100644 --- a/setup/iso_639/ms.po +++ b/setup/iso_639/ms.po @@ -2,23 +2,23 @@ # Copyright (C) 2001,2004 Free Software Foundation, Inc. # Hasbullah Bin Pit (sebol) , 2001 # Alastair McKinstry , 2001. -# - translations from ICU-3.0 -# +# - translations from ICU-3.0 +# Abuyop , 2012. msgid "" msgstr "" "Project-Id-Version: iso_639_3\n" "Report-Msgid-Bugs-To: Debian iso-codes team \n" "POT-Creation-Date: 2011-11-25 14:01+0000\n" -"PO-Revision-Date: 2012-11-29 02:06+0000\n" +"PO-Revision-Date: 2012-11-30 17:16+0000\n" "Last-Translator: abuyop \n" -"Language-Team: Projek Gabai \n" +"Language-Team: malay loco team\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-11-29 05:12+0000\n" +"X-Launchpad-Export-Date: 2012-12-01 04:57+0000\n" "X-Generator: Launchpad (build 16319)\n" -"Language: \n" +"Language: ms\n" #. name for aaa msgid "Ghotuo" @@ -298,7 +298,7 @@ msgstr "Arab; Oman" #. name for acy msgid "Arabic; Cypriot" -msgstr "" +msgstr "Arab, Cypriot" #. name for acz msgid "Acheron" @@ -410,7 +410,7 @@ msgstr "Bahasa Isyarat Argentina" #. name for aee msgid "Pashayi; Northeast" -msgstr "" +msgstr "Pashayi; Timur Laut" #. name for aek msgid "Haeke" @@ -434,7 +434,7 @@ msgstr "Aer" #. name for aer msgid "Arrernte; Eastern" -msgstr "" +msgstr "Arrernte; Timur" #. name for aes msgid "Alsea" @@ -502,7 +502,7 @@ msgstr "Afrikaans" #. name for afs msgid "Creole; Afro-Seminole" -msgstr "" +msgstr "Creole; Afro-Seminole" #. name for aft msgid "Afitti" @@ -698,7 +698,7 @@ msgstr "Agi" #. name for aig msgid "Creole English; Antigua and Barbuda" -msgstr "" +msgstr "Inggeris Creole; Antigua dan Barbuda" #. name for aih msgid "Ai-Cham" @@ -778,7 +778,7 @@ msgstr "Ajië" #. name for ajp msgid "Arabic; South Levantine" -msgstr "" +msgstr "Arab; Levantin Selatan" #. name for ajt msgid "Arabic; Judeo-Tunisian" @@ -1010,7 +1010,7 @@ msgstr "Hamer-Banna" #. name for amg msgid "Amarag" -msgstr "" +msgstr "Amarag" #. name for amh msgid "Amharic" @@ -1114,7 +1114,7 @@ msgstr "Animere" #. name for ang msgid "English; Old (ca. 450-1100)" -msgstr "" +msgstr "Inggeris; Tua (kira-kira 450-1100)" #. name for anh msgid "Nend" @@ -1274,11 +1274,11 @@ msgstr "Sa'a" #. name for apc msgid "Arabic; North Levantine" -msgstr "" +msgstr "Arab; Levantin Utara" #. name for apd msgid "Arabic; Sudanese" -msgstr "" +msgstr "Arab; Sudan" #. name for ape msgid "Bukiyip" @@ -1286,7 +1286,7 @@ msgstr "Bukiyip" #. name for apf msgid "Agta; Pahanan" -msgstr "" +msgstr "Agta; Pahanan" #. name for apg msgid "Ampanang" @@ -1374,7 +1374,7 @@ msgstr "Archi" #. name for aqd msgid "Dogon; Ampari" -msgstr "" +msgstr "Dogon; Ampari" #. name for aqg msgid "Arigidi" @@ -1386,7 +1386,7 @@ msgstr "Atohwaim" #. name for aqn msgid "Alta; Northern" -msgstr "" +msgstr "Alta; Utara" #. name for aqp msgid "Atakapa" @@ -1406,11 +1406,11 @@ msgstr "Bahasa Arab" #. name for arb msgid "Arabic; Standard" -msgstr "" +msgstr "Arab; Piawai" #. name for arc msgid "Aramaic; Official (700-300 BCE)" -msgstr "" +msgstr "Aramik, Rasmi (700-300 Seb.M)" #. name for ard msgid "Arabana" @@ -1418,7 +1418,7 @@ msgstr "Arabana" #. name for are msgid "Arrarnta; Western" -msgstr "" +msgstr "Arrarnta; Barat" #. name for arg msgid "Aragonese" @@ -1458,7 +1458,7 @@ msgstr "Arapaho" #. name for arq msgid "Arabic; Algerian" -msgstr "" +msgstr "Arab; Algeria" #. name for arr msgid "Karo (Brazil)" @@ -1466,7 +1466,7 @@ msgstr "Karo (Brazil)" #. name for ars msgid "Arabic; Najdi" -msgstr "" +msgstr "Arab; Najd" #. name for aru msgid "Aruá (Amazonas State)" @@ -1486,11 +1486,11 @@ msgstr "Aruá (Negeri Rodonia)" #. name for ary msgid "Arabic; Moroccan" -msgstr "" +msgstr "Arab; Maghribi" #. name for arz msgid "Arabic; Egyptian" -msgstr "" +msgstr "Arab; Mesir" #. name for asa msgid "Asu (Tanzania)" @@ -1502,7 +1502,7 @@ msgstr "Assiniboine" #. name for asc msgid "Asmat; Casuarina Coast" -msgstr "" +msgstr "Asmat; Casuarina Coast" #. name for asd msgid "Asas" @@ -1546,7 +1546,7 @@ msgstr "Assam" #. name for asn msgid "Asuriní; Xingú" -msgstr "" +msgstr "Asuriní; Xingú" #. name for aso msgid "Dano" @@ -1574,7 +1574,7 @@ msgstr "Asturia" #. name for asu msgid "Asurini; Tocantins" -msgstr "" +msgstr "Asurini; Tocantins" #. name for asv msgid "Asoa" @@ -1590,7 +1590,7 @@ msgstr "Muratayak" #. name for asy msgid "Asmat; Yaosakor" -msgstr "" +msgstr "Asmat; Yaosakor" #. name for asz msgid "As" @@ -1610,7 +1610,7 @@ msgstr "Atsahuaca" #. name for atd msgid "Manobo; Ata" -msgstr "" +msgstr "Manobo; Ata" #. name for ate msgid "Atemble" @@ -1634,7 +1634,7 @@ msgstr "Ati" #. name for atl msgid "Agta; Mt. Iraya" -msgstr "" +msgstr "Agta; Gunung Iraya" #. name for atm msgid "Ata" @@ -1650,7 +1650,7 @@ msgstr "Atong" #. name for atp msgid "Atta; Pudtol" -msgstr "" +msgstr "Atta, Pudtol" #. name for atq msgid "Aralle-Tabulahan" @@ -1666,7 +1666,7 @@ msgstr "Gros Ventre" #. name for att msgid "Atta; Pamplona" -msgstr "" +msgstr "Atta; Pamplona" #. name for atu msgid "Reel" @@ -1674,7 +1674,7 @@ msgstr "Reel" #. name for atv msgid "Altai; Northern" -msgstr "" +msgstr "Altai; Utara" #. name for atw msgid "Atsugewi" @@ -1742,11 +1742,11 @@ msgstr "Asu (Nigeria)" #. name for aun msgid "One; Molmo" -msgstr "" +msgstr "One; Molmo" #. name for auo msgid "Auyokawa" -msgstr "" +msgstr "Auyokawa" #. name for aup msgid "Makayam" @@ -1774,251 +1774,251 @@ msgstr "Awyi" #. name for aux msgid "Aurá" -msgstr "" +msgstr "Aurá" #. name for auy msgid "Awiyaana" -msgstr "" +msgstr "Awiyaana" #. name for auz msgid "Arabic; Uzbeki" -msgstr "" +msgstr "Arab; Uzbek" #. name for ava msgid "Avaric" -msgstr "" +msgstr "Avarik" #. name for avb msgid "Avau" -msgstr "" +msgstr "Avau" #. name for avd msgid "Alviri-Vidari" -msgstr "" +msgstr "Alviri-Vidari" #. name for ave msgid "Avestan" -msgstr "" +msgstr "Avestan" #. name for avi msgid "Avikam" -msgstr "" +msgstr "Avikam" #. name for avk msgid "Kotava" -msgstr "" +msgstr "Kotava" #. name for avl msgid "Arabic; Eastern Egyptian Bedawi" -msgstr "" +msgstr "Arab; Badwi Mesir Timur" #. name for avn msgid "Avatime" -msgstr "" +msgstr "Avatime" #. name for avo msgid "Agavotaguerra" -msgstr "" +msgstr "Agavotaguerra" #. name for avs msgid "Aushiri" -msgstr "" +msgstr "Aushiri" #. name for avt msgid "Au" -msgstr "" +msgstr "Au" #. name for avu msgid "Avokaya" -msgstr "" +msgstr "Avokaya" #. name for avv msgid "Avá-Canoeiro" -msgstr "" +msgstr "Avá-Canoeiro" #. name for awa msgid "Awadhi" -msgstr "" +msgstr "Awadhi" #. name for awb msgid "Awa (Papua New Guinea)" -msgstr "" +msgstr "Awa (Papua New Guinea)" #. name for awc msgid "Cicipu" -msgstr "" +msgstr "Cicipu" #. name for awe msgid "Awetí" -msgstr "" +msgstr "Awetí" #. name for awh msgid "Awbono" -msgstr "" +msgstr "Awbono" #. name for awi msgid "Aekyom" -msgstr "" +msgstr "Aekyom" #. name for awk msgid "Awabakal" -msgstr "" +msgstr "Awabakal" #. name for awm msgid "Arawum" -msgstr "" +msgstr "Arawum" #. name for awn msgid "Awngi" -msgstr "" +msgstr "Awngi" #. name for awo msgid "Awak" -msgstr "" +msgstr "Awak" #. name for awr msgid "Awera" -msgstr "" +msgstr "Awera" #. name for aws msgid "Awyu; South" -msgstr "" +msgstr "Awyu; Selatan" #. name for awt msgid "Araweté" -msgstr "" +msgstr "Araweté" #. name for awu msgid "Awyu; Central" -msgstr "" +msgstr "Awyu; Tengah" #. name for awv msgid "Awyu; Jair" -msgstr "" +msgstr "Awyu; Jair" #. name for aww msgid "Awun" -msgstr "" +msgstr "Awun" #. name for awx msgid "Awara" -msgstr "" +msgstr "Awara" #. name for awy msgid "Awyu; Edera" -msgstr "" +msgstr "Awyu; Edera" #. name for axb msgid "Abipon" -msgstr "" +msgstr "Abipon" #. name for axg msgid "Arára; Mato Grosso" -msgstr "" +msgstr "Arára; Mato Grosso" #. name for axk msgid "Yaka (Central African Republic)" -msgstr "" +msgstr "Yaka (Republik Afrika Tengah)" #. name for axm msgid "Armenian; Middle" -msgstr "" +msgstr "Armenia; Tengah" #. name for axx msgid "Xaragure" -msgstr "" +msgstr "Xaragure" #. name for aya msgid "Awar" -msgstr "" +msgstr "Awar" #. name for ayb msgid "Gbe; Ayizo" -msgstr "" +msgstr "Gbe; Ayizo" #. name for ayc msgid "Aymara; Southern" -msgstr "" +msgstr "Aymara; Selatan" #. name for ayd msgid "Ayabadhu" -msgstr "" +msgstr "Ayabadhu" #. name for aye msgid "Ayere" -msgstr "" +msgstr "Ayere" #. name for ayg msgid "Ginyanga" -msgstr "" +msgstr "Ginyanga" #. name for ayh msgid "Arabic; Hadrami" -msgstr "" +msgstr "Arab; Hadramaut" #. name for ayi msgid "Leyigha" -msgstr "" +msgstr "Leyigha" #. name for ayk msgid "Akuku" -msgstr "" +msgstr "Akuku" #. name for ayl msgid "Arabic; Libyan" -msgstr "" +msgstr "Arab; Libya" #. name for aym msgid "Aymara" -msgstr "" +msgstr "Aymara" #. name for ayn msgid "Arabic; Sanaani" -msgstr "" +msgstr "Arab; Sanaan" #. name for ayo msgid "Ayoreo" -msgstr "" +msgstr "Ayoreo" #. name for ayp msgid "Arabic; North Mesopotamian" -msgstr "" +msgstr "Arab; Mesopotamia Utara" #. name for ayq msgid "Ayi (Papua New Guinea)" -msgstr "" +msgstr "Ayi (Papua New Guinea)" #. name for ayr msgid "Aymara; Central" -msgstr "" +msgstr "Aymara; Pusat" #. name for ays msgid "Ayta; Sorsogon" -msgstr "" +msgstr "Ayta; Sorsogon" #. name for ayt msgid "Ayta; Magbukun" -msgstr "" +msgstr "Ayta; Magbukun" #. name for ayu msgid "Ayu" -msgstr "" +msgstr "Ayu" #. name for ayy msgid "Ayta; Tayabas" -msgstr "" +msgstr "Ayta, Tayabas" #. name for ayz msgid "Mai Brat" -msgstr "" +msgstr "Mai Brat" #. name for aza msgid "Azha" -msgstr "" +msgstr "Azha" #. name for azb msgid "Azerbaijani; South" -msgstr "" +msgstr "Azerbaijan; Selatan" #. name for aze msgid "Azerbaijani" @@ -2026,467 +2026,467 @@ msgstr "Azerbaijan" #. name for azg msgid "Amuzgo; San Pedro Amuzgos" -msgstr "" +msgstr "Amuzgo; San Pedro Amuzgos" #. name for azj msgid "Azerbaijani; North" -msgstr "" +msgstr "Azerbaijan; Utara" #. name for azm msgid "Amuzgo; Ipalapa" -msgstr "" +msgstr "Amuzgo; Ipalapa" #. name for azo msgid "Awing" -msgstr "" +msgstr "Awing" #. name for azt msgid "Atta; Faire" -msgstr "" +msgstr "Atta; Faire" #. name for azz msgid "Nahuatl; Highland Puebla" -msgstr "" +msgstr "Nahuatl; Puebla Tanah Tinggi" #. name for baa msgid "Babatana" -msgstr "" +msgstr "Babatana" #. name for bab msgid "Bainouk-Gunyuño" -msgstr "" +msgstr "Bainouk-Gunyuño" #. name for bac msgid "Badui" -msgstr "" +msgstr "Badui" #. name for bae msgid "Baré" -msgstr "" +msgstr "Baré" #. name for baf msgid "Nubaca" -msgstr "" +msgstr "Nubaca" #. name for bag msgid "Tuki" -msgstr "" +msgstr "Tuki" #. name for bah msgid "Creole English; Bahamas" -msgstr "" +msgstr "Inggeris Creole; Bahamas" #. name for baj msgid "Barakai" -msgstr "" +msgstr "Barakai" #. name for bak msgid "Bashkir" -msgstr "" +msgstr "Bashkir" #. name for bal msgid "Baluchi" -msgstr "" +msgstr "Baluchi" #. name for bam msgid "Bambara" -msgstr "" +msgstr "Bambara" #. name for ban msgid "Balinese" -msgstr "" +msgstr "Bali" #. name for bao msgid "Waimaha" -msgstr "" +msgstr "Waimaha" #. name for bap msgid "Bantawa" -msgstr "" +msgstr "Bantawa" #. name for bar msgid "Bavarian" -msgstr "" +msgstr "Bavaria" #. name for bas msgid "Basa (Cameroon)" -msgstr "" +msgstr "Basa (Cameroon)" #. name for bau msgid "Bada (Nigeria)" -msgstr "" +msgstr "Bada (Nigeria)" #. name for bav msgid "Vengo" -msgstr "" +msgstr "Vengo" #. name for baw msgid "Bambili-Bambui" -msgstr "" +msgstr "Bambili-Bambui" #. name for bax msgid "Bamun" -msgstr "" +msgstr "Bamun" #. name for bay msgid "Batuley" -msgstr "" +msgstr "Batuley" #. name for baz msgid "Tunen" -msgstr "" +msgstr "Tunen" #. name for bba msgid "Baatonum" -msgstr "" +msgstr "Baatonum" #. name for bbb msgid "Barai" -msgstr "" +msgstr "Barai" #. name for bbc msgid "Batak Toba" -msgstr "" +msgstr "Batak Toba" #. name for bbd msgid "Bau" -msgstr "" +msgstr "Bau" #. name for bbe msgid "Bangba" -msgstr "" +msgstr "Bangba" #. name for bbf msgid "Baibai" -msgstr "" +msgstr "Baibai" #. name for bbg msgid "Barama" -msgstr "" +msgstr "Barama" #. name for bbh msgid "Bugan" -msgstr "" +msgstr "Bugan" #. name for bbi msgid "Barombi" -msgstr "" +msgstr "Barombi" #. name for bbj msgid "Ghomálá'" -msgstr "" +msgstr "Ghomálá'" #. name for bbk msgid "Babanki" -msgstr "" +msgstr "Babanki" #. name for bbl msgid "Bats" -msgstr "" +msgstr "Bats" #. name for bbm msgid "Babango" -msgstr "" +msgstr "Babango" #. name for bbn msgid "Uneapa" -msgstr "" +msgstr "Uneapa" #. name for bbo msgid "Bobo Madaré; Northern" -msgstr "" +msgstr "Bobo Madaré; Utara" #. name for bbp msgid "Banda; West Central" -msgstr "" +msgstr "Banda: Tengah Barat" #. name for bbq msgid "Bamali" -msgstr "" +msgstr "Bamali" #. name for bbr msgid "Girawa" -msgstr "" +msgstr "Girawa" #. name for bbs msgid "Bakpinka" -msgstr "" +msgstr "Bakpinka" #. name for bbt msgid "Mburku" -msgstr "" +msgstr "Mburku" #. name for bbu msgid "Kulung (Nigeria)" -msgstr "" +msgstr "Kulung (Nigeria)" #. name for bbv msgid "Karnai" -msgstr "" +msgstr "Karnai" #. name for bbw msgid "Baba" -msgstr "" +msgstr "Baba" #. name for bbx msgid "Bubia" -msgstr "" +msgstr "Bubia" #. name for bby msgid "Befang" -msgstr "" +msgstr "Befang" #. name for bbz msgid "Creole Arabic; Babalia" -msgstr "" +msgstr "Arab Creole; Babalia" #. name for bca msgid "Bai; Central" -msgstr "" +msgstr "Bai, Tengah" #. name for bcb msgid "Bainouk-Samik" -msgstr "" +msgstr "Bainouk-Samik" #. name for bcc msgid "Balochi; Southern" -msgstr "" +msgstr "Balochi; Selatan" #. name for bcd msgid "Babar; North" -msgstr "" +msgstr "Babar; Utara" #. name for bce msgid "Bamenyam" -msgstr "" +msgstr "Bamenyam" #. name for bcf msgid "Bamu" -msgstr "" +msgstr "Bamu" #. name for bcg msgid "Baga Binari" -msgstr "" +msgstr "Baga Binari" #. name for bch msgid "Bariai" -msgstr "" +msgstr "Bariai" #. name for bci msgid "Baoulé" -msgstr "" +msgstr "Baoulé" #. name for bcj msgid "Bardi" -msgstr "" +msgstr "Bardi" #. name for bck msgid "Bunaba" -msgstr "" +msgstr "Bunaba" #. name for bcl msgid "Bicolano; Central" -msgstr "" +msgstr "Bicolano; Tengah" #. name for bcm msgid "Bannoni" -msgstr "" +msgstr "Bannoni" #. name for bcn msgid "Bali (Nigeria)" -msgstr "" +msgstr "Bali (Nigeria)" #. name for bco msgid "Kaluli" -msgstr "" +msgstr "Kaluli" #. name for bcp msgid "Bali (Democratic Republic of Congo)" -msgstr "" +msgstr "Bali (Republik Democratik Congo)" #. name for bcq msgid "Bench" -msgstr "" +msgstr "Bench" #. name for bcr msgid "Babine" -msgstr "" +msgstr "Babine" #. name for bcs msgid "Kohumono" -msgstr "" +msgstr "Kohumono" #. name for bct msgid "Bendi" -msgstr "" +msgstr "Bendi" #. name for bcu msgid "Awad Bing" -msgstr "" +msgstr "Awad Bing" #. name for bcv msgid "Shoo-Minda-Nye" -msgstr "" +msgstr "Shoo-Minda-Nye" #. name for bcw msgid "Bana" -msgstr "" +msgstr "Bana" #. name for bcy msgid "Bacama" -msgstr "" +msgstr "Bacama" #. name for bcz msgid "Bainouk-Gunyaamolo" -msgstr "" +msgstr "Bainouk-Gunyaamolo" #. name for bda msgid "Bayot" -msgstr "" +msgstr "Bayot" #. name for bdb msgid "Basap" -msgstr "" +msgstr "Basap" #. name for bdc msgid "Emberá-Baudó" -msgstr "" +msgstr "Emberá-Baudó" #. name for bdd msgid "Bunama" -msgstr "" +msgstr "Bunama" #. name for bde msgid "Bade" -msgstr "" +msgstr "Bade" #. name for bdf msgid "Biage" -msgstr "" +msgstr "Biage" #. name for bdg msgid "Bonggi" -msgstr "" +msgstr "Bonggi" #. name for bdh msgid "Baka (Sudan)" -msgstr "" +msgstr "Baka (Sudan)" #. name for bdi msgid "Burun" -msgstr "" +msgstr "Burun" #. name for bdj msgid "Bai" -msgstr "" +msgstr "Bai" #. name for bdk msgid "Budukh" -msgstr "" +msgstr "Budukh" #. name for bdl msgid "Bajau; Indonesian" -msgstr "" +msgstr "Bajau; Indonesia" #. name for bdm msgid "Buduma" -msgstr "" +msgstr "Buduma" #. name for bdn msgid "Baldemu" -msgstr "" +msgstr "Baldemu" #. name for bdo msgid "Morom" -msgstr "" +msgstr "Morom" #. name for bdp msgid "Bende" -msgstr "" +msgstr "Bende" #. name for bdq msgid "Bahnar" -msgstr "" +msgstr "Bahnar" #. name for bdr msgid "Bajau; West Coast" -msgstr "" +msgstr "Bajau; Pantai Barat" #. name for bds msgid "Burunge" -msgstr "" +msgstr "Burunge" #. name for bdt msgid "Bokoto" -msgstr "" +msgstr "Bokoto" #. name for bdu msgid "Oroko" -msgstr "" +msgstr "Oroko" #. name for bdv msgid "Bodo Parja" -msgstr "" +msgstr "Bodo Parja" #. name for bdw msgid "Baham" -msgstr "" +msgstr "Baham" #. name for bdx msgid "Budong-Budong" -msgstr "" +msgstr "Budong-Budong" #. name for bdy msgid "Bandjalang" -msgstr "" +msgstr "Bandjalang" #. name for bdz msgid "Badeshi" -msgstr "" +msgstr "Badeshi" #. name for bea msgid "Beaver" -msgstr "" +msgstr "Beaver" #. name for beb msgid "Bebele" -msgstr "" +msgstr "Bebele" #. name for bec msgid "Iceve-Maci" -msgstr "" +msgstr "Iceve-Maci" #. name for bed msgid "Bedoanas" -msgstr "" +msgstr "Bedoanas" #. name for bee msgid "Byangsi" -msgstr "" +msgstr "Byangsi" #. name for bef msgid "Benabena" -msgstr "" +msgstr "Benabena" #. name for beg msgid "Belait" -msgstr "" +msgstr "Belait" #. name for beh msgid "Biali" -msgstr "" +msgstr "Biali" #. name for bei msgid "Bekati'" -msgstr "" +msgstr "Bekati'" #. name for bej msgid "Beja" -msgstr "" +msgstr "Beja" #. name for bek msgid "Bebeli" -msgstr "" +msgstr "Bebeli" #. name for bel msgid "Belarusian" @@ -2494,1251 +2494,1251 @@ msgstr "Byelorussian" #. name for bem msgid "Bemba (Zambia)" -msgstr "" +msgstr "Bemba (Zambia)" #. name for ben msgid "Bengali" -msgstr "" +msgstr "Bengali" #. name for beo msgid "Beami" -msgstr "" +msgstr "Beami" #. name for bep msgid "Besoa" -msgstr "" +msgstr "Besoa" #. name for beq msgid "Beembe" -msgstr "" +msgstr "Beembe" #. name for bes msgid "Besme" -msgstr "" +msgstr "Besme" #. name for bet msgid "Béte; Guiberoua" -msgstr "" +msgstr "Béte; Guiberoua" #. name for beu msgid "Blagar" -msgstr "" +msgstr "Blagar" #. name for bev msgid "Bété; Daloa" -msgstr "" +msgstr "Bété, Daloa" #. name for bew msgid "Betawi" -msgstr "" +msgstr "Betawi" #. name for bex msgid "Jur Modo" -msgstr "" +msgstr "Jur Modo" #. name for bey msgid "Beli (Papua New Guinea)" -msgstr "" +msgstr "Beli (Papua New Guinea)" #. name for bez msgid "Bena (Tanzania)" -msgstr "" +msgstr "Bena (Tanzania)" #. name for bfa msgid "Bari" -msgstr "" +msgstr "Bari" #. name for bfb msgid "Bareli; Pauri" -msgstr "" +msgstr "Bareli; Pauri" #. name for bfc msgid "Bai; Northern" -msgstr "" +msgstr "Bai; Utara" #. name for bfd msgid "Bafut" -msgstr "" +msgstr "Bafut" #. name for bfe msgid "Betaf" -msgstr "" +msgstr "Betaf" #. name for bff msgid "Bofi" -msgstr "" +msgstr "Bofi" #. name for bfg msgid "Kayan; Busang" -msgstr "" +msgstr "Kayan; Busang" #. name for bfh msgid "Blafe" -msgstr "" +msgstr "Blafe" #. name for bfi msgid "British Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Britain" #. name for bfj msgid "Bafanji" -msgstr "" +msgstr "Bafanji" #. name for bfk msgid "Ban Khor Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Ban Khor" #. name for bfl msgid "Banda-Ndélé" -msgstr "" +msgstr "Banda-Ndélé" #. name for bfm msgid "Mmen" -msgstr "" +msgstr "Mmen" #. name for bfn msgid "Bunak" -msgstr "" +msgstr "Bunak" #. name for bfo msgid "Birifor; Malba" -msgstr "" +msgstr "Birifor; Malba" #. name for bfp msgid "Beba" -msgstr "" +msgstr "Baba" #. name for bfq msgid "Badaga" -msgstr "" +msgstr "Badaga" #. name for bfr msgid "Bazigar" -msgstr "" +msgstr "Bazigar" #. name for bfs msgid "Bai; Southern" -msgstr "" +msgstr "Bai; Selatan" #. name for bft msgid "Balti" -msgstr "" +msgstr "Balti" #. name for bfu msgid "Gahri" -msgstr "" +msgstr "Gahri" #. name for bfw msgid "Bondo" -msgstr "" +msgstr "Bondo" #. name for bfx msgid "Bantayanon" -msgstr "" +msgstr "Bantayanon" #. name for bfy msgid "Bagheli" -msgstr "" +msgstr "Bagheli" #. name for bfz msgid "Pahari; Mahasu" -msgstr "" +msgstr "Pahari; Mahasu" #. name for bga msgid "Gwamhi-Wuri" -msgstr "" +msgstr "Gwamhi-Wuri" #. name for bgb msgid "Bobongko" -msgstr "" +msgstr "Bobongko" #. name for bgc msgid "Haryanvi" -msgstr "" +msgstr "Haryanvi" #. name for bgd msgid "Bareli; Rathwi" -msgstr "" +msgstr "Bareli; Rathwi" #. name for bge msgid "Bauria" -msgstr "" +msgstr "Bauria" #. name for bgf msgid "Bangandu" -msgstr "" +msgstr "Bangandu" #. name for bgg msgid "Bugun" -msgstr "" +msgstr "Bugun" #. name for bgi msgid "Giangan" -msgstr "" +msgstr "Giangan" #. name for bgj msgid "Bangolan" -msgstr "" +msgstr "Bangolan" #. name for bgk msgid "Bit" -msgstr "" +msgstr "Bit" #. name for bgl msgid "Bo (Laos)" -msgstr "" +msgstr "Bo (Laos)" #. name for bgm msgid "Baga Mboteni" -msgstr "" +msgstr "Baga Mboteni" #. name for bgn msgid "Balochi; Western" -msgstr "" +msgstr "Balochi; Barat" #. name for bgo msgid "Baga Koga" -msgstr "" +msgstr "Baga Koga" #. name for bgp msgid "Balochi; Eastern" -msgstr "" +msgstr "Balochi, Timur" #. name for bgq msgid "Bagri" -msgstr "" +msgstr "Bagri" #. name for bgr msgid "Chin; Bawm" -msgstr "" +msgstr "Chin; Bawm" #. name for bgs msgid "Tagabawa" -msgstr "" +msgstr "Tagabawa" #. name for bgt msgid "Bughotu" -msgstr "" +msgstr "Bughotu" #. name for bgu msgid "Mbongno" -msgstr "" +msgstr "Mbongno" #. name for bgv msgid "Warkay-Bipim" -msgstr "" +msgstr "Warkay-Bipim" #. name for bgw msgid "Bhatri" -msgstr "" +msgstr "Bhatri" #. name for bgx msgid "Turkish; Balkan Gagauz" -msgstr "" +msgstr "Turki; Gagauz Balkan" #. name for bgy msgid "Benggoi" -msgstr "" +msgstr "Benggoi" #. name for bgz msgid "Banggai" -msgstr "" +msgstr "Banggai" #. name for bha msgid "Bharia" -msgstr "" +msgstr "Bharia" #. name for bhb msgid "Bhili" -msgstr "" +msgstr "Bhili" #. name for bhc msgid "Biga" -msgstr "" +msgstr "Biga" #. name for bhd msgid "Bhadrawahi" -msgstr "" +msgstr "Bhadrawahi" #. name for bhe msgid "Bhaya" -msgstr "" +msgstr "Bhaya" #. name for bhf msgid "Odiai" -msgstr "" +msgstr "Odiai" #. name for bhg msgid "Binandere" -msgstr "" +msgstr "Binandere" #. name for bhh msgid "Bukharic" -msgstr "" +msgstr "Bukhari" #. name for bhi msgid "Bhilali" -msgstr "" +msgstr "Bhilali" #. name for bhj msgid "Bahing" -msgstr "" +msgstr "Bahing" #. name for bhl msgid "Bimin" -msgstr "" +msgstr "Bimin" #. name for bhm msgid "Bathari" -msgstr "" +msgstr "Bathari" #. name for bhn msgid "Neo-Aramaic; Bohtan" -msgstr "" +msgstr "Neo-Aramik; Bohtan" #. name for bho msgid "Bhojpuri" -msgstr "" +msgstr "Bhojpuri" #. name for bhp msgid "Bima" -msgstr "" +msgstr "Bima" #. name for bhq msgid "Tukang Besi South" -msgstr "" +msgstr "Tukang Besi Selatan" #. name for bhr msgid "Malagasy; Bara" -msgstr "" +msgstr "Malagasy; Bara" #. name for bhs msgid "Buwal" -msgstr "" +msgstr "Buwal" #. name for bht msgid "Bhattiyali" -msgstr "" +msgstr "Bhattiyali" #. name for bhu msgid "Bhunjia" -msgstr "" +msgstr "Bhunjia" #. name for bhv msgid "Bahau" -msgstr "" +msgstr "Bahau" #. name for bhw msgid "Biak" -msgstr "" +msgstr "Biak" #. name for bhx msgid "Bhalay" -msgstr "" +msgstr "Bhalay" #. name for bhy msgid "Bhele" -msgstr "" +msgstr "Bhele" #. name for bhz msgid "Bada (Indonesia)" -msgstr "" +msgstr "Bada (Indonesia)" #. name for bia msgid "Badimaya" -msgstr "" +msgstr "Badimaya" #. name for bib msgid "Bissa" -msgstr "" +msgstr "Bissa" #. name for bic msgid "Bikaru" -msgstr "" +msgstr "Bikaru" #. name for bid msgid "Bidiyo" -msgstr "" +msgstr "Bidiyo" #. name for bie msgid "Bepour" -msgstr "" +msgstr "Bepour" #. name for bif msgid "Biafada" -msgstr "" +msgstr "Biafada" #. name for big msgid "Biangai" -msgstr "" +msgstr "Biangai" #. name for bij msgid "Vaghat-Ya-Bijim-Legeri" -msgstr "" +msgstr "Vaghat-Ya-Bijim-Legeri" #. name for bik msgid "Bikol" -msgstr "" +msgstr "Bikol" #. name for bil msgid "Bile" -msgstr "" +msgstr "Bile" #. name for bim msgid "Bimoba" -msgstr "" +msgstr "Bimoba" #. name for bin msgid "Bini" -msgstr "" +msgstr "Bini" #. name for bio msgid "Nai" -msgstr "" +msgstr "Nai" #. name for bip msgid "Bila" -msgstr "" +msgstr "Bila" #. name for biq msgid "Bipi" -msgstr "" +msgstr "Bipi" #. name for bir msgid "Bisorio" -msgstr "" +msgstr "Bisorio" #. name for bis msgid "Bislama" -msgstr "" +msgstr "Bislama" #. name for bit msgid "Berinomo" -msgstr "" +msgstr "Berinomo" #. name for biu msgid "Biete" -msgstr "" +msgstr "Biete" #. name for biv msgid "Birifor; Southern" -msgstr "" +msgstr "Birifor; Selatan" #. name for biw msgid "Kol (Cameroon)" -msgstr "" +msgstr "Kol (Cameroon)" #. name for bix msgid "Bijori" -msgstr "" +msgstr "Bijori" #. name for biy msgid "Birhor" -msgstr "" +msgstr "Birhor" #. name for biz msgid "Baloi" -msgstr "" +msgstr "Baloi" #. name for bja msgid "Budza" -msgstr "" +msgstr "Budza" #. name for bjb msgid "Banggarla" -msgstr "" +msgstr "Banggarla" #. name for bjc msgid "Bariji" -msgstr "" +msgstr "Bariji" #. name for bjd msgid "Bandjigali" -msgstr "" +msgstr "Bandjigali" #. name for bje msgid "Mien; Biao-Jiao" -msgstr "" +msgstr "Mien; Biao-Jiao" #. name for bjf msgid "Neo-Aramaic; Barzani Jewish" -msgstr "" +msgstr "Neo-Aramik; Yahudi Barzani" #. name for bjg msgid "Bidyogo" -msgstr "" +msgstr "Bidyogo" #. name for bjh msgid "Bahinemo" -msgstr "" +msgstr "Bahinemo" #. name for bji msgid "Burji" -msgstr "" +msgstr "Burji" #. name for bjj msgid "Kanauji" -msgstr "" +msgstr "Kanauji" #. name for bjk msgid "Barok" -msgstr "" +msgstr "Barok" #. name for bjl msgid "Bulu (Papua New Guinea)" -msgstr "" +msgstr "Bulu (Papua New Guinea)" #. name for bjm msgid "Bajelani" -msgstr "" +msgstr "Bajelani" #. name for bjn msgid "Banjar" -msgstr "" +msgstr "Banjar" #. name for bjo msgid "Banda; Mid-Southern" -msgstr "" +msgstr "Banda; Selatan-Tengah" #. name for bjr msgid "Binumarien" -msgstr "" +msgstr "Binumarien" #. name for bjs msgid "Bajan" -msgstr "" +msgstr "Bajan" #. name for bjt msgid "Balanta-Ganja" -msgstr "" +msgstr "Balanta-Ganja" #. name for bju msgid "Busuu" -msgstr "" +msgstr "Busuu" #. name for bjv msgid "Bedjond" -msgstr "" +msgstr "Bedjond" #. name for bjw msgid "Bakwé" -msgstr "" +msgstr "Bakwé" #. name for bjx msgid "Itneg; Banao" -msgstr "" +msgstr "Itneg; Banao" #. name for bjy msgid "Bayali" -msgstr "" +msgstr "Bayali" #. name for bjz msgid "Baruga" -msgstr "" +msgstr "Baruga" #. name for bka msgid "Kyak" -msgstr "" +msgstr "Kyak" #. name for bkc msgid "Baka (Cameroon)" -msgstr "" +msgstr "Baka (Cameroon)" #. name for bkd msgid "Binukid" -msgstr "" +msgstr "Binukid" #. name for bkf msgid "Beeke" -msgstr "" +msgstr "Beeke" #. name for bkg msgid "Buraka" -msgstr "" +msgstr "Buraka" #. name for bkh msgid "Bakoko" -msgstr "" +msgstr "Bakoko" #. name for bki msgid "Baki" -msgstr "" +msgstr "Baki" #. name for bkj msgid "Pande" -msgstr "" +msgstr "Pande" #. name for bkk msgid "Brokskat" -msgstr "" +msgstr "Brokskat" #. name for bkl msgid "Berik" -msgstr "" +msgstr "Berik" #. name for bkm msgid "Kom (Cameroon)" -msgstr "" +msgstr "Kom (Cameroon)" #. name for bkn msgid "Bukitan" -msgstr "" +msgstr "Bukitan" #. name for bko msgid "Kwa'" -msgstr "" +msgstr "Kwa'" #. name for bkp msgid "Boko (Democratic Republic of Congo)" -msgstr "" +msgstr "Boko (Republik Democratik Congo)" #. name for bkq msgid "Bakairí" -msgstr "" +msgstr "Bakairí" #. name for bkr msgid "Bakumpai" -msgstr "" +msgstr "Bakumpai" #. name for bks msgid "Sorsoganon; Northern" -msgstr "" +msgstr "Sorsoganon; Utara" #. name for bkt msgid "Boloki" -msgstr "" +msgstr "Boloki" #. name for bku msgid "Buhid" -msgstr "" +msgstr "Buhid" #. name for bkv msgid "Bekwarra" -msgstr "" +msgstr "Bekwarra" #. name for bkw msgid "Bekwel" -msgstr "" +msgstr "Bekwel" #. name for bkx msgid "Baikeno" -msgstr "" +msgstr "Baikeno" #. name for bky msgid "Bokyi" -msgstr "" +msgstr "Bokyi" #. name for bkz msgid "Bungku" -msgstr "" +msgstr "Bungku" #. name for bla msgid "Siksika" -msgstr "" +msgstr "Siksika" #. name for blb msgid "Bilua" -msgstr "" +msgstr "Bilua" #. name for blc msgid "Bella Coola" -msgstr "" +msgstr "Bella Coola" #. name for bld msgid "Bolango" -msgstr "" +msgstr "Bolango" #. name for ble msgid "Balanta-Kentohe" -msgstr "" +msgstr "Balanta-Kentohe" #. name for blf msgid "Buol" -msgstr "" +msgstr "Buol" #. name for blg msgid "Balau" -msgstr "" +msgstr "Balau" #. name for blh msgid "Kuwaa" -msgstr "" +msgstr "Kuwaa" #. name for bli msgid "Bolia" -msgstr "" +msgstr "Bolia" #. name for blj msgid "Bolongan" -msgstr "" +msgstr "Bolongan" #. name for blk msgid "Karen; Pa'o" -msgstr "" +msgstr "Karen; Pa'o" #. name for bll msgid "Biloxi" -msgstr "" +msgstr "Biloxi" #. name for blm msgid "Beli (Sudan)" -msgstr "" +msgstr "Beli (Sudan)" #. name for bln msgid "Bicolano; Southern Catanduanes" -msgstr "" +msgstr "Bicolano; Catanduanes Selatan" #. name for blo msgid "Anii" -msgstr "" +msgstr "Anii" #. name for blp msgid "Blablanga" -msgstr "" +msgstr "Blablanga" #. name for blq msgid "Baluan-Pam" -msgstr "" +msgstr "Baluan-Pam" #. name for blr msgid "Blang" -msgstr "" +msgstr "Blang" #. name for bls msgid "Balaesang" -msgstr "" +msgstr "Balaesang" #. name for blt msgid "Tai Dam" -msgstr "" +msgstr "Tai Dam" #. name for blv msgid "Bolo" -msgstr "" +msgstr "Bolo" #. name for blw msgid "Balangao" -msgstr "" +msgstr "Balangao" #. name for blx msgid "Ayta; Mag-Indi" -msgstr "" +msgstr "Ayta; Mag-Indi" #. name for bly msgid "Notre" -msgstr "" +msgstr "Notre" #. name for blz msgid "Balantak" -msgstr "" +msgstr "Balantak" #. name for bma msgid "Lame" -msgstr "" +msgstr "Lame" #. name for bmb msgid "Bembe" -msgstr "" +msgstr "Bembe" #. name for bmc msgid "Biem" -msgstr "" +msgstr "Biem" #. name for bmd msgid "Manduri; Baga" -msgstr "" +msgstr "Manduri; Baga" #. name for bme msgid "Limassa" -msgstr "" +msgstr "Limassa" #. name for bmf msgid "Bom" -msgstr "" +msgstr "Bom" #. name for bmg msgid "Bamwe" -msgstr "" +msgstr "Bamwe" #. name for bmh msgid "Kein" -msgstr "" +msgstr "Kein" #. name for bmi msgid "Bagirmi" -msgstr "" +msgstr "Bagirmi" #. name for bmj msgid "Bote-Majhi" -msgstr "" +msgstr "Bote-Majhi" #. name for bmk msgid "Ghayavi" -msgstr "" +msgstr "Ghayavi" #. name for bml msgid "Bomboli" -msgstr "" +msgstr "Bomboli" #. name for bmm msgid "Malagasy; Northern Betsimisaraka" -msgstr "" +msgstr "Malagasy, Betsimisaraka Utara" #. name for bmn msgid "Bina (Papua New Guinea)" -msgstr "" +msgstr "Bina (Papua New Guinea)" #. name for bmo msgid "Bambalang" -msgstr "" +msgstr "Bambalang" #. name for bmp msgid "Bulgebi" -msgstr "" +msgstr "Bulgebi" #. name for bmq msgid "Bomu" -msgstr "" +msgstr "Bomu" #. name for bmr msgid "Muinane" -msgstr "" +msgstr "Muinane" #. name for bms msgid "Kanuri; Bilma" -msgstr "" +msgstr "Kanuri; Bilma" #. name for bmt msgid "Biao Mon" -msgstr "" +msgstr "Biao Mon" #. name for bmu msgid "Somba-Siawari" -msgstr "" +msgstr "Somba-Siawari" #. name for bmv msgid "Bum" -msgstr "" +msgstr "Bum" #. name for bmw msgid "Bomwali" -msgstr "" +msgstr "Bomwali" #. name for bmx msgid "Baimak" -msgstr "" +msgstr "Baimak" #. name for bmy msgid "Bemba (Democratic Republic of Congo)" -msgstr "" +msgstr "Bemba (Republik Democratik Congo)" #. name for bmz msgid "Baramu" -msgstr "" +msgstr "Baramu" #. name for bna msgid "Bonerate" -msgstr "" +msgstr "Bonerate" #. name for bnb msgid "Bookan" -msgstr "" +msgstr "Bookan" #. name for bnc msgid "Bontok" -msgstr "" +msgstr "Bontok" #. name for bnd msgid "Banda (Indonesia)" -msgstr "" +msgstr "Banda (Indonesia)" #. name for bne msgid "Bintauna" -msgstr "" +msgstr "Bintauna" #. name for bnf msgid "Masiwang" -msgstr "" +msgstr "Masiwang" #. name for bng msgid "Benga" -msgstr "" +msgstr "Benga" #. name for bni msgid "Bangi" -msgstr "" +msgstr "Bangi" #. name for bnj msgid "Tawbuid; Eastern" -msgstr "" +msgstr "Tawbuid; Timur" #. name for bnk msgid "Bierebo" -msgstr "" +msgstr "Bierebo" #. name for bnl msgid "Boon" -msgstr "" +msgstr "Boon" #. name for bnm msgid "Batanga" -msgstr "" +msgstr "Batanga" #. name for bnn msgid "Bunun" -msgstr "" +msgstr "Bunun" #. name for bno msgid "Bantoanon" -msgstr "" +msgstr "Bantoanon" #. name for bnp msgid "Bola" -msgstr "" +msgstr "Bola" #. name for bnq msgid "Bantik" -msgstr "" +msgstr "Bantik" #. name for bnr msgid "Butmas-Tur" -msgstr "" +msgstr "Butmas-Tur" #. name for bns msgid "Bundeli" -msgstr "" +msgstr "Bundeli" #. name for bnu msgid "Bentong" -msgstr "" +msgstr "Bentong" #. name for bnv msgid "Bonerif" -msgstr "" +msgstr "Bonerif" #. name for bnw msgid "Bisis" -msgstr "" +msgstr "Bisis" #. name for bnx msgid "Bangubangu" -msgstr "" +msgstr "Bangubangu" #. name for bny msgid "Bintulu" -msgstr "" +msgstr "Bintulu" #. name for bnz msgid "Beezen" -msgstr "" +msgstr "Beezen" #. name for boa msgid "Bora" -msgstr "" +msgstr "Bora" #. name for bob msgid "Aweer" -msgstr "" +msgstr "Aweer" #. name for bod msgid "Tibetan" -msgstr "" +msgstr "Tibetan" #. name for boe msgid "Mundabli" -msgstr "" +msgstr "Mundabli" #. name for bof msgid "Bolon" -msgstr "" +msgstr "Bolon" #. name for bog msgid "Bamako Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Bamako" #. name for boh msgid "Boma" -msgstr "" +msgstr "Boma" #. name for boi msgid "Barbareño" -msgstr "" +msgstr "Barbareño" #. name for boj msgid "Anjam" -msgstr "" +msgstr "Anjam" #. name for bok msgid "Bonjo" -msgstr "" +msgstr "Bonjo" #. name for bol msgid "Bole" -msgstr "" +msgstr "Bole" #. name for bom msgid "Berom" -msgstr "" +msgstr "Berom" #. name for bon msgid "Bine" -msgstr "" +msgstr "Bine" #. name for boo msgid "Bozo; Tiemacèwè" -msgstr "" +msgstr "Bozo; Tiemacèwè" #. name for bop msgid "Bonkiman" -msgstr "" +msgstr "Bonkiman" #. name for boq msgid "Bogaya" -msgstr "" +msgstr "Bogaya" #. name for bor msgid "Borôro" -msgstr "" +msgstr "Borôro" #. name for bos msgid "Bosnian" -msgstr "" +msgstr "Bosnia" #. name for bot msgid "Bongo" -msgstr "" +msgstr "Bongo" #. name for bou msgid "Bondei" -msgstr "" +msgstr "Bondei" #. name for bov msgid "Tuwuli" -msgstr "" +msgstr "Tuwuli" #. name for bow msgid "Rema" -msgstr "" +msgstr "Rema" #. name for box msgid "Buamu" -msgstr "" +msgstr "Buamu" #. name for boy msgid "Bodo (Central African Republic)" -msgstr "" +msgstr "Bodo (Republik Afrika Tengah)" #. name for boz msgid "Bozo; Tiéyaxo" -msgstr "" +msgstr "Bozo; Tiéyaxo" #. name for bpa msgid "Dakaka" -msgstr "" +msgstr "Dakaka" #. name for bpb msgid "Barbacoas" -msgstr "" +msgstr "Barbacoas" #. name for bpd msgid "Banda-Banda" -msgstr "" +msgstr "Banda-Banda" #. name for bpg msgid "Bonggo" -msgstr "" +msgstr "Bonggo" #. name for bph msgid "Botlikh" -msgstr "" +msgstr "Botlikh" #. name for bpi msgid "Bagupi" -msgstr "" +msgstr "Bagupi" #. name for bpj msgid "Binji" -msgstr "" +msgstr "Binji" #. name for bpk msgid "Orowe" -msgstr "" +msgstr "Orowe" #. name for bpl msgid "Broome Pearling Lugger Pidgin" -msgstr "" +msgstr "Broome Pearling Lugger Pidgin" #. name for bpm msgid "Biyom" -msgstr "" +msgstr "Biyom" #. name for bpn msgid "Dzao Min" -msgstr "" +msgstr "Dzao Min" #. name for bpo msgid "Anasi" -msgstr "" +msgstr "Anasi" #. name for bpp msgid "Kaure" -msgstr "" +msgstr "Kaure" #. name for bpq msgid "Malay; Banda" -msgstr "" +msgstr "Melayu; Banda" #. name for bpr msgid "Blaan; Koronadal" -msgstr "" +msgstr "Blaan; Koronadal" #. name for bps msgid "Blaan; Sarangani" -msgstr "" +msgstr "Blaan; Sarangani" #. name for bpt msgid "Barrow Point" -msgstr "" +msgstr "Barrow Point" #. name for bpu msgid "Bongu" -msgstr "" +msgstr "Bongu" #. name for bpv msgid "Marind; Bian" -msgstr "" +msgstr "Marind; Bian" #. name for bpw msgid "Bo (Papua New Guinea)" -msgstr "" +msgstr "Bo (Papua New Guinea)" #. name for bpx msgid "Bareli; Palya" -msgstr "" +msgstr "Bareli; Palya" #. name for bpy msgid "Bishnupriya" -msgstr "" +msgstr "Bishnupriya" #. name for bpz msgid "Bilba" -msgstr "" +msgstr "Bilba" #. name for bqa msgid "Tchumbuli" -msgstr "" +msgstr "Tchumbuli" #. name for bqb msgid "Bagusa" -msgstr "" +msgstr "Bagusa" #. name for bqc msgid "Boko (Benin)" -msgstr "" +msgstr "Boko (Benin)" #. name for bqd msgid "Bung" -msgstr "" +msgstr "Bung" #. name for bqf msgid "Baga Kaloum" -msgstr "" +msgstr "Baga Kaloum" #. name for bqg msgid "Bago-Kusuntu" -msgstr "" +msgstr "Bago-Kusuntu" #. name for bqh msgid "Baima" -msgstr "" +msgstr "Baima" #. name for bqi msgid "Bakhtiari" -msgstr "" +msgstr "Bakhtiari" #. name for bqj msgid "Bandial" -msgstr "" +msgstr "Bandial" #. name for bqk msgid "Banda-Mbrès" -msgstr "" +msgstr "Banda-Mbrès" #. name for bql msgid "Bilakura" -msgstr "" +msgstr "Bilakura" #. name for bqm msgid "Wumboko" -msgstr "" +msgstr "Wumboko" #. name for bqn msgid "Bulgarian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Bulgaria" #. name for bqo msgid "Balo" -msgstr "" +msgstr "Balo" #. name for bqp msgid "Busa" -msgstr "" +msgstr "Busa" #. name for bqq msgid "Biritai" -msgstr "" +msgstr "Biritai" #. name for bqr msgid "Burusu" -msgstr "" +msgstr "Burusu" #. name for bqs msgid "Bosngun" -msgstr "" +msgstr "Bosngun" #. name for bqt msgid "Bamukumbit" -msgstr "" +msgstr "Bamukumbit" #. name for bqu msgid "Boguru" -msgstr "" +msgstr "Boguru" #. name for bqv msgid "Begbere-Ejar" -msgstr "" +msgstr "Begbere-Ejar" #. name for bqw msgid "Buru (Nigeria)" -msgstr "" +msgstr "Buru (Nigeria)" #. name for bqx msgid "Baangi" -msgstr "" +msgstr "Baangi" #. name for bqy msgid "Bengkala Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Bengkala" #. name for bqz msgid "Bakaka" -msgstr "" +msgstr "Bakaka" #. name for bra msgid "Braj" -msgstr "" +msgstr "Braj" #. name for brb msgid "Lave" -msgstr "" +msgstr "Lave" #. name for brc msgid "Creole Dutch; Berbice" -msgstr "" +msgstr "Belanda Creole; Berbice" #. name for brd msgid "Baraamu" -msgstr "" +msgstr "Baraamu" #. name for bre msgid "Breton" @@ -3746,323 +3746,323 @@ msgstr "Breton" #. name for brf msgid "Bera" -msgstr "" +msgstr "Bera" #. name for brg msgid "Baure" -msgstr "" +msgstr "Baure" #. name for brh msgid "Brahui" -msgstr "" +msgstr "Brahui" #. name for bri msgid "Mokpwe" -msgstr "" +msgstr "Mokpwe" #. name for brj msgid "Bieria" -msgstr "" +msgstr "Bieria" #. name for brk msgid "Birked" -msgstr "" +msgstr "Birked" #. name for brl msgid "Birwa" -msgstr "" +msgstr "Birwa" #. name for brm msgid "Barambu" -msgstr "" +msgstr "Barambu" #. name for brn msgid "Boruca" -msgstr "" +msgstr "Boruca" #. name for bro msgid "Brokkat" -msgstr "" +msgstr "Brokkat" #. name for brp msgid "Barapasi" -msgstr "" +msgstr "Barapasi" #. name for brq msgid "Breri" -msgstr "" +msgstr "Breri" #. name for brr msgid "Birao" -msgstr "" +msgstr "Birao" #. name for brs msgid "Baras" -msgstr "" +msgstr "Baras" #. name for brt msgid "Bitare" -msgstr "" +msgstr "Bitare" #. name for bru msgid "Bru; Eastern" -msgstr "" +msgstr "Bru; Timur" #. name for brv msgid "Bru; Western" -msgstr "" +msgstr "Bru; Barat" #. name for brw msgid "Bellari" -msgstr "" +msgstr "Bellari" #. name for brx msgid "Bodo (India)" -msgstr "" +msgstr "Bodo (India)" #. name for bry msgid "Burui" -msgstr "" +msgstr "Burui" #. name for brz msgid "Bilbil" -msgstr "" +msgstr "Bilbil" #. name for bsa msgid "Abinomn" -msgstr "" +msgstr "Abinomn" #. name for bsb msgid "Bisaya; Brunei" -msgstr "" +msgstr "Bisaya; Brunei" #. name for bsc msgid "Bassari" -msgstr "" +msgstr "Bassari" #. name for bse msgid "Wushi" -msgstr "" +msgstr "Wushi" #. name for bsf msgid "Bauchi" -msgstr "" +msgstr "Bauchi" #. name for bsg msgid "Bashkardi" -msgstr "" +msgstr "Bashkardi" #. name for bsh msgid "Kati" -msgstr "" +msgstr "Kati" #. name for bsi msgid "Bassossi" -msgstr "" +msgstr "Bassossi" #. name for bsj msgid "Bangwinji" -msgstr "" +msgstr "Bangwinji" #. name for bsk msgid "Burushaski" -msgstr "" +msgstr "Burushaski" #. name for bsl msgid "Basa-Gumna" -msgstr "" +msgstr "Basa-Gumna" #. name for bsm msgid "Busami" -msgstr "" +msgstr "Busami" #. name for bsn msgid "Barasana-Eduria" -msgstr "" +msgstr "Barasana-Eduria" #. name for bso msgid "Buso" -msgstr "" +msgstr "Buso" #. name for bsp msgid "Baga Sitemu" -msgstr "" +msgstr "Baga Sitemu" #. name for bsq msgid "Bassa" -msgstr "" +msgstr "Bassa" #. name for bsr msgid "Bassa-Kontagora" -msgstr "" +msgstr "Bassa-Kontagora" #. name for bss msgid "Akoose" -msgstr "" +msgstr "Akoose" #. name for bst msgid "Basketo" -msgstr "" +msgstr "Basketo" #. name for bsu msgid "Bahonsuai" -msgstr "" +msgstr "Bahonsuai" #. name for bsv msgid "Baga Sobané" -msgstr "" +msgstr "Baga Sobané" #. name for bsw msgid "Baiso" -msgstr "" +msgstr "Baiso" #. name for bsx msgid "Yangkam" -msgstr "" +msgstr "Yangkam" #. name for bsy msgid "Bisaya; Sabah" -msgstr "" +msgstr "Bisaya; Sabah" #. name for bta msgid "Bata" -msgstr "" +msgstr "Bata" #. name for btc msgid "Bati (Cameroon)" -msgstr "" +msgstr "Bati (Cameroon)" #. name for btd msgid "Batak Dairi" -msgstr "" +msgstr "Batak Dairi" #. name for bte msgid "Gamo-Ningi" -msgstr "" +msgstr "Gamo-Ningi" #. name for btf msgid "Birgit" -msgstr "" +msgstr "Birgit" #. name for btg msgid "Bété; Gagnoa" -msgstr "" +msgstr "Bété; Gagnoa" #. name for bth msgid "Bidayuh; Biatah" -msgstr "" +msgstr "Bidayuh; Biatah" #. name for bti msgid "Burate" -msgstr "" +msgstr "Burate" #. name for btj msgid "Malay; Bacanese" -msgstr "" +msgstr "Melayu; Bacan" #. name for btl msgid "Bhatola" -msgstr "" +msgstr "Bhatola" #. name for btm msgid "Batak Mandailing" -msgstr "" +msgstr "Batak Mandailing" #. name for btn msgid "Ratagnon" -msgstr "" +msgstr "Ratagnon" #. name for bto msgid "Bikol; Rinconada" -msgstr "" +msgstr "Bikol; Rinconada" #. name for btp msgid "Budibud" -msgstr "" +msgstr "Budibud" #. name for btq msgid "Batek" -msgstr "" +msgstr "Batek" #. name for btr msgid "Baetora" -msgstr "" +msgstr "Baetora" #. name for bts msgid "Batak Simalungun" -msgstr "" +msgstr "Batak Simalungun" #. name for btt msgid "Bete-Bendi" -msgstr "" +msgstr "Bete-Bendi" #. name for btu msgid "Batu" -msgstr "" +msgstr "Batu" #. name for btv msgid "Bateri" -msgstr "" +msgstr "Bateri" #. name for btw msgid "Butuanon" -msgstr "" +msgstr "Butuanon" #. name for btx msgid "Batak Karo" -msgstr "" +msgstr "Batak Karo" #. name for bty msgid "Bobot" -msgstr "" +msgstr "Bobot" #. name for btz msgid "Batak Alas-Kluet" -msgstr "" +msgstr "Batak Alas-Kluet" #. name for bua msgid "Buriat" -msgstr "" +msgstr "Buriat" #. name for bub msgid "Bua" -msgstr "" +msgstr "Bua" #. name for buc msgid "Bushi" -msgstr "" +msgstr "Bushi" #. name for bud msgid "Ntcham" -msgstr "" +msgstr "Ntcham" #. name for bue msgid "Beothuk" -msgstr "" +msgstr "Beothuk" #. name for buf msgid "Bushoong" -msgstr "" +msgstr "Bushoong" #. name for bug msgid "Buginese" -msgstr "" +msgstr "Bugis" #. name for buh msgid "Bunu; Younuo" -msgstr "" +msgstr "Bunu, Younuo" #. name for bui msgid "Bongili" -msgstr "" +msgstr "Bongili" #. name for buj msgid "Basa-Gurmana" -msgstr "" +msgstr "Basa-Gurmana" #. name for buk msgid "Bugawac" -msgstr "" +msgstr "Bugawac" #. name for bul msgid "Bulgarian" @@ -4070,623 +4070,623 @@ msgstr "Bulgarian" #. name for bum msgid "Bulu (Cameroon)" -msgstr "" +msgstr "Bulu (Cameroon)" #. name for bun msgid "Sherbro" -msgstr "" +msgstr "Sherbro" #. name for buo msgid "Terei" -msgstr "" +msgstr "Terei" #. name for bup msgid "Busoa" -msgstr "" +msgstr "Busoa" #. name for buq msgid "Brem" -msgstr "" +msgstr "Brem" #. name for bus msgid "Bokobaru" -msgstr "" +msgstr "Bokobaru" #. name for but msgid "Bungain" -msgstr "" +msgstr "Bungain" #. name for buu msgid "Budu" -msgstr "" +msgstr "Budu" #. name for buv msgid "Bun" -msgstr "" +msgstr "Bun" #. name for buw msgid "Bubi" -msgstr "" +msgstr "Bubi" #. name for bux msgid "Boghom" -msgstr "" +msgstr "Boghom" #. name for buy msgid "Bullom So" -msgstr "" +msgstr "Bullom So" #. name for buz msgid "Bukwen" -msgstr "" +msgstr "Bukwen" #. name for bva msgid "Barein" -msgstr "" +msgstr "Barein" #. name for bvb msgid "Bube" -msgstr "" +msgstr "Bube" #. name for bvc msgid "Baelelea" -msgstr "" +msgstr "Baelelea" #. name for bvd msgid "Baeggu" -msgstr "" +msgstr "Baeggu" #. name for bve msgid "Malay; Berau" -msgstr "" +msgstr "Melayu; Berau" #. name for bvf msgid "Boor" -msgstr "" +msgstr "Boor" #. name for bvg msgid "Bonkeng" -msgstr "" +msgstr "Bonkeng" #. name for bvh msgid "Bure" -msgstr "" +msgstr "Bure" #. name for bvi msgid "Belanda Viri" -msgstr "" +msgstr "Belanda Viri" #. name for bvj msgid "Baan" -msgstr "" +msgstr "Baan" #. name for bvk msgid "Bukat" -msgstr "" +msgstr "Bukat" #. name for bvl msgid "Bolivian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Bolivia" #. name for bvm msgid "Bamunka" -msgstr "" +msgstr "Bamunka" #. name for bvn msgid "Buna" -msgstr "" +msgstr "Buna" #. name for bvo msgid "Bolgo" -msgstr "" +msgstr "Bolgo" #. name for bvq msgid "Birri" -msgstr "" +msgstr "Birri" #. name for bvr msgid "Burarra" -msgstr "" +msgstr "Burarra" #. name for bvt msgid "Bati (Indonesia)" -msgstr "" +msgstr "Bati (Indonesia)" #. name for bvu msgid "Malay; Bukit" -msgstr "" +msgstr "Melayu; Bukit" #. name for bvv msgid "Baniva" -msgstr "" +msgstr "Baniva" #. name for bvw msgid "Boga" -msgstr "" +msgstr "Boga" #. name for bvx msgid "Dibole" -msgstr "" +msgstr "Dibole" #. name for bvy msgid "Baybayanon" -msgstr "" +msgstr "Baybayanon" #. name for bvz msgid "Bauzi" -msgstr "" +msgstr "Bauzi" #. name for bwa msgid "Bwatoo" -msgstr "" +msgstr "Bwatoo" #. name for bwb msgid "Namosi-Naitasiri-Serua" -msgstr "" +msgstr "Namosi-Naitasiri-Serua" #. name for bwc msgid "Bwile" -msgstr "" +msgstr "Bwile" #. name for bwd msgid "Bwaidoka" -msgstr "" +msgstr "Bwaidoka" #. name for bwe msgid "Karen; Bwe" -msgstr "" +msgstr "Karen; Bwe" #. name for bwf msgid "Boselewa" -msgstr "" +msgstr "Boselewa" #. name for bwg msgid "Barwe" -msgstr "" +msgstr "Barwe" #. name for bwh msgid "Bishuo" -msgstr "" +msgstr "Bishuo" #. name for bwi msgid "Baniwa" -msgstr "" +msgstr "Baniwa" #. name for bwj msgid "Bwamu; Láá Láá" -msgstr "" +msgstr "Bwamu; Láá Láá" #. name for bwk msgid "Bauwaki" -msgstr "" +msgstr "Bauwaki" #. name for bwl msgid "Bwela" -msgstr "" +msgstr "Bwela" #. name for bwm msgid "Biwat" -msgstr "" +msgstr "Biwat" #. name for bwn msgid "Bunu; Wunai" -msgstr "" +msgstr "Bunu; Wunai" #. name for bwo msgid "Boro (Ethiopia)" -msgstr "" +msgstr "Boro (Habsyah)" #. name for bwp msgid "Mandobo Bawah" -msgstr "" +msgstr "Mandobo Bawah" #. name for bwq msgid "Bobo Madaré; Southern" -msgstr "" +msgstr "Bobo Madaré; Selatan" #. name for bwr msgid "Bura-Pabir" -msgstr "" +msgstr "Bura-Pabir" #. name for bws msgid "Bomboma" -msgstr "" +msgstr "Bomboma" #. name for bwt msgid "Bafaw-Balong" -msgstr "" +msgstr "Bafaw-Balong" #. name for bwu msgid "Buli (Ghana)" -msgstr "" +msgstr "Buli (Ghana)" #. name for bww msgid "Bwa" -msgstr "" +msgstr "Bwa" #. name for bwx msgid "Bunu; Bu-Nao" -msgstr "" +msgstr "Bunu; Bu-Nao" #. name for bwy msgid "Bwamu; Cwi" -msgstr "" +msgstr "Bwamu; Cwi" #. name for bwz msgid "Bwisi" -msgstr "" +msgstr "Bwisi" #. name for bxa msgid "Bauro" -msgstr "" +msgstr "Bauro" #. name for bxb msgid "Bor; Belanda" -msgstr "" +msgstr "Bor; Belanda" #. name for bxc msgid "Molengue" -msgstr "" +msgstr "Molengue" #. name for bxd msgid "Pela" -msgstr "" +msgstr "Pela" #. name for bxe msgid "Birale" -msgstr "" +msgstr "Birale" #. name for bxf msgid "Bilur" -msgstr "" +msgstr "Bilur" #. name for bxg msgid "Bangala" -msgstr "" +msgstr "Bangala" #. name for bxh msgid "Buhutu" -msgstr "" +msgstr "Buhutu" #. name for bxi msgid "Pirlatapa" -msgstr "" +msgstr "Pirlatapa" #. name for bxj msgid "Bayungu" -msgstr "" +msgstr "Bayungu" #. name for bxk msgid "Bukusu" -msgstr "" +msgstr "Bukusu" #. name for bxl msgid "Jalkunan" -msgstr "" +msgstr "Jalkunan" #. name for bxm msgid "Buriat; Mongolia" -msgstr "" +msgstr "Buriat; Mongolia" #. name for bxn msgid "Burduna" -msgstr "" +msgstr "Burduna" #. name for bxo msgid "Barikanchi" -msgstr "" +msgstr "Barikanchi" #. name for bxp msgid "Bebil" -msgstr "" +msgstr "Bebil" #. name for bxq msgid "Beele" -msgstr "" +msgstr "Beele" #. name for bxr msgid "Buriat; Russia" -msgstr "" +msgstr "Buriat; Rusia" #. name for bxs msgid "Busam" -msgstr "" +msgstr "Busam" #. name for bxu msgid "Buriat; China" -msgstr "" +msgstr "Buriat; China" #. name for bxv msgid "Berakou" -msgstr "" +msgstr "Berakou" #. name for bxw msgid "Bankagooma" -msgstr "" +msgstr "Bankagooma" #. name for bxx msgid "Borna (Democratic Republic of Congo)" -msgstr "" +msgstr "Borna (Republik Democratik Congo)" #. name for bxz msgid "Binahari" -msgstr "" +msgstr "Binahari" #. name for bya msgid "Batak" -msgstr "" +msgstr "Batak" #. name for byb msgid "Bikya" -msgstr "" +msgstr "Bikya" #. name for byc msgid "Ubaghara" -msgstr "" +msgstr "Ubaghara" #. name for byd msgid "Benyadu'" -msgstr "" +msgstr "Benyadu'" #. name for bye msgid "Pouye" -msgstr "" +msgstr "Pouye" #. name for byf msgid "Bete" -msgstr "" +msgstr "Bete" #. name for byg msgid "Baygo" -msgstr "" +msgstr "Baygo" #. name for byh msgid "Bhujel" -msgstr "" +msgstr "Bhujel" #. name for byi msgid "Buyu" -msgstr "" +msgstr "Buyu" #. name for byj msgid "Bina (Nigeria)" -msgstr "" +msgstr "Bina (Nigeria)" #. name for byk msgid "Biao" -msgstr "" +msgstr "Biao" #. name for byl msgid "Bayono" -msgstr "" +msgstr "Bayono" #. name for bym msgid "Bidyara" -msgstr "" +msgstr "Bidyara" #. name for byn msgid "Bilin" -msgstr "" +msgstr "Bilin" #. name for byo msgid "Biyo" -msgstr "" +msgstr "Biyo" #. name for byp msgid "Bumaji" -msgstr "" +msgstr "Bumaji" #. name for byq msgid "Basay" -msgstr "" +msgstr "Basay" #. name for byr msgid "Baruya" -msgstr "" +msgstr "Baruya" #. name for bys msgid "Burak" -msgstr "" +msgstr "Burak" #. name for byt msgid "Berti" -msgstr "" +msgstr "Berti" #. name for byv msgid "Medumba" -msgstr "" +msgstr "Medumba" #. name for byw msgid "Belhariya" -msgstr "" +msgstr "Belhariya" #. name for byx msgid "Qaqet" -msgstr "" +msgstr "Qaqet" #. name for byy msgid "Buya" -msgstr "" +msgstr "Buya" #. name for byz msgid "Banaro" -msgstr "" +msgstr "Banaro" #. name for bza msgid "Bandi" -msgstr "" +msgstr "Bandi" #. name for bzb msgid "Andio" -msgstr "" +msgstr "Andio" #. name for bzc msgid "Malagasy; Southern Betsimisaraka" -msgstr "" +msgstr "Malagasy; Betsimisaraka Selatam" #. name for bzd msgid "Bribri" -msgstr "" +msgstr "Bribri" #. name for bze msgid "Bozo; Jenaama" -msgstr "" +msgstr "Bozo; Jenaama" #. name for bzf msgid "Boikin" -msgstr "" +msgstr "Boikin" #. name for bzg msgid "Babuza" -msgstr "" +msgstr "Babuza" #. name for bzh msgid "Buang; Mapos" -msgstr "" +msgstr "Buang; Mapos" #. name for bzi msgid "Bisu" -msgstr "" +msgstr "Bisu" #. name for bzj msgid "Kriol English; Belize" -msgstr "" +msgstr "Inggeris Kriol; Belize" #. name for bzk msgid "Creole English; Nicaragua" -msgstr "" +msgstr "Inggeris Creole, Nicaragua" #. name for bzl msgid "Boano (Sulawesi)" -msgstr "" +msgstr "Boano (Sulawesi)" #. name for bzm msgid "Bolondo" -msgstr "" +msgstr "Bolondo" #. name for bzn msgid "Boano (Maluku)" -msgstr "" +msgstr "Boano (Maluku)" #. name for bzo msgid "Bozaba" -msgstr "" +msgstr "Bozaba" #. name for bzp msgid "Kemberano" -msgstr "" +msgstr "Kemberano" #. name for bzq msgid "Buli (Indonesia)" -msgstr "" +msgstr "Buli (Indonesia)" #. name for bzr msgid "Biri" -msgstr "" +msgstr "Biri" #. name for bzs msgid "Brazilian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Brazil" #. name for bzt msgid "Brithenig" -msgstr "" +msgstr "Brithenig" #. name for bzu msgid "Burmeso" -msgstr "" +msgstr "Burmeso" #. name for bzv msgid "Bebe" -msgstr "" +msgstr "Bebe" #. name for bzw msgid "Basa (Nigeria)" -msgstr "" +msgstr "Basa (Nigeria)" #. name for bzx msgid "Bozo; Kɛlɛngaxo" -msgstr "" +msgstr "Bozo; Kɛlɛngaxo" #. name for bzy msgid "Obanliku" -msgstr "" +msgstr "Obanliku" #. name for bzz msgid "Evant" -msgstr "" +msgstr "Evant" #. name for caa msgid "Chortí" -msgstr "" +msgstr "Chortí" #. name for cab msgid "Garifuna" -msgstr "" +msgstr "Garifuna" #. name for cac msgid "Chuj" -msgstr "" +msgstr "Chuj" #. name for cad msgid "Caddo" -msgstr "" +msgstr "Caddo" #. name for cae msgid "Lehar" -msgstr "" +msgstr "Lehar" #. name for caf msgid "Carrier; Southern" -msgstr "" +msgstr "Carrier; Selatan" #. name for cag msgid "Nivaclé" -msgstr "" +msgstr "Nivaclé" #. name for cah msgid "Cahuarano" -msgstr "" +msgstr "Cahuarano" #. name for caj msgid "Chané" -msgstr "" +msgstr "Chané" #. name for cak msgid "Kaqchikel" -msgstr "" +msgstr "Kaqchikel" #. name for cal msgid "Carolinian" -msgstr "" +msgstr "Carolinia" #. name for cam msgid "Cemuhî" -msgstr "" +msgstr "Cemuhî" #. name for can msgid "Chambri" -msgstr "" +msgstr "Chambri" #. name for cao msgid "Chácobo" -msgstr "" +msgstr "Chácobo" #. name for cap msgid "Chipaya" -msgstr "" +msgstr "Chipaya" #. name for caq msgid "Nicobarese; Car" -msgstr "" +msgstr "Nicobar; Car" #. name for car msgid "Carib; Galibi" -msgstr "" +msgstr "Carib; Galibi" #. name for cas msgid "Tsimané" -msgstr "" +msgstr "Tsimané" #. name for cat msgid "Catalan" @@ -4694,223 +4694,223 @@ msgstr "Catalan" #. name for cav msgid "Cavineña" -msgstr "" +msgstr "Cavineña" #. name for caw msgid "Callawalla" -msgstr "" +msgstr "Callawalla" #. name for cax msgid "Chiquitano" -msgstr "" +msgstr "Chiquitano" #. name for cay msgid "Cayuga" -msgstr "" +msgstr "Cayuga" #. name for caz msgid "Canichana" -msgstr "" +msgstr "Canichana" #. name for cbb msgid "Cabiyarí" -msgstr "" +msgstr "Cabiyarí" #. name for cbc msgid "Carapana" -msgstr "" +msgstr "Carapana" #. name for cbd msgid "Carijona" -msgstr "" +msgstr "Carijona" #. name for cbe msgid "Chipiajes" -msgstr "" +msgstr "Chipiajes" #. name for cbg msgid "Chimila" -msgstr "" +msgstr "Chimila" #. name for cbh msgid "Cagua" -msgstr "" +msgstr "Cagua" #. name for cbi msgid "Chachi" -msgstr "" +msgstr "Chachi" #. name for cbj msgid "Ede Cabe" -msgstr "" +msgstr "Ede Cabe" #. name for cbk msgid "Chavacano" -msgstr "" +msgstr "Chavacano" #. name for cbl msgid "Chin; Bualkhaw" -msgstr "" +msgstr "Chin; Bualkhaw" #. name for cbn msgid "Nyahkur" -msgstr "" +msgstr "Nyahkur" #. name for cbo msgid "Izora" -msgstr "" +msgstr "Izora" #. name for cbr msgid "Cashibo-Cacataibo" -msgstr "" +msgstr "Cashibo-Cacataibo" #. name for cbs msgid "Cashinahua" -msgstr "" +msgstr "Cashinahua" #. name for cbt msgid "Chayahuita" -msgstr "" +msgstr "Chayahuita" #. name for cbu msgid "Candoshi-Shapra" -msgstr "" +msgstr "Candoshi-Shapra" #. name for cbv msgid "Cacua" -msgstr "" +msgstr "Cacua" #. name for cbw msgid "Kinabalian" -msgstr "" +msgstr "Kinabali" #. name for cby msgid "Carabayo" -msgstr "" +msgstr "Carabayo" #. name for cca msgid "Cauca" -msgstr "" +msgstr "Cauca" #. name for ccc msgid "Chamicuro" -msgstr "" +msgstr "Chamicuro" #. name for ccd msgid "Creole; Cafundo" -msgstr "" +msgstr "Creole; Cafundo" #. name for cce msgid "Chopi" -msgstr "" +msgstr "Chopi" #. name for ccg msgid "Daka; Samba" -msgstr "" +msgstr "Daka; Samba" #. name for cch msgid "Atsam" -msgstr "" +msgstr "Atsam" #. name for ccj msgid "Kasanga" -msgstr "" +msgstr "Kasanga" #. name for ccl msgid "Cutchi-Swahili" -msgstr "" +msgstr "Cutchi-Swahili" #. name for ccm msgid "Creole Malay; Malaccan" -msgstr "" +msgstr "Melayu Creole; Melaka" #. name for cco msgid "Chinantec; Comaltepec" -msgstr "" +msgstr "Chinantec; Comaltepec" #. name for ccp msgid "Chakma" -msgstr "" +msgstr "Chakma" #. name for ccq msgid "Chaungtha" -msgstr "" +msgstr "Chaungtha" #. name for ccr msgid "Cacaopera" -msgstr "" +msgstr "Cacaopera" #. name for cda msgid "Choni" -msgstr "" +msgstr "Choni" #. name for cde msgid "Chenchu" -msgstr "" +msgstr "Chenchu" #. name for cdf msgid "Chiru" -msgstr "" +msgstr "Chiru" #. name for cdg msgid "Chamari" -msgstr "" +msgstr "Chamari" #. name for cdh msgid "Chambeali" -msgstr "" +msgstr "Chambeali" #. name for cdi msgid "Chodri" -msgstr "" +msgstr "Chodri" #. name for cdj msgid "Churahi" -msgstr "" +msgstr "Churahi" #. name for cdm msgid "Chepang" -msgstr "" +msgstr "Chepang" #. name for cdn msgid "Chaudangsi" -msgstr "" +msgstr "Chaudangsi" #. name for cdo msgid "Chinese; Min Dong" -msgstr "" +msgstr "Cina; Min Dong" #. name for cdr msgid "Cinda-Regi-Tiyal" -msgstr "" +msgstr "Cinda-Regi-Tiyal" #. name for cds msgid "Chadian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Chadia" #. name for cdy msgid "Chadong" -msgstr "" +msgstr "Chadong" #. name for cdz msgid "Koda" -msgstr "" +msgstr "Koda" #. name for cea msgid "Chehalis; Lower" -msgstr "" +msgstr "Chehalis; Bawah" #. name for ceb msgid "Cebuano" -msgstr "" +msgstr "Cebuano" #. name for ceg msgid "Chamacoco" -msgstr "" +msgstr "Chamacoco" #. name for cen msgid "Cen" -msgstr "" +msgstr "Cen" #. name for ces msgid "Czech" @@ -4918,1019 +4918,1019 @@ msgstr "Czech" #. name for cet msgid "Centúúm" -msgstr "" +msgstr "Centúúm" #. name for cfa msgid "Dijim-Bwilim" -msgstr "" +msgstr "Dijim-Bwilim" #. name for cfd msgid "Cara" -msgstr "" +msgstr "Cara" #. name for cfg msgid "Como Karim" -msgstr "" +msgstr "Como Karim" #. name for cfm msgid "Chin; Falam" -msgstr "" +msgstr "Chin; Falam" #. name for cga msgid "Changriwa" -msgstr "" +msgstr "Changriwa" #. name for cgc msgid "Kagayanen" -msgstr "" +msgstr "Kagayanen" #. name for cgg msgid "Chiga" -msgstr "" +msgstr "Chiga" #. name for cgk msgid "Chocangacakha" -msgstr "" +msgstr "Chocangacakha" #. name for cha msgid "Chamorro" -msgstr "" +msgstr "Chamorro" #. name for chb msgid "Chibcha" -msgstr "" +msgstr "Chibcha" #. name for chc msgid "Catawba" -msgstr "" +msgstr "Catawba" #. name for chd msgid "Chontal; Highland Oaxaca" -msgstr "" +msgstr "Chontal; Oaxaca Tanah Tinggi" #. name for che msgid "Chechen" -msgstr "" +msgstr "Chechen" #. name for chf msgid "Chontal; Tabasco" -msgstr "" +msgstr "Chontal; Tabasco" #. name for chg msgid "Chagatai" -msgstr "" +msgstr "Chagatai" #. name for chh msgid "Chinook" -msgstr "" +msgstr "Chinook" #. name for chj msgid "Chinantec; Ojitlán" -msgstr "" +msgstr "Chinantec; Ojitlán" #. name for chk msgid "Chuukese" -msgstr "" +msgstr "Chuukese" #. name for chl msgid "Cahuilla" -msgstr "" +msgstr "Cahuilla" #. name for chm msgid "Mari (Russia)" -msgstr "" +msgstr "Mari (Rusia)" #. name for chn msgid "Chinook jargon" -msgstr "" +msgstr "Chinook jargon" #. name for cho msgid "Choctaw" -msgstr "" +msgstr "Choctaw" #. name for chp msgid "Chipewyan" -msgstr "" +msgstr "Chipewyan" #. name for chq msgid "Chinantec; Quiotepec" -msgstr "" +msgstr "Chinantec; Quiotepec" #. name for chr msgid "Cherokee" -msgstr "" +msgstr "Cherokee" #. name for cht msgid "Cholón" -msgstr "" +msgstr "Cholón" #. name for chu msgid "Slavonic; Old" -msgstr "" +msgstr "Slavonik; Lama" #. name for chv msgid "Chuvash" -msgstr "" +msgstr "Chuvash" #. name for chw msgid "Chuwabu" -msgstr "" +msgstr "Chuwabu" #. name for chx msgid "Chantyal" -msgstr "" +msgstr "Chantyal" #. name for chy msgid "Cheyenne" -msgstr "" +msgstr "Cheyenne" #. name for chz msgid "Chinantec; Ozumacín" -msgstr "" +msgstr "Chinantec; Ozumacín" #. name for cia msgid "Cia-Cia" -msgstr "" +msgstr "Cia-Cia" #. name for cib msgid "Gbe; Ci" -msgstr "" +msgstr "Gbe; Ci" #. name for cic msgid "Chickasaw" -msgstr "" +msgstr "Chickasaw" #. name for cid msgid "Chimariko" -msgstr "" +msgstr "Chimariko" #. name for cie msgid "Cineni" -msgstr "" +msgstr "Cineni" #. name for cih msgid "Chinali" -msgstr "" +msgstr "Chinali" #. name for cik msgid "Kinnauri; Chitkuli" -msgstr "" +msgstr "Kinnauri; Chitkuli" #. name for cim msgid "Cimbrian" -msgstr "" +msgstr "Cimbria" #. name for cin msgid "Cinta Larga" -msgstr "" +msgstr "Cinta Larga" #. name for cip msgid "Chiapanec" -msgstr "" +msgstr "Chiapanec" #. name for cir msgid "Tiri" -msgstr "" +msgstr "Tiri" #. name for ciw msgid "Chippewa" -msgstr "" +msgstr "Chippewa" #. name for ciy msgid "Chaima" -msgstr "" +msgstr "Chaima" #. name for cja msgid "Cham; Western" -msgstr "" +msgstr "Cham; Barat" #. name for cje msgid "Chru" -msgstr "" +msgstr "Chru" #. name for cjh msgid "Chehalis; Upper" -msgstr "" +msgstr "Chehalis; Atas" #. name for cji msgid "Chamalal" -msgstr "" +msgstr "Chamalal" #. name for cjk msgid "Chokwe" -msgstr "" +msgstr "Chokwe" #. name for cjm msgid "Cham; Eastern" -msgstr "" +msgstr "Cham; Timur" #. name for cjn msgid "Chenapian" -msgstr "" +msgstr "Chenapi" #. name for cjo msgid "Ashéninka Pajonal" -msgstr "" +msgstr "Ashéninka Pajonal" #. name for cjp msgid "Cabécar" -msgstr "" +msgstr "Cabécar" #. name for cjs msgid "Shor" -msgstr "" +msgstr "Shor" #. name for cjv msgid "Chuave" -msgstr "" +msgstr "Chuave" #. name for cjy msgid "Chinese; Jinyu" -msgstr "" +msgstr "Cina, Jinyu" #. name for cka msgid "Chin; Khumi Awa" -msgstr "" +msgstr "Chin; Khumi Awa" #. name for ckb msgid "Kurdish; Central" -msgstr "" +msgstr "Kurdis; Tengah" #. name for ckh msgid "Chak" -msgstr "" +msgstr "Chak" #. name for ckl msgid "Cibak" -msgstr "" +msgstr "Cibak" #. name for cko msgid "Anufo" -msgstr "" +msgstr "Anufo" #. name for ckq msgid "Kajakse" -msgstr "" +msgstr "Kajakse" #. name for ckr msgid "Kairak" -msgstr "" +msgstr "Kairak" #. name for cks msgid "Tayo" -msgstr "" +msgstr "Tayo" #. name for ckt msgid "Chukot" -msgstr "" +msgstr "Chukot" #. name for cku msgid "Koasati" -msgstr "" +msgstr "Koasati" #. name for ckv msgid "Kavalan" -msgstr "" +msgstr "Kavalan" #. name for ckx msgid "Caka" -msgstr "" +msgstr "Caka" #. name for cky msgid "Cakfem-Mushere" -msgstr "" +msgstr "Cakfem-Mushere" #. name for ckz msgid "Cakchiquel-Quiché Mixed Language" -msgstr "" +msgstr "Bahasa Campur Cakchiquel-Quiché" #. name for cla msgid "Ron" -msgstr "" +msgstr "Ron" #. name for clc msgid "Chilcotin" -msgstr "" +msgstr "Chilcotin" #. name for cld msgid "Neo-Aramaic; Chaldean" -msgstr "" +msgstr "Neo-Aramik; Kaldea" #. name for cle msgid "Chinantec; Lealao" -msgstr "" +msgstr "Chinantec; Lealao" #. name for clh msgid "Chilisso" -msgstr "" +msgstr "Chilisso" #. name for cli msgid "Chakali" -msgstr "" +msgstr "Chakali" #. name for clk msgid "Idu-Mishmi" -msgstr "" +msgstr "Idu-Mishmi" #. name for cll msgid "Chala" -msgstr "" +msgstr "Chala" #. name for clm msgid "Clallam" -msgstr "" +msgstr "Clallam" #. name for clo msgid "Chontal; Lowland Oaxaca" -msgstr "" +msgstr "Chontal; Oaxaca Tanah Rendah" #. name for clu msgid "Caluyanun" -msgstr "" +msgstr "Caluyanun" #. name for clw msgid "Chulym" -msgstr "" +msgstr "Chulym" #. name for cly msgid "Chatino; Eastern Highland" -msgstr "" +msgstr "Chatino; Tanah Tinggi Timur" #. name for cma msgid "Maa" -msgstr "" +msgstr "Maa" #. name for cme msgid "Cerma" -msgstr "" +msgstr "Cerma" #. name for cmg msgid "Mongolian; Classical" -msgstr "" +msgstr "Mongolia; Klasik" #. name for cmi msgid "Emberá-Chamí" -msgstr "" +msgstr "Emberá-Chamí" #. name for cml msgid "Campalagian" -msgstr "" +msgstr "Campalagian" #. name for cmm msgid "Michigamea" -msgstr "" +msgstr "Michigamea" #. name for cmn msgid "Chinese; Mandarin" -msgstr "" +msgstr "Cina; Mandarin" #. name for cmo msgid "Mnong; Central" -msgstr "" +msgstr "Mnong; Tengah" #. name for cmr msgid "Chin; Mro" -msgstr "" +msgstr "Chin; Mro" #. name for cms msgid "Messapic" -msgstr "" +msgstr "Messapic" #. name for cmt msgid "Camtho" -msgstr "" +msgstr "Camtho" #. name for cna msgid "Changthang" -msgstr "" +msgstr "Changthang" #. name for cnb msgid "Chin; Chinbon" -msgstr "" +msgstr "Chin; Chinbon" #. name for cnc msgid "Côông" -msgstr "" +msgstr "Côông" #. name for cng msgid "Qiang; Northern" -msgstr "" +msgstr "Qiang; Utara" #. name for cnh msgid "Chin; Haka" -msgstr "" +msgstr "Chin; Haka" #. name for cni msgid "Asháninka" -msgstr "" +msgstr "Asháninka" #. name for cnk msgid "Chin; Khumi" -msgstr "" +msgstr "Chin; Khumi" #. name for cnl msgid "Chinantec; Lalana" -msgstr "" +msgstr "Chinantec; Lalana" #. name for cno msgid "Con" -msgstr "" +msgstr "Con" #. name for cns msgid "Asmat; Central" -msgstr "" +msgstr "Asmat; Tengah" #. name for cnt msgid "Chinantec; Tepetotutla" -msgstr "" +msgstr "Chinantec; Tepetotutla" #. name for cnu msgid "Chenoua" -msgstr "" +msgstr "Chenoua" #. name for cnw msgid "Chin; Ngawn" -msgstr "" +msgstr "Chin; Ngawn" #. name for cnx msgid "Cornish; Middle" -msgstr "" +msgstr "Cornish; Tengah" #. name for coa msgid "Malay; Cocos Islands" -msgstr "" +msgstr "Melayu; Kepulauan Coco" #. name for cob msgid "Chicomuceltec" -msgstr "" +msgstr "Chicomuceltec" #. name for coc msgid "Cocopa" -msgstr "" +msgstr "Cocopa" #. name for cod msgid "Cocama-Cocamilla" -msgstr "" +msgstr "Cocama-Cocamilla" #. name for coe msgid "Koreguaje" -msgstr "" +msgstr "Koreguaje" #. name for cof msgid "Colorado" -msgstr "" +msgstr "Colorado" #. name for cog msgid "Chong" -msgstr "" +msgstr "Chong" #. name for coh msgid "Chonyi-Dzihana-Kauma" -msgstr "" +msgstr "Chonyi-Dzihana-Kauma" #. name for coj msgid "Cochimi" -msgstr "" +msgstr "Cochimi" #. name for cok msgid "Cora; Santa Teresa" -msgstr "" +msgstr "Cora; Santa Teresa" #. name for col msgid "Columbia-Wenatchi" -msgstr "" +msgstr "Columbia-Wenatchi" #. name for com msgid "Comanche" -msgstr "" +msgstr "Comanche" #. name for con msgid "Cofán" -msgstr "" +msgstr "Cofán" #. name for coo msgid "Comox" -msgstr "" +msgstr "Comox" #. name for cop msgid "Coptic" -msgstr "" +msgstr "Coptic" #. name for coq msgid "Coquille" -msgstr "" +msgstr "Coquille" #. name for cor msgid "Cornish" -msgstr "" +msgstr "Cornish" #. name for cos msgid "Corsican" -msgstr "" +msgstr "Corsica" #. name for cot msgid "Caquinte" -msgstr "" +msgstr "Caquinte" #. name for cou msgid "Wamey" -msgstr "" +msgstr "Wamey" #. name for cov msgid "Cao Miao" -msgstr "" +msgstr "Cao Miao" #. name for cow msgid "Cowlitz" -msgstr "" +msgstr "Cowlitz" #. name for cox msgid "Nanti" -msgstr "" +msgstr "Nanti" #. name for coy msgid "Coyaima" -msgstr "" +msgstr "Coyaima" #. name for coz msgid "Chochotec" -msgstr "" +msgstr "Chochotec" #. name for cpa msgid "Chinantec; Palantla" -msgstr "" +msgstr "Chinantec; Palantla" #. name for cpb msgid "Ashéninka; Ucayali-Yurúa" -msgstr "" +msgstr "Ashéninka; Ucayali-Yurúa" #. name for cpc msgid "Ajyíninka Apurucayali" -msgstr "" +msgstr "Ajyíninka Apurucayali" #. name for cpg msgid "Greek; Cappadocian" -msgstr "" +msgstr "]" #. name for cpi msgid "Pidgin English; Chinese" -msgstr "" +msgstr "Inggeris Pidgin; Cina" #. name for cpn msgid "Cherepon" -msgstr "" +msgstr "Cherepon" #. name for cps msgid "Capiznon" -msgstr "" +msgstr "Capiznon" #. name for cpu msgid "Ashéninka; Pichis" -msgstr "" +msgstr "Ashéninka; Pichis" #. name for cpx msgid "Chinese; Pu-Xian" -msgstr "" +msgstr "Cina; Pu-Xian" #. name for cpy msgid "Ashéninka; South Ucayali" -msgstr "" +msgstr "Ashéninka; Ucayali Selatan" #. name for cqd msgid "Miao; Chuanqiandian Cluster" -msgstr "" +msgstr "Miao; Kelompok Chuanqiandia" #. name for cqu msgid "Quechua; Chilean" -msgstr "" +msgstr "Quechua; Chile" #. name for cra msgid "Chara" -msgstr "" +msgstr "Chara" #. name for crb msgid "Carib; Island" -msgstr "" +msgstr "Carib; Pulau" #. name for crc msgid "Lonwolwol" -msgstr "" +msgstr "Lonwolwol" #. name for crd msgid "Coeur d'Alene" -msgstr "" +msgstr "Coeur d'Alene" #. name for cre msgid "Cree" -msgstr "" +msgstr "Cree" #. name for crf msgid "Caramanta" -msgstr "" +msgstr "Caramanta" #. name for crg msgid "Michif" -msgstr "" +msgstr "Michif" #. name for crh msgid "Turkish; Crimean" -msgstr "" +msgstr "Turki; Crimea" #. name for cri msgid "Sãotomense" -msgstr "" +msgstr "Sãotomense" #. name for crj msgid "Cree; Southern East" -msgstr "" +msgstr "Cree; Tenggara" #. name for crk msgid "Cree; Plains" -msgstr "" +msgstr "Cree; Tengah" #. name for crl msgid "Cree; Northern East" -msgstr "" +msgstr "Cree; Timur Laut" #. name for crm msgid "Cree; Moose" -msgstr "" +msgstr "Cree; Moose" #. name for crn msgid "Cora; El Nayar" -msgstr "" +msgstr "Cora; El Nayar" #. name for cro msgid "Crow" -msgstr "" +msgstr "Crow" #. name for crq msgid "Chorote; Iyo'wujwa" -msgstr "" +msgstr "Chorote; Iyo'wujwa" #. name for crr msgid "Algonquian; Carolina" -msgstr "" +msgstr "Algonqui; Carolina" #. name for crs msgid "Creole French; Seselwa" -msgstr "" +msgstr "Perancis Creole; Seselwa" #. name for crt msgid "Chorote; Iyojwa'ja" -msgstr "" +msgstr "Chorote; Iyojwa'ja" #. name for crv msgid "Chaura" -msgstr "" +msgstr "Chaura" #. name for crw msgid "Chrau" -msgstr "" +msgstr "Chrau" #. name for crx msgid "Carrier" -msgstr "" +msgstr "Carrier" #. name for cry msgid "Cori" -msgstr "" +msgstr "Cori" #. name for crz msgid "Cruzeño" -msgstr "" +msgstr "Cruzeño" #. name for csa msgid "Chinantec; Chiltepec" -msgstr "" +msgstr "Chinantec; Chiltepec" #. name for csb msgid "Kashubian" -msgstr "" +msgstr "Kashubian" #. name for csc msgid "Catalan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Catalan" #. name for csd msgid "Chiangmai Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Chiangmai" #. name for cse msgid "Czech Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Czech" #. name for csf msgid "Cuba Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Cuba" #. name for csg msgid "Chilean Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Chile" #. name for csh msgid "Chin; Asho" -msgstr "" +msgstr "Chin; Asho" #. name for csi msgid "Miwok; Coast" -msgstr "" +msgstr "Miwok; Pantai" #. name for csk msgid "Jola-Kasa" -msgstr "" +msgstr "Jola-Kasa" #. name for csl msgid "Chinese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Cina" #. name for csm msgid "Miwok; Central Sierra" -msgstr "" +msgstr "Miwok; Sierra Tengah" #. name for csn msgid "Colombian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Colombia" #. name for cso msgid "Chinantec; Sochiapan" -msgstr "" +msgstr "Chinantec; Sochiapan" #. name for csq msgid "Croatia Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Crotia" #. name for csr msgid "Costa Rican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Costa Rica" #. name for css msgid "Ohlone; Southern" -msgstr "" +msgstr "Ohlone; Selatan" #. name for cst msgid "Ohlone; Northern" -msgstr "" +msgstr "Ohlone; Utara" #. name for csw msgid "Cree; Swampy" -msgstr "" +msgstr "Cree; Swampy" #. name for csy msgid "Chin; Siyin" -msgstr "" +msgstr "Chin; Siyin" #. name for csz msgid "Coos" -msgstr "" +msgstr "Coos" #. name for cta msgid "Chatino; Tataltepec" -msgstr "" +msgstr "Chatino; Tataltepec" #. name for ctc msgid "Chetco" -msgstr "" +msgstr "Chetco" #. name for ctd msgid "Chin; Tedim" -msgstr "" +msgstr "Chin; Tedim" #. name for cte msgid "Chinantec; Tepinapa" -msgstr "" +msgstr "Chinantec; Tepinapa" #. name for ctg msgid "Chittagonian" -msgstr "" +msgstr "Chittagonian" #. name for ctl msgid "Chinantec; Tlacoatzintepec" -msgstr "" +msgstr "Chinantec; Tlacoatzintepec" #. name for ctm msgid "Chitimacha" -msgstr "" +msgstr "Chitimacha" #. name for ctn msgid "Chhintange" -msgstr "" +msgstr "Chhintange" #. name for cto msgid "Emberá-Catío" -msgstr "" +msgstr "Emberá-Catío" #. name for ctp msgid "Chatino; Western Highland" -msgstr "" +msgstr "Chatino; Tanah Tinggi Barat" #. name for cts msgid "Bicolano; Northern Catanduanes" -msgstr "" +msgstr "Bicolano; Catanduanes Utara" #. name for ctt msgid "Chetti; Wayanad" -msgstr "" +msgstr "Chetti; Wayanad" #. name for ctu msgid "Chol" -msgstr "" +msgstr "Chol" #. name for ctz msgid "Chatino; Zacatepec" -msgstr "" +msgstr "Chatino; Zacatepec" #. name for cua msgid "Cua" -msgstr "" +msgstr "Cua" #. name for cub msgid "Cubeo" -msgstr "" +msgstr "Cubeo" #. name for cuc msgid "Chinantec; Usila" -msgstr "" +msgstr "Chinantec; Usila" #. name for cug msgid "Cung" -msgstr "" +msgstr "Cung" #. name for cuh msgid "Chuka" -msgstr "" +msgstr "Chuka" #. name for cui msgid "Cuiba" -msgstr "" +msgstr "Cuiba" #. name for cuj msgid "Mashco Piro" -msgstr "" +msgstr "Mashco Piro" #. name for cuk msgid "Kuna; San Blas" -msgstr "" +msgstr "Kuna; San Blas" #. name for cul msgid "Culina" -msgstr "" +msgstr "Culina" #. name for cum msgid "Cumeral" -msgstr "" +msgstr "Cumeral" #. name for cuo msgid "Cumanagoto" -msgstr "" +msgstr "Cumanagoto" #. name for cup msgid "Cupeño" -msgstr "" +msgstr "Cupeño" #. name for cuq msgid "Cun" -msgstr "" +msgstr "Cun" #. name for cur msgid "Chhulung" -msgstr "" +msgstr "Chhulung" #. name for cut msgid "Cuicatec; Teutila" -msgstr "" +msgstr "Cuicatec; Teutila" #. name for cuu msgid "Tai Ya" -msgstr "" +msgstr "Tai Ya" #. name for cuv msgid "Cuvok" -msgstr "" +msgstr "Cuvok" #. name for cuw msgid "Chukwa" -msgstr "" +msgstr "Chukwa" #. name for cux msgid "Cuicatec; Tepeuxila" -msgstr "" +msgstr "Cuicatec; Tepeuxila" #. name for cvg msgid "Chug" -msgstr "" +msgstr "Chug" #. name for cvn msgid "Chinantec; Valle Nacional" -msgstr "" +msgstr "Chinantec; Valle Nacional" #. name for cwa msgid "Kabwa" -msgstr "" +msgstr "Kabwa" #. name for cwb msgid "Maindo" -msgstr "" +msgstr "Maindo" #. name for cwd msgid "Cree; Woods" -msgstr "" +msgstr "Cree; Woods" #. name for cwe msgid "Kwere" -msgstr "" +msgstr "Kwere" #. name for cwg msgid "Chewong" -msgstr "" +msgstr "Chewong" #. name for cwt msgid "Kuwaataay" -msgstr "" +msgstr "Kuwaataay" #. name for cya msgid "Chatino; Nopala" -msgstr "" +msgstr "Chatino; Nopala" #. name for cyb msgid "Cayubaba" -msgstr "" +msgstr "Cayubaba" #. name for cym msgid "Welsh" -msgstr "" +msgstr "Welsh" #. name for cyo msgid "Cuyonon" -msgstr "" +msgstr "Cuyonon" #. name for czh msgid "Chinese; Huizhou" -msgstr "" +msgstr "Cina; Huizhou" #. name for czk msgid "Knaanic" -msgstr "" +msgstr "Knaanic" #. name for czn msgid "Chatino; Zenzontepec" -msgstr "" +msgstr "Chatino; Zenzontepec" #. name for czo msgid "Chinese; Min Zhong" -msgstr "" +msgstr "China; Min Zhong" #. name for czt msgid "Chin; Zotung" -msgstr "" +msgstr "Chin; Zotung" #. name for daa msgid "Dangaléat" -msgstr "" +msgstr "Dangaléat" #. name for dac msgid "Dambi" -msgstr "" +msgstr "Dambi" #. name for dad msgid "Marik" -msgstr "" +msgstr "Marik" #. name for dae msgid "Duupa" -msgstr "" +msgstr "Duupa" #. name for daf msgid "Dan" -msgstr "" +msgstr "Dan" #. name for dag msgid "Dagbani" -msgstr "" +msgstr "Dagbani" #. name for dah msgid "Gwahatike" -msgstr "" +msgstr "Gwahatike" #. name for dai msgid "Day" -msgstr "" +msgstr "Day" #. name for daj msgid "Daju; Dar Fur" -msgstr "" +msgstr "Daju; Dar Fur" #. name for dak msgid "Dakota" -msgstr "" +msgstr "Dakota" #. name for dal msgid "Dahalo" -msgstr "" +msgstr "Dahalo" #. name for dam msgid "Damakawa" -msgstr "" +msgstr "Damakawa" #. name for dan msgid "Danish" @@ -5938,219 +5938,219 @@ msgstr "Danish" #. name for dao msgid "Chin; Daai" -msgstr "" +msgstr "Chin; Daai" #. name for dap msgid "Nisi (India)" -msgstr "" +msgstr "Nisi (India)" #. name for daq msgid "Maria; Dandami" -msgstr "" +msgstr "Maria; Dandami" #. name for dar msgid "Dargwa" -msgstr "" +msgstr "Dargwa" #. name for das msgid "Daho-Doo" -msgstr "" +msgstr "Daho-Doo" #. name for dau msgid "Daju; Dar Sila" -msgstr "" +msgstr "Daju; Dar Sila" #. name for dav msgid "Taita" -msgstr "" +msgstr "Taita" #. name for daw msgid "Davawenyo" -msgstr "" +msgstr "Davawenyo" #. name for dax msgid "Dayi" -msgstr "" +msgstr "Dayi" #. name for daz msgid "Dao" -msgstr "" +msgstr "Dao" #. name for dba msgid "Bangi Me" -msgstr "" +msgstr "Bangi Me" #. name for dbb msgid "Deno" -msgstr "" +msgstr "Deno" #. name for dbd msgid "Dadiya" -msgstr "" +msgstr "Dadiya" #. name for dbe msgid "Dabe" -msgstr "" +msgstr "Dabe" #. name for dbf msgid "Edopi" -msgstr "" +msgstr "Edopi" #. name for dbg msgid "Dogon; Dogul Dom" -msgstr "" +msgstr "Dogon; Dogul Dom" #. name for dbi msgid "Doka" -msgstr "" +msgstr "Doka" #. name for dbj msgid "Ida'an" -msgstr "" +msgstr "Ida'an" #. name for dbl msgid "Dyirbal" -msgstr "" +msgstr "Dyirbal" #. name for dbm msgid "Duguri" -msgstr "" +msgstr "Duguri" #. name for dbn msgid "Duriankere" -msgstr "" +msgstr "Duriankere" #. name for dbo msgid "Dulbu" -msgstr "" +msgstr "Dulbu" #. name for dbp msgid "Duwai" -msgstr "" +msgstr "Duwai" #. name for dbq msgid "Daba" -msgstr "" +msgstr "Daba" #. name for dbr msgid "Dabarre" -msgstr "" +msgstr "Dabarre" #. name for dbu msgid "Dogon; Bondum Dom" -msgstr "" +msgstr "Dogon; Bondum Dom" #. name for dbv msgid "Dungu" -msgstr "" +msgstr "Dungu" #. name for dby msgid "Dibiyaso" -msgstr "" +msgstr "Dibiyaso" #. name for dcc msgid "Deccan" -msgstr "" +msgstr "Deccan" #. name for dcr msgid "Negerhollands" -msgstr "" +msgstr "Negerhollands" #. name for ddd msgid "Dongotono" -msgstr "" +msgstr "Dongotono" #. name for dde msgid "Doondo" -msgstr "" +msgstr "Doondo" #. name for ddg msgid "Fataluku" -msgstr "" +msgstr "Fataluku" #. name for ddi msgid "Goodenough; West" -msgstr "" +msgstr "Goodenough; Barat" #. name for ddj msgid "Jaru" -msgstr "" +msgstr "Jaru" #. name for ddn msgid "Dendi (Benin)" -msgstr "" +msgstr "Dendi (Benin)" #. name for ddo msgid "Dido" -msgstr "" +msgstr "Dido" #. name for dds msgid "Dogon; Donno So" -msgstr "" +msgstr "Dogon; Donno So" #. name for ddw msgid "Dawera-Daweloor" -msgstr "" +msgstr "Dawera-Daweloor" #. name for dec msgid "Dagik" -msgstr "" +msgstr "Dagik" #. name for ded msgid "Dedua" -msgstr "" +msgstr "Dedua" #. name for dee msgid "Dewoin" -msgstr "" +msgstr "Dewoin" #. name for def msgid "Dezfuli" -msgstr "" +msgstr "Dezfuli" #. name for deg msgid "Degema" -msgstr "" +msgstr "Degema" #. name for deh msgid "Dehwari" -msgstr "" +msgstr "Dehwari" #. name for dei msgid "Demisa" -msgstr "" +msgstr "Demisa" #. name for dek msgid "Dek" -msgstr "" +msgstr "Dek" #. name for del msgid "Delaware" -msgstr "" +msgstr "Delaware" #. name for dem msgid "Dem" -msgstr "" +msgstr "Dem" #. name for den msgid "Slave (Athapascan)" -msgstr "" +msgstr "Slave (Athapascan)" #. name for dep msgid "Delaware; Pidgin" -msgstr "" +msgstr "Delaware; Pidgin" #. name for deq msgid "Dendi (Central African Republic)" -msgstr "" +msgstr "Dendi (Republik Afrika Tengah)" #. name for der msgid "Deori" -msgstr "" +msgstr "Deori" #. name for des msgid "Desano" -msgstr "" +msgstr "Desano" # ui/galeon.glade.h:153 #. name for deu @@ -6159,1083 +6159,1083 @@ msgstr "German" #. name for dev msgid "Domung" -msgstr "" +msgstr "Domung" #. name for dez msgid "Dengese" -msgstr "" +msgstr "Dengese" #. name for dga msgid "Dagaare; Southern" -msgstr "" +msgstr "Dagaare; Selatan" #. name for dgb msgid "Dogon; Bunoge" -msgstr "" +msgstr "Dogon; Bunoge" #. name for dgc msgid "Agta; Casiguran Dumagat" -msgstr "" +msgstr "Agta; Casiguran Dumagat" #. name for dgd msgid "Dagaari Dioula" -msgstr "" +msgstr "Dagaari Dioula" #. name for dge msgid "Degenan" -msgstr "" +msgstr "Degenan" #. name for dgg msgid "Doga" -msgstr "" +msgstr "Doga" #. name for dgh msgid "Dghwede" -msgstr "" +msgstr "Dghwede" #. name for dgi msgid "Dagara; Northern" -msgstr "" +msgstr "Dagara; Utara" #. name for dgk msgid "Dagba" -msgstr "" +msgstr "Dagba" #. name for dgn msgid "Dagoman" -msgstr "" +msgstr "Dagoman" #. name for dgo msgid "Dogri (individual language)" -msgstr "" +msgstr "Dogri (bahasa individu)" #. name for dgr msgid "Dogrib" -msgstr "" +msgstr "Dogrib" #. name for dgs msgid "Dogoso" -msgstr "" +msgstr "Dogoso" #. name for dgu msgid "Degaru" -msgstr "" +msgstr "Degaru" #. name for dgx msgid "Doghoro" -msgstr "" +msgstr "Doghoro" #. name for dgz msgid "Daga" -msgstr "" +msgstr "Daga" #. name for dhd msgid "Dhundari" -msgstr "" +msgstr "Dhundari" #. name for dhg msgid "Dhangu" -msgstr "" +msgstr "Dhangu" #. name for dhi msgid "Dhimal" -msgstr "" +msgstr "Dhimal" #. name for dhl msgid "Dhalandji" -msgstr "" +msgstr "Dhalandji" #. name for dhm msgid "Zemba" -msgstr "" +msgstr "Zemba" #. name for dhn msgid "Dhanki" -msgstr "" +msgstr "Dhanki" #. name for dho msgid "Dhodia" -msgstr "" +msgstr "Dhodia" #. name for dhr msgid "Dhargari" -msgstr "" +msgstr "Dhargari" #. name for dhs msgid "Dhaiso" -msgstr "" +msgstr "Dhaiso" #. name for dhu msgid "Dhurga" -msgstr "" +msgstr "Dhurga" #. name for dhv msgid "Dehu" -msgstr "" +msgstr "Dehu" #. name for dhw msgid "Dhanwar (Nepal)" -msgstr "" +msgstr "Dhanwar (Nepal)" #. name for dia msgid "Dia" -msgstr "" +msgstr "Dia" #. name for dib msgid "Dinka; South Central" -msgstr "" +msgstr "Dinka; Tengah Selatan" #. name for dic msgid "Dida; Lakota" -msgstr "" +msgstr "Dida; Lakota" #. name for did msgid "Didinga" -msgstr "" +msgstr "Didinga" #. name for dif msgid "Dieri" -msgstr "" +msgstr "Dieri" #. name for dig msgid "Digo" -msgstr "" +msgstr "Digo" #. name for dih msgid "Kumiai" -msgstr "" +msgstr "Kumiai" #. name for dii msgid "Dimbong" -msgstr "" +msgstr "Dimbong" #. name for dij msgid "Dai" -msgstr "" +msgstr "Dai" #. name for dik msgid "Dinka; Southwestern" -msgstr "" +msgstr "Dinka; Barat Laut" #. name for dil msgid "Dilling" -msgstr "" +msgstr "Dilling" #. name for dim msgid "Dime" -msgstr "" +msgstr "Dime" #. name for din msgid "Dinka" -msgstr "" +msgstr "Dinka" #. name for dio msgid "Dibo" -msgstr "" +msgstr "Dibo" #. name for dip msgid "Dinka; Northeastern" -msgstr "" +msgstr "Dinka; Timur Laut" #. name for diq msgid "Dimli (individual language)" -msgstr "" +msgstr "Dimli (bahasa individu)" #. name for dir msgid "Dirim" -msgstr "" +msgstr "Dirim" #. name for dis msgid "Dimasa" -msgstr "" +msgstr "Dimasa" #. name for dit msgid "Dirari" -msgstr "" +msgstr "Dirari" #. name for diu msgid "Diriku" -msgstr "" +msgstr "Diriku" #. name for div msgid "Dhivehi" -msgstr "" +msgstr "Dhivehi" #. name for diw msgid "Dinka; Northwestern" -msgstr "" +msgstr "Dinka; Barat Laut" #. name for dix msgid "Dixon Reef" -msgstr "" +msgstr "Dixon Reef" #. name for diy msgid "Diuwe" -msgstr "" +msgstr "Diuwe" #. name for diz msgid "Ding" -msgstr "" +msgstr "Ding" #. name for djb msgid "Djinba" -msgstr "" +msgstr "Djinba" #. name for djc msgid "Daju; Dar Daju" -msgstr "" +msgstr "Daju; Dar Daju" #. name for djd msgid "Djamindjung" -msgstr "" +msgstr "Djamindjung" #. name for dje msgid "Zarma" -msgstr "" +msgstr "Zarma" #. name for djf msgid "Djangun" -msgstr "" +msgstr "Djangun" #. name for dji msgid "Djinang" -msgstr "" +msgstr "Djinang" #. name for djj msgid "Djeebbana" -msgstr "" +msgstr "Djeebbana" #. name for djk msgid "Eastern Maroon Creole" -msgstr "" +msgstr "Creole Maroon Timur" #. name for djl msgid "Djiwarli" -msgstr "" +msgstr "Djiwarli" #. name for djm msgid "Dogon; Jamsay" -msgstr "" +msgstr "Dogon; Jamsay" #. name for djn msgid "Djauan" -msgstr "" +msgstr "Djauan" #. name for djo msgid "Jangkang" -msgstr "" +msgstr "Jangkang" #. name for djr msgid "Djambarrpuyngu" -msgstr "" +msgstr "Djambarrpuyngu" #. name for dju msgid "Kapriman" -msgstr "" +msgstr "Kapriman" #. name for djw msgid "Djawi" -msgstr "" +msgstr "Djawi" #. name for dka msgid "Dakpakha" -msgstr "" +msgstr "Dakpakha" #. name for dkk msgid "Dakka" -msgstr "" +msgstr "Dakka" #. name for dkr msgid "Kuijau" -msgstr "" +msgstr "Kuijau" #. name for dks msgid "Dinka; Southeastern" -msgstr "" +msgstr "Dinka; Tenggara" #. name for dkx msgid "Mazagway" -msgstr "" +msgstr "Mazagway" #. name for dlg msgid "Dolgan" -msgstr "" +msgstr "Dolgan" #. name for dlm msgid "Dalmatian" -msgstr "" +msgstr "Dalmatia" #. name for dln msgid "Darlong" -msgstr "" +msgstr "Darlong" #. name for dma msgid "Duma" -msgstr "" +msgstr "Duma" #. name for dmb msgid "Dogon; Mombo" -msgstr "" +msgstr "Dogon; Mombo" #. name for dmc msgid "Dimir" -msgstr "" +msgstr "Dimir" #. name for dme msgid "Dugwor" -msgstr "" +msgstr "Dugwor" #. name for dmg msgid "Kinabatangan; Upper" -msgstr "" +msgstr "Kinabatangan; Upper" #. name for dmk msgid "Domaaki" -msgstr "" +msgstr "Domaaki" #. name for dml msgid "Dameli" -msgstr "" +msgstr "Dameli" #. name for dmm msgid "Dama" -msgstr "" +msgstr "Dama" #. name for dmo msgid "Kemezung" -msgstr "" +msgstr "Kemezung" #. name for dmr msgid "Damar; East" -msgstr "" +msgstr "Damar; Timur" #. name for dms msgid "Dampelas" -msgstr "" +msgstr "Dampelas" #. name for dmu msgid "Dubu" -msgstr "" +msgstr "Dubu" #. name for dmv msgid "Dumpas" -msgstr "" +msgstr "Dumpas" #. name for dmx msgid "Dema" -msgstr "" +msgstr "Dema" #. name for dmy msgid "Demta" -msgstr "" +msgstr "Demta" #. name for dna msgid "Dani; Upper Grand Valley" -msgstr "" +msgstr "Dani; Grand Valley Atas" #. name for dnd msgid "Daonda" -msgstr "" +msgstr "Daonda" #. name for dne msgid "Ndendeule" -msgstr "" +msgstr "Ndendeule" #. name for dng msgid "Dungan" -msgstr "" +msgstr "Dungan" #. name for dni msgid "Dani; Lower Grand Valley" -msgstr "" +msgstr "Dani; Grand Valley Bawah" #. name for dnk msgid "Dengka" -msgstr "" +msgstr "Dengka" #. name for dnn msgid "Dzùùngoo" -msgstr "" +msgstr "Dzùùngoo" #. name for dnr msgid "Danaru" -msgstr "" +msgstr "Danaru" #. name for dnt msgid "Dani; Mid Grand Valley" -msgstr "" +msgstr "Dani; Grand Valley Tengah" #. name for dnu msgid "Danau" -msgstr "" +msgstr "Danau" #. name for dnw msgid "Dani; Western" -msgstr "" +msgstr "Dani; Barat" #. name for dny msgid "Dení" -msgstr "" +msgstr "Dení" #. name for doa msgid "Dom" -msgstr "" +msgstr "Dom" #. name for dob msgid "Dobu" -msgstr "" +msgstr "Dobu" #. name for doc msgid "Dong; Northern" -msgstr "" +msgstr "Dong; Utara" #. name for doe msgid "Doe" -msgstr "" +msgstr "Doe" #. name for dof msgid "Domu" -msgstr "" +msgstr "Domu" #. name for doh msgid "Dong" -msgstr "" +msgstr "Dong" #. name for doi msgid "Dogri (macrolanguage)" -msgstr "" +msgstr "Dogri (macrolanguage)" #. name for dok msgid "Dondo" -msgstr "" +msgstr "Dondo" #. name for dol msgid "Doso" -msgstr "" +msgstr "Doso" #. name for don msgid "Toura (Papua New Guinea)" -msgstr "" +msgstr "Toura (Papua New Guinea)" #. name for doo msgid "Dongo" -msgstr "" +msgstr "Dongo" #. name for dop msgid "Lukpa" -msgstr "" +msgstr "Lukpa" #. name for doq msgid "Dominican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Dominica" #. name for dor msgid "Dori'o" -msgstr "" +msgstr "Dori'o" #. name for dos msgid "Dogosé" -msgstr "" +msgstr "Dogosé" #. name for dot msgid "Dass" -msgstr "" +msgstr "Dass" #. name for dov msgid "Dombe" -msgstr "" +msgstr "Dombe" #. name for dow msgid "Doyayo" -msgstr "" +msgstr "Doyayo" #. name for dox msgid "Bussa" -msgstr "" +msgstr "Bussa" #. name for doy msgid "Dompo" -msgstr "" +msgstr "Dompo" #. name for doz msgid "Dorze" -msgstr "" +msgstr "Dorze" #. name for dpp msgid "Papar" -msgstr "" +msgstr "Papar" #. name for drb msgid "Dair" -msgstr "" +msgstr "Dair" #. name for drc msgid "Minderico" -msgstr "" +msgstr "Minderico" #. name for drd msgid "Darmiya" -msgstr "" +msgstr "Darmiya" #. name for dre msgid "Dolpo" -msgstr "" +msgstr "Dolpo" #. name for drg msgid "Rungus" -msgstr "" +msgstr "Rungus" #. name for dri msgid "C'lela" -msgstr "" +msgstr "C'lela" #. name for drl msgid "Darling" -msgstr "" +msgstr "Darling" #. name for drn msgid "Damar; West" -msgstr "" +msgstr "Damar; Barat" #. name for dro msgid "Melanau; Daro-Matu" -msgstr "" +msgstr "Melanau; Daro-Matu" #. name for drq msgid "Dura" -msgstr "" +msgstr "Dura" #. name for drr msgid "Dororo" -msgstr "" +msgstr "Dororo" #. name for drs msgid "Gedeo" -msgstr "" +msgstr "Gedeo" #. name for drt msgid "Drents" -msgstr "" +msgstr "Drents" #. name for dru msgid "Rukai" -msgstr "" +msgstr "Rukai" #. name for dry msgid "Darai" -msgstr "" +msgstr "Darai" #. name for dsb msgid "Sorbian; Lower" -msgstr "" +msgstr "Sorbi; Bawah" #. name for dse msgid "Dutch Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Belanda" #. name for dsh msgid "Daasanach" -msgstr "" +msgstr "Daasanach" #. name for dsi msgid "Disa" -msgstr "" +msgstr "Disa" #. name for dsl msgid "Danish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Denmark" #. name for dsn msgid "Dusner" -msgstr "" +msgstr "Dusner" #. name for dso msgid "Desiya" -msgstr "" +msgstr "Desiya" #. name for dsq msgid "Tadaksahak" -msgstr "" +msgstr "Tadaksahak" #. name for dta msgid "Daur" -msgstr "" +msgstr "Daur" #. name for dtb msgid "Kadazan; Labuk-Kinabatangan" -msgstr "" +msgstr "Kadazan; Labuk-Kinabatangan" #. name for dtd msgid "Ditidaht" -msgstr "" +msgstr "Ditidaht" #. name for dti msgid "Dogon; Ana Tinga" -msgstr "" +msgstr "Dogon; Ana Tinga" #. name for dtk msgid "Dogon; Tene Kan" -msgstr "" +msgstr "Dogon; Tene Kan" #. name for dtm msgid "Dogon; Tomo Kan" -msgstr "" +msgstr "Dogon; Tomo Kan" #. name for dtp msgid "Dusun; Central" -msgstr "" +msgstr "Dusun; Tengah" #. name for dtr msgid "Lotud" -msgstr "" +msgstr "Lotud" #. name for dts msgid "Dogon; Toro So" -msgstr "" +msgstr "Dogon; Toro So" #. name for dtt msgid "Dogon; Toro Tegu" -msgstr "" +msgstr "Dogon; Toro Tegu" #. name for dtu msgid "Dogon; Tebul Ure" -msgstr "" +msgstr "Dogon; Tebul Ure" #. name for dua msgid "Duala" -msgstr "" +msgstr "Duala" #. name for dub msgid "Dubli" -msgstr "" +msgstr "Dubli" #. name for duc msgid "Duna" -msgstr "" +msgstr "Duna" #. name for dud msgid "Hun-Saare" -msgstr "" +msgstr "Hun-Saare" #. name for due msgid "Agta; Umiray Dumaget" -msgstr "" +msgstr "Agta; Umiray Dumaget" #. name for duf msgid "Dumbea" -msgstr "" +msgstr "Dumbea" #. name for dug msgid "Duruma" -msgstr "" +msgstr "Duruma" #. name for duh msgid "Dungra Bhil" -msgstr "" +msgstr "Dungra Bhil" #. name for dui msgid "Dumun" -msgstr "" +msgstr "Dumun" #. name for duj msgid "Dhuwal" -msgstr "" +msgstr "Dhuwal" #. name for duk msgid "Uyajitaya" -msgstr "" +msgstr "Uyajitaya" #. name for dul msgid "Agta; Alabat Island" -msgstr "" +msgstr "Agta; Pulau Alabat" #. name for dum msgid "Dutch; Middle (ca. 1050-1350)" -msgstr "" +msgstr "Belanda; Tengah (seb. M 1050-1350)" #. name for dun msgid "Dusun Deyah" -msgstr "" +msgstr "Dusun Deyah" #. name for duo msgid "Agta; Dupaninan" -msgstr "" +msgstr "Agta; Dupaninan" #. name for dup msgid "Duano" -msgstr "" +msgstr "Duano" #. name for duq msgid "Dusun Malang" -msgstr "" +msgstr "Dusun Malang" #. name for dur msgid "Dii" -msgstr "" +msgstr "Dii" #. name for dus msgid "Dumi" -msgstr "" +msgstr "Dumi" #. name for duu msgid "Drung" -msgstr "" +msgstr "Drung" #. name for duv msgid "Duvle" -msgstr "" +msgstr "Duvle" #. name for duw msgid "Dusun Witu" -msgstr "" +msgstr "Dusun Witu" #. name for dux msgid "Duungooma" -msgstr "" +msgstr "Duungooma" #. name for duy msgid "Agta; Dicamay" -msgstr "" +msgstr "Agta; Dicamay" #. name for duz msgid "Duli" -msgstr "" +msgstr "Duli" #. name for dva msgid "Duau" -msgstr "" +msgstr "Duau" #. name for dwa msgid "Diri" -msgstr "" +msgstr "Diri" #. name for dwl msgid "Dogon; Walo Kumbe" -msgstr "" +msgstr "Dogon; Walo Kumbe" #. name for dwr msgid "Dawro" -msgstr "" +msgstr "Dawro" #. name for dws msgid "Dutton World Speedwords" -msgstr "" +msgstr "Dutton World Speedwords" #. name for dww msgid "Dawawa" -msgstr "" +msgstr "Dawawa" #. name for dya msgid "Dyan" -msgstr "" +msgstr "Dyan" #. name for dyb msgid "Dyaberdyaber" -msgstr "" +msgstr "Dyaberdyaber" #. name for dyd msgid "Dyugun" -msgstr "" +msgstr "Dyugun" #. name for dyg msgid "Agta; Villa Viciosa" -msgstr "" +msgstr "Agta; Villa Viciosa" #. name for dyi msgid "Senoufo; Djimini" -msgstr "" +msgstr "Senoufo; Djimini" #. name for dym msgid "Dogon; Yanda Dom" -msgstr "" +msgstr "Dogon; Yanda Dom" #. name for dyn msgid "Dyangadi" -msgstr "" +msgstr "Dyangadi" #. name for dyo msgid "Jola-Fonyi" -msgstr "" +msgstr "Jola-Fonyi" #. name for dyu msgid "Dyula" -msgstr "" +msgstr "Dyula" #. name for dyy msgid "Dyaabugay" -msgstr "" +msgstr "Dyaabugay" #. name for dza msgid "Tunzu" -msgstr "" +msgstr "Tunzu" #. name for dzd msgid "Daza" -msgstr "" +msgstr "Daza" #. name for dzg msgid "Dazaga" -msgstr "" +msgstr "Dazaga" #. name for dzl msgid "Dzalakha" -msgstr "" +msgstr "Dzalakha" #. name for dzn msgid "Dzando" -msgstr "" +msgstr "Dzando" #. name for dzo msgid "Dzongkha" -msgstr "" +msgstr "Dzongkha" #. name for ebg msgid "Ebughu" -msgstr "" +msgstr "Ebughu" #. name for ebk msgid "Bontok; Eastern" -msgstr "" +msgstr "Bontok; Timur" #. name for ebo msgid "Teke-Ebo" -msgstr "" +msgstr "Teke-Ebo" #. name for ebr msgid "Ebrié" -msgstr "" +msgstr "Ebrié" #. name for ebu msgid "Embu" -msgstr "" +msgstr "Embu" #. name for ecr msgid "Eteocretan" -msgstr "" +msgstr "Eteocretan" #. name for ecs msgid "Ecuadorian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Ecuador" #. name for ecy msgid "Eteocypriot" -msgstr "" +msgstr "Eteocypriot" #. name for eee msgid "E" -msgstr "" +msgstr "E" #. name for efa msgid "Efai" -msgstr "" +msgstr "Efai" #. name for efe msgid "Efe" -msgstr "" +msgstr "Efe" #. name for efi msgid "Efik" -msgstr "" +msgstr "Efik" #. name for ega msgid "Ega" -msgstr "" +msgstr "Ega" #. name for egl msgid "Emilian" -msgstr "" +msgstr "Emilian" #. name for ego msgid "Eggon" -msgstr "" +msgstr "Eggon" #. name for egy msgid "Egyptian (Ancient)" -msgstr "" +msgstr "Mesir (Purba)" #. name for ehu msgid "Ehueun" -msgstr "" +msgstr "Ehueun" #. name for eip msgid "Eipomek" -msgstr "" +msgstr "Eipomek" #. name for eit msgid "Eitiep" -msgstr "" +msgstr "Eitiep" #. name for eiv msgid "Askopan" -msgstr "" +msgstr "Askopan" #. name for eja msgid "Ejamat" -msgstr "" +msgstr "Ejamat" #. name for eka msgid "Ekajuk" -msgstr "" +msgstr "Ekajuk" #. name for eke msgid "Ekit" -msgstr "" +msgstr "Ekit" #. name for ekg msgid "Ekari" -msgstr "" +msgstr "Ekari" #. name for eki msgid "Eki" -msgstr "" +msgstr "Eki" #. name for ekk msgid "Estonian; Standard" -msgstr "" +msgstr "Estonia; Piawai" #. name for ekl msgid "Kol" -msgstr "" +msgstr "Kol" #. name for ekm msgid "Elip" -msgstr "" +msgstr "Elip" #. name for eko msgid "Koti" -msgstr "" +msgstr "Koti" #. name for ekp msgid "Ekpeye" -msgstr "" +msgstr "Ekpeye" #. name for ekr msgid "Yace" -msgstr "" +msgstr "Yace" #. name for eky msgid "Kayah; Eastern" -msgstr "" +msgstr "Kayah; Timur" #. name for ele msgid "Elepi" -msgstr "" +msgstr "Elepi" #. name for elh msgid "El Hugeirat" -msgstr "" +msgstr "El Hugeirat" #. name for eli msgid "Nding" -msgstr "" +msgstr "Nding" #. name for elk msgid "Elkei" -msgstr "" +msgstr "Elkei" #. name for ell msgid "Greek; Modern (1453-)" -msgstr "" +msgstr "Yunani; Modern (1453-)" #. name for elm msgid "Eleme" -msgstr "" +msgstr "Eleme" #. name for elo msgid "El Molo" -msgstr "" +msgstr "El Molo" #. name for elp msgid "Elpaputih" -msgstr "" +msgstr "Elpaputih" #. name for elu msgid "Elu" -msgstr "" +msgstr "Elu" #. name for elx msgid "Elamite" -msgstr "" +msgstr "Elamit" #. name for ema msgid "Emai-Iuleha-Ora" -msgstr "" +msgstr "Emai-Iuleha-Ora" #. name for emb msgid "Embaloh" -msgstr "" +msgstr "Embaloh" #. name for eme msgid "Emerillon" -msgstr "" +msgstr "Emerillon" #. name for emg msgid "Meohang; Eastern" -msgstr "" +msgstr "Meohang; Timur" #. name for emi msgid "Mussau-Emira" -msgstr "" +msgstr "Mussau-Emira" #. name for emk msgid "Maninkakan; Eastern" -msgstr "" +msgstr "Maninkakan; Timur" #. name for emm msgid "Mamulique" -msgstr "" +msgstr "Mamulique" #. name for emn msgid "Eman" -msgstr "" +msgstr "Eman" #. name for emo msgid "Emok" -msgstr "" +msgstr "Emok" #. name for emp msgid "Emberá; Northern" -msgstr "" +msgstr "Emberá; Utara" #. name for ems msgid "Yupik; Pacific Gulf" -msgstr "" +msgstr "Yupik; Teluk Pasifik" #. name for emu msgid "Muria; Eastern" -msgstr "" +msgstr "Muria; Timur" #. name for emw msgid "Emplawas" -msgstr "" +msgstr "Emplawas" #. name for emx msgid "Erromintxela" -msgstr "" +msgstr "Erromintxela" #. name for emy msgid "Mayan; Epigraphic" -msgstr "" +msgstr "Maya; Epigraphik" #. name for ena msgid "Apali" -msgstr "" +msgstr "Apali" #. name for enb msgid "Markweeta" -msgstr "" +msgstr "Markweeta" #. name for enc msgid "En" -msgstr "" +msgstr "En" #. name for end msgid "Ende" -msgstr "" +msgstr "Ende" #. name for enf msgid "Enets; Forest" -msgstr "" +msgstr "Enets; Hutan" #. name for eng msgid "English" @@ -7243,47 +7243,47 @@ msgstr "English" #. name for enh msgid "Enets; Tundra" -msgstr "" +msgstr "Enets; Tundra" #. name for enm msgid "English; Middle (1100-1500)" -msgstr "" +msgstr "Inggeris; Pertengahan (1100-1500)" #. name for enn msgid "Engenni" -msgstr "" +msgstr "Engenni" #. name for eno msgid "Enggano" -msgstr "" +msgstr "Enggano" #. name for enq msgid "Enga" -msgstr "" +msgstr "Enga" #. name for enr msgid "Emumu" -msgstr "" +msgstr "Emumu" #. name for enu msgid "Enu" -msgstr "" +msgstr "Enu" #. name for env msgid "Enwan (Edu State)" -msgstr "" +msgstr "Enwan (Negeri Edu)" #. name for enw msgid "Enwan (Akwa Ibom State)" -msgstr "" +msgstr "Enwan (Negeri Akwa Ibom)" #. name for eot msgid "Beti (Côte d'Ivoire)" -msgstr "" +msgstr "Beti (Côte d'Ivoire)" #. name for epi msgid "Epie" -msgstr "" +msgstr "Epie" # ui/galeon.glade.h:153 #. name for epo @@ -7292,83 +7292,83 @@ msgstr "Esperanto" #. name for era msgid "Eravallan" -msgstr "" +msgstr "Eravallan" #. name for erg msgid "Sie" -msgstr "" +msgstr "Sie" #. name for erh msgid "Eruwa" -msgstr "" +msgstr "Eruwa" #. name for eri msgid "Ogea" -msgstr "" +msgstr "Ogea" #. name for erk msgid "Efate; South" -msgstr "" +msgstr "Efate; Selatan" #. name for ero msgid "Horpa" -msgstr "" +msgstr "Horpa" #. name for err msgid "Erre" -msgstr "" +msgstr "Erre" #. name for ers msgid "Ersu" -msgstr "" +msgstr "Ersu" #. name for ert msgid "Eritai" -msgstr "" +msgstr "Eritai" #. name for erw msgid "Erokwanas" -msgstr "" +msgstr "Erokwanas" #. name for ese msgid "Ese Ejja" -msgstr "" +msgstr "Ese Ejja" #. name for esh msgid "Eshtehardi" -msgstr "" +msgstr "Eshtehardi" #. name for esi msgid "Inupiatun; North Alaskan" -msgstr "" +msgstr "Inupiatun; Alaska Utara" #. name for esk msgid "Inupiatun; Northwest Alaska" -msgstr "" +msgstr "Inupiatun; Alaska Barat Laut" #. name for esl msgid "Egypt Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mesir" #. name for esm msgid "Esuma" -msgstr "" +msgstr "Esuma" #. name for esn msgid "Salvadoran Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Salvador" #. name for eso msgid "Estonian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Estonia" #. name for esq msgid "Esselen" -msgstr "" +msgstr "Esselen" #. name for ess msgid "Yupik; Central Siberian" -msgstr "" +msgstr "Yupik; Siberia Tengah" #. name for est msgid "Estonian" @@ -7376,51 +7376,51 @@ msgstr "Estonian" #. name for esu msgid "Yupik; Central" -msgstr "" +msgstr "Yupik; Tengah" #. name for etb msgid "Etebi" -msgstr "" +msgstr "Etebi" #. name for etc msgid "Etchemin" -msgstr "" +msgstr "Etchemin" #. name for eth msgid "Ethiopian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Habsyi" #. name for etn msgid "Eton (Vanuatu)" -msgstr "" +msgstr "Eton (Vanuatu)" #. name for eto msgid "Eton (Cameroon)" -msgstr "" +msgstr "Eton (Cameroon)" #. name for etr msgid "Edolo" -msgstr "" +msgstr "Edolo" #. name for ets msgid "Yekhee" -msgstr "" +msgstr "Yekhee" #. name for ett msgid "Etruscan" -msgstr "" +msgstr "Etruscan" #. name for etu msgid "Ejagham" -msgstr "" +msgstr "Ejagham" #. name for etx msgid "Eten" -msgstr "" +msgstr "Eten" #. name for etz msgid "Semimi" -msgstr "" +msgstr "Semimi" #. name for eus msgid "Basque" @@ -7428,87 +7428,87 @@ msgstr "Basque" #. name for eve msgid "Even" -msgstr "" +msgstr "Even" #. name for evh msgid "Uvbie" -msgstr "" +msgstr "Uvbie" #. name for evn msgid "Evenki" -msgstr "" +msgstr "Evenki" #. name for ewe msgid "Ewe" -msgstr "" +msgstr "Ewe" #. name for ewo msgid "Ewondo" -msgstr "" +msgstr "Ewondo" #. name for ext msgid "Extremaduran" -msgstr "" +msgstr "Extremaduran" #. name for eya msgid "Eyak" -msgstr "" +msgstr "Eyak" #. name for eyo msgid "Keiyo" -msgstr "" +msgstr "Keiyo" #. name for eze msgid "Uzekwe" -msgstr "" +msgstr "Uzekwe" #. name for faa msgid "Fasu" -msgstr "" +msgstr "Fasu" #. name for fab msgid "Fa D'ambu" -msgstr "" +msgstr "Fa D'ambu" #. name for fad msgid "Wagi" -msgstr "" +msgstr "Wagi" #. name for faf msgid "Fagani" -msgstr "" +msgstr "Fagani" #. name for fag msgid "Finongan" -msgstr "" +msgstr "Finongan" #. name for fah msgid "Fali; Baissa" -msgstr "" +msgstr "Fali; Baissa" #. name for fai msgid "Faiwol" -msgstr "" +msgstr "Faiwol" #. name for faj msgid "Faita" -msgstr "" +msgstr "Faita" #. name for fak msgid "Fang (Cameroon)" -msgstr "" +msgstr "Fang (Cameroon)" #. name for fal msgid "Fali; South" -msgstr "" +msgstr "Fali; Selatan" #. name for fam msgid "Fam" -msgstr "" +msgstr "Fam" #. name for fan msgid "Fang (Equatorial Guinea)" -msgstr "" +msgstr "Fang (Guinea Khatulistiwa)" # ui/galeon.glade.h:133 #. name for fao @@ -7517,75 +7517,75 @@ msgstr "Faeroese" #. name for fap msgid "Palor" -msgstr "" +msgstr "Palor" #. name for far msgid "Fataleka" -msgstr "" +msgstr "Fataleka" #. name for fas msgid "Persian" -msgstr "" +msgstr "Parsi" #. name for fat msgid "Fanti" -msgstr "" +msgstr "Fanti" #. name for fau msgid "Fayu" -msgstr "" +msgstr "Fayu" #. name for fax msgid "Fala" -msgstr "" +msgstr "Fala" #. name for fay msgid "Fars; Southwestern" -msgstr "" +msgstr "Fars; Barat Laut" #. name for faz msgid "Fars; Northwestern" -msgstr "" +msgstr "Fars; Timur Laut" #. name for fbl msgid "Bikol; West Albay" -msgstr "" +msgstr "Bikol; Albay Barat" #. name for fcs msgid "Quebec Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Quebec" #. name for fer msgid "Feroge" -msgstr "" +msgstr "Feroge" #. name for ffi msgid "Foia Foia" -msgstr "" +msgstr "Foia Foia" #. name for ffm msgid "Fulfulde; Maasina" -msgstr "" +msgstr "Fulfulde; Maasina" #. name for fgr msgid "Fongoro" -msgstr "" +msgstr "Fongoro" #. name for fia msgid "Nobiin" -msgstr "" +msgstr "Nobiin" #. name for fie msgid "Fyer" -msgstr "" +msgstr "Fyer" #. name for fij msgid "Fijian" -msgstr "" +msgstr "Fijian" #. name for fil msgid "Filipino" -msgstr "" +msgstr "Filipina" # ui/galeon.glade.h:138 #. name for fin @@ -7594,99 +7594,99 @@ msgstr "Finnish" #. name for fip msgid "Fipa" -msgstr "" +msgstr "Fipa" #. name for fir msgid "Firan" -msgstr "" +msgstr "Firan" #. name for fit msgid "Finnish; Tornedalen" -msgstr "" +msgstr "Finland; Tornedalen" #. name for fiw msgid "Fiwaga" -msgstr "" +msgstr "Fiwaga" #. name for fkv msgid "Finnish; Kven" -msgstr "" +msgstr "Finland; Kven" #. name for fla msgid "Kalispel-Pend d'Oreille" -msgstr "" +msgstr "Kalispel-Pend d'Oreille" #. name for flh msgid "Foau" -msgstr "" +msgstr "Foau" #. name for fli msgid "Fali" -msgstr "" +msgstr "Fali" #. name for fll msgid "Fali; North" -msgstr "" +msgstr "Fali; Utara" #. name for fln msgid "Flinders Island" -msgstr "" +msgstr "Pulau Flinder" #. name for flr msgid "Fuliiru" -msgstr "" +msgstr "Fuliiru" #. name for fly msgid "Tsotsitaal" -msgstr "" +msgstr "Tsotsitaal" #. name for fmp msgid "Fe'fe'" -msgstr "" +msgstr "Fe'fe'" #. name for fmu msgid "Muria; Far Western" -msgstr "" +msgstr "Muria; Timur Jauh" #. name for fng msgid "Fanagalo" -msgstr "" +msgstr "Fanagalo" #. name for fni msgid "Fania" -msgstr "" +msgstr "Fania" #. name for fod msgid "Foodo" -msgstr "" +msgstr "Foodo" #. name for foi msgid "Foi" -msgstr "" +msgstr "Foi" #. name for fom msgid "Foma" -msgstr "" +msgstr "Foma" #. name for fon msgid "Fon" -msgstr "" +msgstr "Fon" #. name for for msgid "Fore" -msgstr "" +msgstr "Fore" #. name for fos msgid "Siraya" -msgstr "" +msgstr "Siraya" #. name for fpe msgid "Creole English; Fernando Po" -msgstr "" +msgstr "Inggeris Creole; Fernando Po" #. name for fqs msgid "Fas" -msgstr "" +msgstr "Fas" #. name for fra msgid "French" @@ -7694,727 +7694,727 @@ msgstr "French" #. name for frc msgid "French; Cajun" -msgstr "" +msgstr "Perancis; Cajun" #. name for frd msgid "Fordata" -msgstr "" +msgstr "Fordata" #. name for frk msgid "Frankish" -msgstr "" +msgstr "Frankish" #. name for frm msgid "French; Middle (ca. 1400-1600)" -msgstr "" +msgstr "Perancis; Tengah (seb. M 1400-1600)" #. name for fro msgid "French; Old (842-ca. 1400)" -msgstr "" +msgstr "Perancis; Lama (842-kira-kira 1400)" #. name for frp msgid "Arpitan" -msgstr "" +msgstr "Arpitan" #. name for frq msgid "Forak" -msgstr "" +msgstr "Forak" #. name for frr msgid "Frisian; Northern" -msgstr "" +msgstr "Frisia; Utara" #. name for frs msgid "Frisian; Eastern" -msgstr "" +msgstr "Frisia; Timur" #. name for frt msgid "Fortsenal" -msgstr "" +msgstr "Fortsenal" #. name for fry msgid "Frisian; Western" -msgstr "" +msgstr "Frisia; Barat" #. name for fse msgid "Finnish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Finland" #. name for fsl msgid "French Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Perancis" #. name for fss msgid "Finland-Swedish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Finland-Sweden" #. name for fub msgid "Fulfulde; Adamawa" -msgstr "" +msgstr "Fulfulde; Adamawa" #. name for fuc msgid "Pulaar" -msgstr "" +msgstr "Pulaar" #. name for fud msgid "Futuna; East" -msgstr "" +msgstr "Futuna; Timur" #. name for fue msgid "Fulfulde; Borgu" -msgstr "" +msgstr "Fulfulde; Borgu" #. name for fuf msgid "Pular" -msgstr "" +msgstr "Pular" #. name for fuh msgid "Fulfulde; Western Niger" -msgstr "" +msgstr "Fulfulde; Niger Barat" #. name for fui msgid "Fulfulde; Bagirmi" -msgstr "" +msgstr "Fulfulde; Bagirmi" #. name for fuj msgid "Ko" -msgstr "" +msgstr "Ko" #. name for ful msgid "Fulah" -msgstr "" +msgstr "Fulah" #. name for fum msgid "Fum" -msgstr "" +msgstr "Fum" #. name for fun msgid "Fulniô" -msgstr "" +msgstr "Fulniô" #. name for fuq msgid "Fulfulde; Central-Eastern Niger" -msgstr "" +msgstr "Fulfulde; Niger Timur-Tengah" #. name for fur msgid "Friulian" -msgstr "" +msgstr "Friulia" #. name for fut msgid "Futuna-Aniwa" -msgstr "" +msgstr "Futuna-Aniwa" #. name for fuu msgid "Furu" -msgstr "" +msgstr "Furu" #. name for fuv msgid "Fulfulde; Nigerian" -msgstr "" +msgstr "Fulfulde; Nigeria" #. name for fuy msgid "Fuyug" -msgstr "" +msgstr "Fuyug" #. name for fvr msgid "Fur" -msgstr "" +msgstr "Fur" #. name for fwa msgid "Fwâi" -msgstr "" +msgstr "Fwâi" #. name for fwe msgid "Fwe" -msgstr "" +msgstr "Fwe" #. name for gaa msgid "Ga" -msgstr "" +msgstr "Ga" #. name for gab msgid "Gabri" -msgstr "" +msgstr "Gabri" #. name for gac msgid "Great Andamanese; Mixed" -msgstr "" +msgstr "Andaman Besar; Bercampur" #. name for gad msgid "Gaddang" -msgstr "" +msgstr "Gaddang" #. name for gae msgid "Guarequena" -msgstr "" +msgstr "Guarequena" #. name for gaf msgid "Gende" -msgstr "" +msgstr "Gende" #. name for gag msgid "Gagauz" -msgstr "" +msgstr "Gagauz" #. name for gah msgid "Alekano" -msgstr "" +msgstr "Alekano" #. name for gai msgid "Borei" -msgstr "" +msgstr "Borei" #. name for gaj msgid "Gadsup" -msgstr "" +msgstr "Gadsup" #. name for gak msgid "Gamkonora" -msgstr "" +msgstr "Gamkonora" #. name for gal msgid "Galoli" -msgstr "" +msgstr "Galoli" #. name for gam msgid "Kandawo" -msgstr "" +msgstr "Kandawo" #. name for gan msgid "Chinese; Gan" -msgstr "" +msgstr "Cina; Gan" #. name for gao msgid "Gants" -msgstr "" +msgstr "Gants" #. name for gap msgid "Gal" -msgstr "" +msgstr "Gal" #. name for gaq msgid "Gata'" -msgstr "" +msgstr "Gata'" #. name for gar msgid "Galeya" -msgstr "" +msgstr "Galeya" #. name for gas msgid "Garasia; Adiwasi" -msgstr "" +msgstr "Garasia; Adiwasi" #. name for gat msgid "Kenati" -msgstr "" +msgstr "Kenati" #. name for gau msgid "Gadaba; Mudhili" -msgstr "" +msgstr "Gadaba; Mudhili" #. name for gaw msgid "Nobonob" -msgstr "" +msgstr "Nobonob" #. name for gax msgid "Oromo; Borana-Arsi-Guji" -msgstr "" +msgstr "Oromo; Borana-Arsi-Guji" #. name for gay msgid "Gayo" -msgstr "" +msgstr "Gayo" #. name for gaz msgid "Oromo; West Central" -msgstr "" +msgstr "Oromo; Tengah Barat" #. name for gba msgid "Gbaya (Central African Republic)" -msgstr "" +msgstr "Gbaya (Republik Afrika Tengah)" #. name for gbb msgid "Kaytetye" -msgstr "" +msgstr "Kaytetye" #. name for gbc msgid "Garawa" -msgstr "" +msgstr "Garawa" #. name for gbd msgid "Karadjeri" -msgstr "" +msgstr "Karadjeri" #. name for gbe msgid "Niksek" -msgstr "" +msgstr "Niksek" #. name for gbf msgid "Gaikundi" -msgstr "" +msgstr "Gaikundi" #. name for gbg msgid "Gbanziri" -msgstr "" +msgstr "Gbanziri" #. name for gbh msgid "Gbe; Defi" -msgstr "" +msgstr "Gbe; Defi" #. name for gbi msgid "Galela" -msgstr "" +msgstr "Galela" #. name for gbj msgid "Gadaba; Bodo" -msgstr "" +msgstr "Gadaba; Bodo" #. name for gbk msgid "Gaddi" -msgstr "" +msgstr "Gaddi" #. name for gbl msgid "Gamit" -msgstr "" +msgstr "Gamit" #. name for gbm msgid "Garhwali" -msgstr "" +msgstr "Garhwali" #. name for gbn msgid "Mo'da" -msgstr "" +msgstr "Mo'da" #. name for gbo msgid "Grebo; Northern" -msgstr "" +msgstr "Grebo; Utara" #. name for gbp msgid "Gbaya-Bossangoa" -msgstr "" +msgstr "Gbaya-Bossangoa" #. name for gbq msgid "Gbaya-Bozoum" -msgstr "" +msgstr "Gbaya-Bozoum" #. name for gbr msgid "Gbagyi" -msgstr "" +msgstr "Gbagyi" #. name for gbs msgid "Gbe; Gbesi" -msgstr "" +msgstr "Gbe; Gbesi" #. name for gbu msgid "Gagadu" -msgstr "" +msgstr "Gagadu" #. name for gbv msgid "Gbanu" -msgstr "" +msgstr "Gbanu" #. name for gbx msgid "Gbe; Eastern Xwla" -msgstr "" +msgstr "Gbe; Xwla Timur" #. name for gby msgid "Gbari" -msgstr "" +msgstr "Gbari" #. name for gbz msgid "Dari; Zoroastrian" -msgstr "" +msgstr "Dari; Zoroastria" #. name for gcc msgid "Mali" -msgstr "" +msgstr "Mali" #. name for gcd msgid "Ganggalida" -msgstr "" +msgstr "Ganggalida" #. name for gce msgid "Galice" -msgstr "" +msgstr "Galice" #. name for gcf msgid "Creole French; Guadeloupean" -msgstr "" +msgstr "Perancis Creole; Guadeloup" #. name for gcl msgid "Creole English; Grenadian" -msgstr "" +msgstr "Inggeris Creole; Grenadia" #. name for gcn msgid "Gaina" -msgstr "" +msgstr "Gaina" #. name for gcr msgid "Creole French; Guianese" -msgstr "" +msgstr "Perancis Creol; Guiana" #. name for gct msgid "German; Colonia Tovar" -msgstr "" +msgstr "Jerman; Colonia Tovar" #. name for gda msgid "Lohar; Gade" -msgstr "" +msgstr "Lohar; Gade" #. name for gdb msgid "Gadaba; Pottangi Ollar" -msgstr "" +msgstr "Gadaba; Pottangi Ollar" #. name for gdc msgid "Gugu Badhun" -msgstr "" +msgstr "Gugu Badhun" #. name for gdd msgid "Gedaged" -msgstr "" +msgstr "Gedaged" #. name for gde msgid "Gude" -msgstr "" +msgstr "Gude" #. name for gdf msgid "Guduf-Gava" -msgstr "" +msgstr "Guduf-Gava" #. name for gdg msgid "Ga'dang" -msgstr "" +msgstr "Ga'dang" #. name for gdh msgid "Gadjerawang" -msgstr "" +msgstr "Gadjerawang" #. name for gdi msgid "Gundi" -msgstr "" +msgstr "Gundi" #. name for gdj msgid "Gurdjar" -msgstr "" +msgstr "Gurdjar" #. name for gdk msgid "Gadang" -msgstr "" +msgstr "Gadang" #. name for gdl msgid "Dirasha" -msgstr "" +msgstr "Dirasha" #. name for gdm msgid "Laal" -msgstr "" +msgstr "Laal" #. name for gdn msgid "Umanakaina" -msgstr "" +msgstr "Umanakaina" #. name for gdo msgid "Ghodoberi" -msgstr "" +msgstr "Ghodoberi" #. name for gdq msgid "Mehri" -msgstr "" +msgstr "Mehri" #. name for gdr msgid "Wipi" -msgstr "" +msgstr "Wipi" #. name for gdu msgid "Gudu" -msgstr "" +msgstr "Gudu" #. name for gdx msgid "Godwari" -msgstr "" +msgstr "Godwari" #. name for gea msgid "Geruma" -msgstr "" +msgstr "Geruma" #. name for geb msgid "Kire" -msgstr "" +msgstr "Kire" #. name for gec msgid "Grebo; Gboloo" -msgstr "" +msgstr "Grebo; Gboloo" #. name for ged msgid "Gade" -msgstr "" +msgstr "Gade" #. name for geg msgid "Gengle" -msgstr "" +msgstr "Gengle" #. name for geh msgid "German; Hutterite" -msgstr "" +msgstr "Jerman; Hutterite" #. name for gei msgid "Gebe" -msgstr "" +msgstr "Gebe" #. name for gej msgid "Gen" -msgstr "" +msgstr "Gen" #. name for gek msgid "Yiwom" -msgstr "" +msgstr "Yiwom" #. name for gel msgid "ut-Ma'in" -msgstr "" +msgstr "ut-Ma'in" #. name for geq msgid "Geme" -msgstr "" +msgstr "Geme" #. name for ges msgid "Geser-Gorom" -msgstr "" +msgstr "Geser-Gorom" #. name for gew msgid "Gera" -msgstr "" +msgstr "Gera" #. name for gex msgid "Garre" -msgstr "" +msgstr "Garre" #. name for gey msgid "Enya" -msgstr "" +msgstr "Enya" #. name for gez msgid "Geez" -msgstr "" +msgstr "Geez" #. name for gfk msgid "Patpatar" -msgstr "" +msgstr "Patpatar" #. name for gft msgid "Gafat" -msgstr "" +msgstr "Gafat" #. name for gga msgid "Gao" -msgstr "" +msgstr "Gao" #. name for ggb msgid "Gbii" -msgstr "" +msgstr "Gbii" #. name for ggd msgid "Gugadj" -msgstr "" +msgstr "Gugadj" #. name for gge msgid "Guragone" -msgstr "" +msgstr "Guragone" #. name for ggg msgid "Gurgula" -msgstr "" +msgstr "Gurgula" #. name for ggk msgid "Kungarakany" -msgstr "" +msgstr "Kungarakany" #. name for ggl msgid "Ganglau" -msgstr "" +msgstr "Ganglau" #. name for ggn msgid "Gurung; Eastern" -msgstr "" +msgstr "Gurung; Timur" #. name for ggo msgid "Gondi; Southern" -msgstr "" +msgstr "Gondi; Selatan" #. name for ggr msgid "Aghu Tharnggalu" -msgstr "" +msgstr "Aghu Tharnggalu" #. name for ggt msgid "Gitua" -msgstr "" +msgstr "Gitua" #. name for ggu msgid "Gagu" -msgstr "" +msgstr "Gagu" #. name for ggw msgid "Gogodala" -msgstr "" +msgstr "Gogodala" #. name for gha msgid "Ghadamès" -msgstr "" +msgstr "Ghadamès" #. name for ghc msgid "Gaelic; Hiberno-Scottish" -msgstr "" +msgstr "Gaelik; Hiberno-Scottish" #. name for ghe msgid "Ghale; Southern" -msgstr "" +msgstr "Ghale; Selatan" #. name for ghh msgid "Ghale; Northern" -msgstr "" +msgstr "Ghale; Utara" #. name for ghk msgid "Karen; Geko" -msgstr "" +msgstr "Karen; Geko" #. name for ghl msgid "Ghulfan" -msgstr "" +msgstr "Ghulfan" #. name for ghn msgid "Ghanongga" -msgstr "" +msgstr "Ghanongga" #. name for gho msgid "Ghomara" -msgstr "" +msgstr "Ghomara" #. name for ghr msgid "Ghera" -msgstr "" +msgstr "Ghera" #. name for ghs msgid "Guhu-Samane" -msgstr "" +msgstr "Guhu-Samane" #. name for ght msgid "Ghale; Kutang" -msgstr "" +msgstr "Ghale; Kutang" #. name for gia msgid "Kitja" -msgstr "" +msgstr "Kitja" #. name for gib msgid "Gibanawa" -msgstr "" +msgstr "Gibanawa" #. name for gic msgid "Gail" -msgstr "" +msgstr "Gail" #. name for gid msgid "Gidar" -msgstr "" +msgstr "Gidar" #. name for gig msgid "Goaria" -msgstr "" +msgstr "Goaria" #. name for gil msgid "Gilbertese" -msgstr "" +msgstr "Gilbertese" #. name for gim msgid "Gimi (Eastern Highlands)" -msgstr "" +msgstr "Gimi (Tanah Tinggi Timur)" #. name for gin msgid "Hinukh" -msgstr "" +msgstr "Hinukh" #. name for gio msgid "Gelao" -msgstr "" +msgstr "Gelao" #. name for gip msgid "Gimi (West New Britain)" -msgstr "" +msgstr "Gimi (Britain Baru Barat)" #. name for giq msgid "Gelao; Green" -msgstr "" +msgstr "Gelao; Hijau" #. name for gir msgid "Gelao; Red" -msgstr "" +msgstr "Gelao; Merah" #. name for gis msgid "Giziga; North" -msgstr "" +msgstr "Giziga; Utara" #. name for git msgid "Gitxsan" -msgstr "" +msgstr "Gitxsan" #. name for giw msgid "Gelao; White" -msgstr "" +msgstr "Gelao; Putih" #. name for gix msgid "Gilima" -msgstr "" +msgstr "Gilima" #. name for giy msgid "Giyug" -msgstr "" +msgstr "Giyug" #. name for giz msgid "Giziga; South" -msgstr "" +msgstr "Giziga; Selatan" #. name for gji msgid "Geji" -msgstr "" +msgstr "Geji" #. name for gjk msgid "Koli; Kachi" -msgstr "" +msgstr "Koli; Kachi" #. name for gjn msgid "Gonja" -msgstr "" +msgstr "Gonja" #. name for gju msgid "Gujari" -msgstr "" +msgstr "Gujari" #. name for gka msgid "Guya" -msgstr "" +msgstr "Guya" #. name for gke msgid "Ndai" -msgstr "" +msgstr "Ndai" #. name for gkn msgid "Gokana" -msgstr "" +msgstr "Gokana" #. name for gkp msgid "Kpelle; Guinea" -msgstr "" +msgstr "Kpelle; Guinea" #. name for gla msgid "Gaelic; Scottish" -msgstr "" +msgstr "Gaelik; Scottish" #. name for glc msgid "Bon Gula" -msgstr "" +msgstr "Bon Gula" #. name for gld msgid "Nanai" -msgstr "" +msgstr "Nanai" #. name for gle msgid "Irish" @@ -8422,847 +8422,847 @@ msgstr "Irish" #. name for glg msgid "Galician" -msgstr "" +msgstr "Galicia" #. name for glh msgid "Pashayi; Northwest" -msgstr "" +msgstr "Pashayi; Barat Laut" #. name for gli msgid "Guliguli" -msgstr "" +msgstr "Guliguli" #. name for glj msgid "Gula Iro" -msgstr "" +msgstr "Gula Iro" #. name for glk msgid "Gilaki" -msgstr "" +msgstr "Gilaki" #. name for glo msgid "Galambu" -msgstr "" +msgstr "Galambu" #. name for glr msgid "Glaro-Twabo" -msgstr "" +msgstr "Glaro-Twabo" #. name for glu msgid "Gula (Chad)" -msgstr "" +msgstr "Gula (Chad)" #. name for glv msgid "Manx" -msgstr "" +msgstr "Manx" #. name for glw msgid "Glavda" -msgstr "" +msgstr "Glavda" #. name for gly msgid "Gule" -msgstr "" +msgstr "Gule" #. name for gma msgid "Gambera" -msgstr "" +msgstr "Gambera" #. name for gmb msgid "Gula'alaa" -msgstr "" +msgstr "Gula'alaa" #. name for gmd msgid "Mághdì" -msgstr "" +msgstr "Mághdì" #. name for gmh msgid "German; Middle High (ca. 1050-1500)" -msgstr "" +msgstr "Jerman; Pertengahan Tinggi (kira-kira 1050-1500)" #. name for gml msgid "German; Middle Low" -msgstr "" +msgstr "Jerman; Pertengahan Rendah" #. name for gmm msgid "Gbaya-Mbodomo" -msgstr "" +msgstr "Gbaya-Mbodomo" #. name for gmn msgid "Gimnime" -msgstr "" +msgstr "Gimnime" #. name for gmu msgid "Gumalu" -msgstr "" +msgstr "Gumalu" #. name for gmv msgid "Gamo" -msgstr "" +msgstr "Gamo" #. name for gmx msgid "Magoma" -msgstr "" +msgstr "Magoma" #. name for gmy msgid "Greek; Mycenaean" -msgstr "" +msgstr "Yunani; Mycenae" #. name for gna msgid "Kaansa" -msgstr "" +msgstr "Kaansa" #. name for gnb msgid "Gangte" -msgstr "" +msgstr "Gangte" #. name for gnc msgid "Guanche" -msgstr "" +msgstr "Guanche" #. name for gnd msgid "Zulgo-Gemzek" -msgstr "" +msgstr "Zulgo-Gemzek" #. name for gne msgid "Ganang" -msgstr "" +msgstr "Ganang" #. name for gng msgid "Ngangam" -msgstr "" +msgstr "Ngangam" #. name for gnh msgid "Lere" -msgstr "" +msgstr "Lere" #. name for gni msgid "Gooniyandi" -msgstr "" +msgstr "Gooniyandi" #. name for gnk msgid "//Gana" -msgstr "" +msgstr "//Gana" #. name for gnl msgid "Gangulu" -msgstr "" +msgstr "Gangulu" #. name for gnm msgid "Ginuman" -msgstr "" +msgstr "Ginuman" #. name for gnn msgid "Gumatj" -msgstr "" +msgstr "Gumatj" #. name for gno msgid "Gondi; Northern" -msgstr "" +msgstr "Gondi; Utara" #. name for gnq msgid "Gana" -msgstr "" +msgstr "Gana" #. name for gnr msgid "Gureng Gureng" -msgstr "" +msgstr "Gureng Gureng" #. name for gnt msgid "Guntai" -msgstr "" +msgstr "Guntai" #. name for gnu msgid "Gnau" -msgstr "" +msgstr "Gnau" #. name for gnw msgid "Guaraní; Western Bolivian" -msgstr "" +msgstr "Guaraní; Bolivia Barat" #. name for gnz msgid "Ganzi" -msgstr "" +msgstr "Ganzi" #. name for goa msgid "Guro" -msgstr "" +msgstr "Guro" #. name for gob msgid "Playero" -msgstr "" +msgstr "Playero" #. name for goc msgid "Gorakor" -msgstr "" +msgstr "Gorakor" #. name for god msgid "Godié" -msgstr "" +msgstr "Godié" #. name for goe msgid "Gongduk" -msgstr "" +msgstr "Gongduk" #. name for gof msgid "Gofa" -msgstr "" +msgstr "Gofa" #. name for gog msgid "Gogo" -msgstr "" +msgstr "Gogo" #. name for goh msgid "German; Old High (ca. 750-1050)" -msgstr "" +msgstr "Jerman; Lama Tinggi (kira-kira 750-1050)" #. name for goi msgid "Gobasi" -msgstr "" +msgstr "Gobasi" #. name for goj msgid "Gowlan" -msgstr "" +msgstr "Gowlan" #. name for gok msgid "Gowli" -msgstr "" +msgstr "Gowli" #. name for gol msgid "Gola" -msgstr "" +msgstr "Gola" #. name for gom msgid "Konkani; Goan" -msgstr "" +msgstr "Konkani; Goan" #. name for gon msgid "Gondi" -msgstr "" +msgstr "Gondi" #. name for goo msgid "Gone Dau" -msgstr "" +msgstr "Gone Dau" #. name for gop msgid "Yeretuar" -msgstr "" +msgstr "Yeretuar" #. name for goq msgid "Gorap" -msgstr "" +msgstr "Gorap" #. name for gor msgid "Gorontalo" -msgstr "" +msgstr "Gorontalo" #. name for gos msgid "Gronings" -msgstr "" +msgstr "Gronings" #. name for got msgid "Gothic" -msgstr "" +msgstr "Gothic" #. name for gou msgid "Gavar" -msgstr "" +msgstr "Gavar" #. name for gow msgid "Gorowa" -msgstr "" +msgstr "Gorowa" #. name for gox msgid "Gobu" -msgstr "" +msgstr "Gobu" #. name for goy msgid "Goundo" -msgstr "" +msgstr "Goundo" #. name for goz msgid "Gozarkhani" -msgstr "" +msgstr "Gozarkhani" #. name for gpa msgid "Gupa-Abawa" -msgstr "" +msgstr "Gupa-Abawa" #. name for gpn msgid "Taiap" -msgstr "" +msgstr "Taiap" #. name for gqa msgid "Ga'anda" -msgstr "" +msgstr "Ga'anda" #. name for gqi msgid "Guiqiong" -msgstr "" +msgstr "Guiqiong" #. name for gqn msgid "Guana (Brazil)" -msgstr "" +msgstr "Guana (Brazil)" #. name for gqr msgid "Gor" -msgstr "" +msgstr "Gor" #. name for gra msgid "Garasia; Rajput" -msgstr "" +msgstr "Garasia; Rajput" #. name for grb msgid "Grebo" -msgstr "" +msgstr "Grebo" #. name for grc msgid "Greek; Ancient (to 1453)" -msgstr "" +msgstr "Yunani; Purba (sehingga 1453)" #. name for grd msgid "Guruntum-Mbaaru" -msgstr "" +msgstr "Guruntum-Mbaaru" #. name for grg msgid "Madi" -msgstr "" +msgstr "Madi" #. name for grh msgid "Gbiri-Niragu" -msgstr "" +msgstr "Gbiri-Niragu" #. name for gri msgid "Ghari" -msgstr "" +msgstr "Ghari" #. name for grj msgid "Grebo; Southern" -msgstr "" +msgstr "Grebo; Selatan" #. name for grm msgid "Kota Marudu Talantang" -msgstr "" +msgstr "Kota Marudu Talantang" #. name for grn msgid "Guarani" -msgstr "" +msgstr "Guarani" #. name for gro msgid "Groma" -msgstr "" +msgstr "Groma" #. name for grq msgid "Gorovu" -msgstr "" +msgstr "Gorovu" #. name for grr msgid "Taznatit" -msgstr "" +msgstr "Taznatit" #. name for grs msgid "Gresi" -msgstr "" +msgstr "Gresi" #. name for grt msgid "Garo" -msgstr "" +msgstr "Garo" #. name for gru msgid "Kistane" -msgstr "" +msgstr "Kistane" #. name for grv msgid "Grebo; Central" -msgstr "" +msgstr "Grebo; Tengah" #. name for grw msgid "Gweda" -msgstr "" +msgstr "Gweda" #. name for grx msgid "Guriaso" -msgstr "" +msgstr "Guriaso" #. name for gry msgid "Grebo; Barclayville" -msgstr "" +msgstr "Grebo; Barclayville" #. name for grz msgid "Guramalum" -msgstr "" +msgstr "Guramalum" #. name for gse msgid "Ghanaian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Ghana" #. name for gsg msgid "German Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jerman" #. name for gsl msgid "Gusilay" -msgstr "" +msgstr "Gusilay" #. name for gsm msgid "Guatemalan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Guatamala" #. name for gsn msgid "Gusan" -msgstr "" +msgstr "Gusan" #. name for gso msgid "Gbaya; Southwest" -msgstr "" +msgstr "Gbaya; Barat Daya" #. name for gsp msgid "Wasembo" -msgstr "" +msgstr "Wasembo" #. name for gss msgid "Greek Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Yunani" #. name for gsw msgid "German; Swiss" -msgstr "" +msgstr "Jerman; Swiss" #. name for gta msgid "Guató" -msgstr "" +msgstr "Guató" #. name for gti msgid "Gbati-ri" -msgstr "" +msgstr "Gbati-ri" #. name for gua msgid "Shiki" -msgstr "" +msgstr "Shiki" #. name for gub msgid "Guajajára" -msgstr "" +msgstr "Guajajára" #. name for guc msgid "Wayuu" -msgstr "" +msgstr "Wayuu" #. name for gud msgid "Dida; Yocoboué" -msgstr "" +msgstr "Dida; Yocoboué" #. name for gue msgid "Gurinji" -msgstr "" +msgstr "Gurinji" #. name for guf msgid "Gupapuyngu" -msgstr "" +msgstr "Gupapuyngu" #. name for gug msgid "Guaraní; Paraguayan" -msgstr "" +msgstr "Guaraní; Paraguay" #. name for guh msgid "Guahibo" -msgstr "" +msgstr "Guahibo" #. name for gui msgid "Guaraní; Eastern Bolivian" -msgstr "" +msgstr "Guaraní; Bolivia Timur" #. name for guj msgid "Gujarati" -msgstr "" +msgstr "Gujarati" #. name for guk msgid "Gumuz" -msgstr "" +msgstr "Gumuz" #. name for gul msgid "Creole English; Sea Island" -msgstr "" +msgstr "Inggeris Creole; Pulau Sea" #. name for gum msgid "Guambiano" -msgstr "" +msgstr "Guambiano" #. name for gun msgid "Guaraní; Mbyá" -msgstr "" +msgstr "Guaraní; Mbyá" #. name for guo msgid "Guayabero" -msgstr "" +msgstr "Guayabero" #. name for gup msgid "Gunwinggu" -msgstr "" +msgstr "Gunwinggu" #. name for guq msgid "Aché" -msgstr "" +msgstr "Aché" #. name for gur msgid "Farefare" -msgstr "" +msgstr "Farefare" #. name for gus msgid "Guinean Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Guinea" #. name for gut msgid "Maléku Jaíka" -msgstr "" +msgstr "Maléku Jaíka" #. name for guu msgid "Yanomamö" -msgstr "" +msgstr "Yanomamö" #. name for guv msgid "Gey" -msgstr "" +msgstr "Gey" #. name for guw msgid "Gun" -msgstr "" +msgstr "Gun" #. name for gux msgid "Gourmanchéma" -msgstr "" +msgstr "Gourmanchéma" #. name for guz msgid "Gusii" -msgstr "" +msgstr "Gusii" #. name for gva msgid "Guana (Paraguay)" -msgstr "" +msgstr "Guana (Paraguay)" #. name for gvc msgid "Guanano" -msgstr "" +msgstr "Guanano" #. name for gve msgid "Duwet" -msgstr "" +msgstr "Duwet" #. name for gvf msgid "Golin" -msgstr "" +msgstr "Golin" #. name for gvj msgid "Guajá" -msgstr "" +msgstr "Guajá" #. name for gvl msgid "Gulay" -msgstr "" +msgstr "Gulay" #. name for gvm msgid "Gurmana" -msgstr "" +msgstr "Gurmana" #. name for gvn msgid "Kuku-Yalanji" -msgstr "" +msgstr "Kuku-Yalanji" #. name for gvo msgid "Gavião Do Jiparaná" -msgstr "" +msgstr "Gavião Do Jiparaná" #. name for gvp msgid "Gavião; Pará" -msgstr "" +msgstr "Gavião; Pará" #. name for gvr msgid "Gurung; Western" -msgstr "" +msgstr "Gurung; Barat" #. name for gvs msgid "Gumawana" -msgstr "" +msgstr "Gumawana" #. name for gvy msgid "Guyani" -msgstr "" +msgstr "Guyani" #. name for gwa msgid "Mbato" -msgstr "" +msgstr "Mbato" #. name for gwb msgid "Gwa" -msgstr "" +msgstr "Gwa" #. name for gwc msgid "Kalami" -msgstr "" +msgstr "Kalami" #. name for gwd msgid "Gawwada" -msgstr "" +msgstr "Gawwada" #. name for gwe msgid "Gweno" -msgstr "" +msgstr "Gweno" #. name for gwf msgid "Gowro" -msgstr "" +msgstr "Gowro" #. name for gwg msgid "Moo" -msgstr "" +msgstr "Moo" #. name for gwi msgid "Gwichʼin" -msgstr "" +msgstr "Gwichʼin" #. name for gwj msgid "/Gwi" -msgstr "" +msgstr "/Gwi" #. name for gwn msgid "Gwandara" -msgstr "" +msgstr "Gwandara" #. name for gwr msgid "Gwere" -msgstr "" +msgstr "Gwere" #. name for gwt msgid "Gawar-Bati" -msgstr "" +msgstr "Gawar-Bati" #. name for gwu msgid "Guwamu" -msgstr "" +msgstr "Guwamu" #. name for gww msgid "Kwini" -msgstr "" +msgstr "Kwini" #. name for gwx msgid "Gua" -msgstr "" +msgstr "Gua" #. name for gxx msgid "Wè Southern" -msgstr "" +msgstr "Wè Selatan" #. name for gya msgid "Gbaya; Northwest" -msgstr "" +msgstr "Gbaya; Barat Laut" #. name for gyb msgid "Garus" -msgstr "" +msgstr "Garus" #. name for gyd msgid "Kayardild" -msgstr "" +msgstr "Kayardild" #. name for gye msgid "Gyem" -msgstr "" +msgstr "Gyem" #. name for gyf msgid "Gungabula" -msgstr "" +msgstr "Gungabula" #. name for gyg msgid "Gbayi" -msgstr "" +msgstr "Gbayi" #. name for gyi msgid "Gyele" -msgstr "" +msgstr "Gyele" #. name for gyl msgid "Gayil" -msgstr "" +msgstr "Gayil" #. name for gym msgid "Ngäbere" -msgstr "" +msgstr "Ngäbere" #. name for gyn msgid "Creole English; Guyanese" -msgstr "" +msgstr "Inggeris Creole; Guyana" #. name for gyr msgid "Guarayu" -msgstr "" +msgstr "Guarayu" #. name for gyy msgid "Gunya" -msgstr "" +msgstr "Gunya" #. name for gza msgid "Ganza" -msgstr "" +msgstr "Ganza" #. name for gzi msgid "Gazi" -msgstr "" +msgstr "Gazi" #. name for gzn msgid "Gane" -msgstr "" +msgstr "Gane" #. name for haa msgid "Han" -msgstr "" +msgstr "Han" #. name for hab msgid "Hanoi Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Hanoi" #. name for hac msgid "Gurani" -msgstr "" +msgstr "Gurani" #. name for had msgid "Hatam" -msgstr "" +msgstr "Hatam" #. name for hae msgid "Oromo; Eastern" -msgstr "" +msgstr "Oromo; Timur" #. name for haf msgid "Haiphong Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Haiphong" #. name for hag msgid "Hanga" -msgstr "" +msgstr "Hanga" #. name for hah msgid "Hahon" -msgstr "" +msgstr "Hahon" #. name for hai msgid "Haida" -msgstr "" +msgstr "Haida" #. name for haj msgid "Hajong" -msgstr "" +msgstr "Hajong" #. name for hak msgid "Chinese; Hakka" -msgstr "" +msgstr "Cina; Hakka" #. name for hal msgid "Halang" -msgstr "" +msgstr "Halang" #. name for ham msgid "Hewa" -msgstr "" +msgstr "Hewa" #. name for han msgid "Hangaza" -msgstr "" +msgstr "Hangaza" #. name for hao msgid "Hakö" -msgstr "" +msgstr "Hakö" #. name for hap msgid "Hupla" -msgstr "" +msgstr "Hupla" #. name for haq msgid "Ha" -msgstr "" +msgstr "Ha" #. name for har msgid "Harari" -msgstr "" +msgstr "Harari" #. name for has msgid "Haisla" -msgstr "" +msgstr "Haisla" #. name for hat msgid "Creole; Haitian" -msgstr "" +msgstr "Creole; Haiti" #. name for hau msgid "Hausa" -msgstr "" +msgstr "Hausa" #. name for hav msgid "Havu" -msgstr "" +msgstr "Havu" #. name for haw msgid "Hawaiian" -msgstr "" +msgstr "Hawaii" #. name for hax msgid "Haida; Southern" -msgstr "" +msgstr "Haida; Selatan" #. name for hay msgid "Haya" -msgstr "" +msgstr "Haya" #. name for haz msgid "Hazaragi" -msgstr "" +msgstr "Hazaragi" #. name for hba msgid "Hamba" -msgstr "" +msgstr "Hamba" #. name for hbb msgid "Huba" -msgstr "" +msgstr "Huba" #. name for hbn msgid "Heiban" -msgstr "" +msgstr "Heiban" #. name for hbo msgid "Hebrew; Ancient" -msgstr "" +msgstr "Ibrani; Purba" #. name for hbs msgid "Serbo-Croatian" -msgstr "" +msgstr "Serbo-Croatia" #. name for hbu msgid "Habu" -msgstr "" +msgstr "Habu" #. name for hca msgid "Creole Hindi; Andaman" -msgstr "" +msgstr "Hindi Creole; Andaman" #. name for hch msgid "Huichol" -msgstr "" +msgstr "Huichol" #. name for hdn msgid "Haida; Northern" -msgstr "" +msgstr "Haida; Utara" #. name for hds msgid "Honduras Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Honduras" #. name for hdy msgid "Hadiyya" -msgstr "" +msgstr "Hadiyya" #. name for hea msgid "Miao; Northern Qiandong" -msgstr "" +msgstr "Miao; Qiandong Utara" #. name for heb msgid "Hebrew" @@ -9270,411 +9270,411 @@ msgstr "Hebrew" #. name for hed msgid "Herdé" -msgstr "" +msgstr "Herdé" #. name for heg msgid "Helong" -msgstr "" +msgstr "Helong" #. name for heh msgid "Hehe" -msgstr "" +msgstr "Hehe" #. name for hei msgid "Heiltsuk" -msgstr "" +msgstr "Heiltsuk" #. name for hem msgid "Hemba" -msgstr "" +msgstr "Hemba" #. name for her msgid "Herero" -msgstr "" +msgstr "Herero" #. name for hgm msgid "Hai//om" -msgstr "" +msgstr "Hai//om" #. name for hgw msgid "Haigwai" -msgstr "" +msgstr "Haigwai" #. name for hhi msgid "Hoia Hoia" -msgstr "" +msgstr "Hoia Hoia" #. name for hhr msgid "Kerak" -msgstr "" +msgstr "Kerak" #. name for hhy msgid "Hoyahoya" -msgstr "" +msgstr "Hoyahoya" #. name for hia msgid "Lamang" -msgstr "" +msgstr "Lamang" #. name for hib msgid "Hibito" -msgstr "" +msgstr "Hibito" #. name for hid msgid "Hidatsa" -msgstr "" +msgstr "Hidatsa" #. name for hif msgid "Hindi; Fiji" -msgstr "" +msgstr "Hindi; Fiji" #. name for hig msgid "Kamwe" -msgstr "" +msgstr "Kamwe" #. name for hih msgid "Pamosu" -msgstr "" +msgstr "Pamosu" #. name for hii msgid "Hinduri" -msgstr "" +msgstr "Hinduri" #. name for hij msgid "Hijuk" -msgstr "" +msgstr "Hijuk" #. name for hik msgid "Seit-Kaitetu" -msgstr "" +msgstr "Seit-Kaitetu" #. name for hil msgid "Hiligaynon" -msgstr "" +msgstr "Hiligaynon" #. name for hin msgid "Hindi" -msgstr "" +msgstr "Hindi" #. name for hio msgid "Tsoa" -msgstr "" +msgstr "Tsoa" #. name for hir msgid "Himarimã" -msgstr "" +msgstr "Himarimã" #. name for hit msgid "Hittite" -msgstr "" +msgstr "Hittite" #. name for hiw msgid "Hiw" -msgstr "" +msgstr "Hiw" #. name for hix msgid "Hixkaryána" -msgstr "" +msgstr "Hixkaryána" #. name for hji msgid "Haji" -msgstr "" +msgstr "Haji" #. name for hka msgid "Kahe" -msgstr "" +msgstr "Kahe" #. name for hke msgid "Hunde" -msgstr "" +msgstr "Hunde" #. name for hkk msgid "Hunjara-Kaina Ke" -msgstr "" +msgstr "Hunjara-Kaina Ke" #. name for hks msgid "Hong Kong Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Hong Kong" #. name for hla msgid "Halia" -msgstr "" +msgstr "Halia" #. name for hlb msgid "Halbi" -msgstr "" +msgstr "Halbi" #. name for hld msgid "Halang Doan" -msgstr "" +msgstr "Halang Doan" #. name for hle msgid "Hlersu" -msgstr "" +msgstr "Hlersu" #. name for hlt msgid "Nga La" -msgstr "" +msgstr "Nga La" #. name for hlu msgid "Luwian; Hieroglyphic" -msgstr "" +msgstr "Luwia; Hieroglifik" #. name for hma msgid "Miao; Southern Mashan" -msgstr "" +msgstr "Miao; Mashan Selatan" #. name for hmb msgid "Songhay; Humburi Senni" -msgstr "" +msgstr "Songhay; Humburi Senni" #. name for hmc msgid "Miao; Central Huishui" -msgstr "" +msgstr "Miao; Huishui Tengah" #. name for hmd msgid "Miao; Large Flowery" -msgstr "" +msgstr "Miao; Flowery Besar" #. name for hme msgid "Miao; Eastern Huishui" -msgstr "" +msgstr "Miao; Huishui Timur" #. name for hmf msgid "Hmong Don" -msgstr "" +msgstr "Hmong Don" #. name for hmg msgid "Hmong; Southwestern Guiyang" -msgstr "" +msgstr "Hmong; Guiyang Barat Daya" #. name for hmh msgid "Miao; Southwestern Huishui" -msgstr "" +msgstr "Miao; Huishui Barat Laut" #. name for hmi msgid "Miao; Northern Huishui" -msgstr "" +msgstr "Miao; Huishui Utara" #. name for hmj msgid "Ge" -msgstr "" +msgstr "Ge" #. name for hmk msgid "Maek" -msgstr "" +msgstr "Maek" #. name for hml msgid "Miao; Luopohe" -msgstr "" +msgstr "Miao; Luopohe" #. name for hmm msgid "Miao; Central Mashan" -msgstr "" +msgstr "Miao; Mashan Tengah" #. name for hmn msgid "Hmong" -msgstr "" +msgstr "Hmong" #. name for hmo msgid "Hiri Motu" -msgstr "" +msgstr "Hiri Motu" #. name for hmp msgid "Miao; Northern Mashan" -msgstr "" +msgstr "Miao; Mashan Utara" #. name for hmq msgid "Miao; Eastern Qiandong" -msgstr "" +msgstr "Miao; Qiandong Timur" #. name for hmr msgid "Hmar" -msgstr "" +msgstr "Hmar" #. name for hms msgid "Miao; Southern Qiandong" -msgstr "" +msgstr "Miao; Qiandong Selatan" #. name for hmt msgid "Hamtai" -msgstr "" +msgstr "Hamtai" #. name for hmu msgid "Hamap" -msgstr "" +msgstr "Hamap" #. name for hmv msgid "Hmong Dô" -msgstr "" +msgstr "Hmong Dô" #. name for hmw msgid "Miao; Western Mashan" -msgstr "" +msgstr "Miao; Mashan Barat" #. name for hmy msgid "Miao; Southern Guiyang" -msgstr "" +msgstr "Miao; Guiyang Selatan" #. name for hmz msgid "Miao; Sinicized" -msgstr "" +msgstr "Miao; Sinicized" #. name for hna msgid "Mina (Cameroon)" -msgstr "" +msgstr "Mina (Cameroon)" #. name for hnd msgid "Hindko; Southern" -msgstr "" +msgstr "Hindko; Selatan" #. name for hne msgid "Chhattisgarhi" -msgstr "" +msgstr "Chhattisgarhi" #. name for hnh msgid "//Ani" -msgstr "" +msgstr "//Ani" #. name for hni msgid "Hani" -msgstr "" +msgstr "Hani" #. name for hnj msgid "Hmong Njua" -msgstr "" +msgstr "Hmong Njua" #. name for hnn msgid "Hanunoo" -msgstr "" +msgstr "Hanunoo" #. name for hno msgid "Hindko; Northern" -msgstr "" +msgstr "Hindko; Utara" #. name for hns msgid "Hindustani; Caribbean" -msgstr "" +msgstr "Hindustani; Caribbean" #. name for hnu msgid "Hung" -msgstr "" +msgstr "Hung" #. name for hoa msgid "Hoava" -msgstr "" +msgstr "Hoava" #. name for hob msgid "Mari (Madang Province)" -msgstr "" +msgstr "Mari (Wilayah Madang)" #. name for hoc msgid "Ho" -msgstr "" +msgstr "Ho" #. name for hod msgid "Holma" -msgstr "" +msgstr "Holma" #. name for hoe msgid "Horom" -msgstr "" +msgstr "Horom" #. name for hoh msgid "Hobyót" -msgstr "" +msgstr "Hobyót" #. name for hoi msgid "Holikachuk" -msgstr "" +msgstr "Holikachuk" #. name for hoj msgid "Hadothi" -msgstr "" +msgstr "Hadothi" #. name for hol msgid "Holu" -msgstr "" +msgstr "Holu" #. name for hom msgid "Homa" -msgstr "" +msgstr "Homa" #. name for hoo msgid "Holoholo" -msgstr "" +msgstr "Holoholo" #. name for hop msgid "Hopi" -msgstr "" +msgstr "Hopi" #. name for hor msgid "Horo" -msgstr "" +msgstr "Horo" #. name for hos msgid "Ho Chi Minh City Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Bandar Ho Chi Minh" #. name for hot msgid "Hote" -msgstr "" +msgstr "Hote" #. name for hov msgid "Hovongan" -msgstr "" +msgstr "Hovongan" #. name for how msgid "Honi" -msgstr "" +msgstr "Honi" #. name for hoy msgid "Holiya" -msgstr "" +msgstr "Holiya" #. name for hoz msgid "Hozo" -msgstr "" +msgstr "Hozo" #. name for hpo msgid "Hpon" -msgstr "" +msgstr "Hpon" #. name for hps msgid "Hawai'i Pidgin Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Hawai'i Pidgin" #. name for hra msgid "Hrangkhol" -msgstr "" +msgstr "Hrangkhol" #. name for hre msgid "Hre" -msgstr "" +msgstr "Hre" #. name for hrk msgid "Haruku" -msgstr "" +msgstr "Haruku" #. name for hrm msgid "Miao; Horned" -msgstr "" +msgstr "Miao; Horned" #. name for hro msgid "Haroi" -msgstr "" +msgstr "Haroi" #. name for hrr msgid "Horuru" -msgstr "" +msgstr "Horuru" #. name for hrt msgid "Hértevin" -msgstr "" +msgstr "Hértevin" #. name for hru msgid "Hruso" -msgstr "" +msgstr "Hruso" #. name for hrv msgid "Croatian" @@ -9682,99 +9682,99 @@ msgstr "Croatian" #. name for hrx msgid "Hunsrik" -msgstr "" +msgstr "Hunsrik" #. name for hrz msgid "Harzani" -msgstr "" +msgstr "Harzani" #. name for hsb msgid "Sorbian; Upper" -msgstr "" +msgstr "Sorbi; Atas" #. name for hsh msgid "Hungarian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Hungari" #. name for hsl msgid "Hausa Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Hausa" #. name for hsn msgid "Chinese; Xiang" -msgstr "" +msgstr "Cina; Xiang" #. name for hss msgid "Harsusi" -msgstr "" +msgstr "Harsusi" #. name for hti msgid "Hoti" -msgstr "" +msgstr "Hoti" #. name for hto msgid "Huitoto; Minica" -msgstr "" +msgstr "Huitoto; Minica" #. name for hts msgid "Hadza" -msgstr "" +msgstr "Hadza" #. name for htu msgid "Hitu" -msgstr "" +msgstr "Hitu" #. name for htx msgid "Hittite; Middle" -msgstr "" +msgstr "Hitit; Tengah" #. name for hub msgid "Huambisa" -msgstr "" +msgstr "Huambisa" #. name for huc msgid "=/Hua" -msgstr "" +msgstr "=/Hua" #. name for hud msgid "Huaulu" -msgstr "" +msgstr "Huaulu" #. name for hue msgid "Huave; San Francisco Del Mar" -msgstr "" +msgstr "Huave; San Francisco Del Mar" #. name for huf msgid "Humene" -msgstr "" +msgstr "Humene" #. name for hug msgid "Huachipaeri" -msgstr "" +msgstr "Huachipaeri" #. name for huh msgid "Huilliche" -msgstr "" +msgstr "Huilliche" #. name for hui msgid "Huli" -msgstr "" +msgstr "Huli" #. name for huj msgid "Miao; Northern Guiyang" -msgstr "" +msgstr "Miao; Guiyang Utara" #. name for huk msgid "Hulung" -msgstr "" +msgstr "Hulung" #. name for hul msgid "Hula" -msgstr "" +msgstr "Hula" #. name for hum msgid "Hungana" -msgstr "" +msgstr "Hungana" #. name for hun msgid "Hungarian" @@ -9782,463 +9782,463 @@ msgstr "Hungarian" #. name for huo msgid "Hu" -msgstr "" +msgstr "Hu" #. name for hup msgid "Hupa" -msgstr "" +msgstr "Hupa" #. name for huq msgid "Tsat" -msgstr "" +msgstr "Tsat" #. name for hur msgid "Halkomelem" -msgstr "" +msgstr "Halkomelem" #. name for hus msgid "Huastec" -msgstr "" +msgstr "Huastec" #. name for hut msgid "Humla" -msgstr "" +msgstr "Humla" #. name for huu msgid "Huitoto; Murui" -msgstr "" +msgstr "Huitoto; Murui" #. name for huv msgid "Huave; San Mateo Del Mar" -msgstr "" +msgstr "Huave; San Mateo Del Mar" #. name for huw msgid "Hukumina" -msgstr "" +msgstr "Hukumina" #. name for hux msgid "Huitoto; Nüpode" -msgstr "" +msgstr "Huitoto; Nüpode" #. name for huy msgid "Hulaulá" -msgstr "" +msgstr "Hulaulá" #. name for huz msgid "Hunzib" -msgstr "" +msgstr "Hunzib" #. name for hvc msgid "Haitian Vodoun Culture Language" -msgstr "" +msgstr "Bahasa Budaya Haitian Vodoun" #. name for hve msgid "Huave; San Dionisio Del Mar" -msgstr "" +msgstr "Huave; San Dionisio Del Mar" #. name for hvk msgid "Haveke" -msgstr "" +msgstr "Haveke" #. name for hvn msgid "Sabu" -msgstr "" +msgstr "Sabu" #. name for hvv msgid "Huave; Santa María Del Mar" -msgstr "" +msgstr "Huave; Santa María Del Mar" #. name for hwa msgid "Wané" -msgstr "" +msgstr "Wané" #. name for hwc msgid "Creole English; Hawai'i" -msgstr "" +msgstr "Inggeris Creole; Hawai'i" #. name for hwo msgid "Hwana" -msgstr "" +msgstr "Hwana" #. name for hya msgid "Hya" -msgstr "" +msgstr "Hya" #. name for hye msgid "Armenian" -msgstr "" +msgstr "Armenia" #. name for iai msgid "Iaai" -msgstr "" +msgstr "Iaai" #. name for ian msgid "Iatmul" -msgstr "" +msgstr "Iatmul" #. name for iap msgid "Iapama" -msgstr "" +msgstr "Iapama" #. name for iar msgid "Purari" -msgstr "" +msgstr "Purari" #. name for iba msgid "Iban" -msgstr "" +msgstr "Iban" #. name for ibb msgid "Ibibio" -msgstr "" +msgstr "Ibibio" #. name for ibd msgid "Iwaidja" -msgstr "" +msgstr "Iwaidja" #. name for ibe msgid "Akpes" -msgstr "" +msgstr "Akpes" #. name for ibg msgid "Ibanag" -msgstr "" +msgstr "Ibanag" #. name for ibi msgid "Ibilo" -msgstr "" +msgstr "Ibilo" #. name for ibl msgid "Ibaloi" -msgstr "" +msgstr "Ibaloi" #. name for ibm msgid "Agoi" -msgstr "" +msgstr "Agoi" #. name for ibn msgid "Ibino" -msgstr "" +msgstr "Ibino" #. name for ibo msgid "Igbo" -msgstr "" +msgstr "Igbo" #. name for ibr msgid "Ibuoro" -msgstr "" +msgstr "Ibuoro" #. name for ibu msgid "Ibu" -msgstr "" +msgstr "Ibu" #. name for iby msgid "Ibani" -msgstr "" +msgstr "Ibani" #. name for ica msgid "Ede Ica" -msgstr "" +msgstr "Ede Ica" #. name for ich msgid "Etkywan" -msgstr "" +msgstr "Etkywan" #. name for icl msgid "Icelandic Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Iceland" #. name for icr msgid "Creole English; Islander" -msgstr "" +msgstr "Inggeris Creole; Islander" #. name for ida msgid "Idakho-Isukha-Tiriki" -msgstr "" +msgstr "Idakho-Isukha-Tiriki" #. name for idb msgid "Indo-Portuguese" -msgstr "" +msgstr "Indo-Portugis" #. name for idc msgid "Idon" -msgstr "" +msgstr "Idon" #. name for idd msgid "Ede Idaca" -msgstr "" +msgstr "Ede Idaca" #. name for ide msgid "Idere" -msgstr "" +msgstr "Idere" #. name for idi msgid "Idi" -msgstr "" +msgstr "Idi" #. name for ido msgid "Ido" -msgstr "" +msgstr "Ido" #. name for idr msgid "Indri" -msgstr "" +msgstr "Indri" #. name for ids msgid "Idesa" -msgstr "" +msgstr "Idesa" #. name for idt msgid "Idaté" -msgstr "" +msgstr "Idaté" #. name for idu msgid "Idoma" -msgstr "" +msgstr "Idoma" #. name for ifa msgid "Ifugao; Amganad" -msgstr "" +msgstr "Ifugao; Amganad" #. name for ifb msgid "Ifugao; Batad" -msgstr "" +msgstr "Ifugao; Batad" #. name for ife msgid "Ifè" -msgstr "" +msgstr "Ifè" #. name for iff msgid "Ifo" -msgstr "" +msgstr "Ifo" #. name for ifk msgid "Ifugao; Tuwali" -msgstr "" +msgstr "Ifugao; Tuwali" #. name for ifm msgid "Teke-Fuumu" -msgstr "" +msgstr "Teke-Fuumu" #. name for ifu msgid "Ifugao; Mayoyao" -msgstr "" +msgstr "Ifugao; Mayoyao" #. name for ify msgid "Kallahan; Keley-I" -msgstr "" +msgstr "Kallahan; Keley-I" #. name for igb msgid "Ebira" -msgstr "" +msgstr "Ebira" #. name for ige msgid "Igede" -msgstr "" +msgstr "Igede" #. name for igg msgid "Igana" -msgstr "" +msgstr "Igana" #. name for igl msgid "Igala" -msgstr "" +msgstr "Igala" #. name for igm msgid "Kanggape" -msgstr "" +msgstr "Kanggape" #. name for ign msgid "Ignaciano" -msgstr "" +msgstr "Ignaciano" #. name for igo msgid "Isebe" -msgstr "" +msgstr "Isebe" #. name for igs msgid "Interglossa" -msgstr "" +msgstr "Interglossa" #. name for igw msgid "Igwe" -msgstr "" +msgstr "Igwe" #. name for ihb msgid "Iha Based Pidgin" -msgstr "" +msgstr "Iha Based Pidgin" #. name for ihi msgid "Ihievbe" -msgstr "" +msgstr "Ihievbe" #. name for ihp msgid "Iha" -msgstr "" +msgstr "Iha" #. name for iii msgid "Yi; Sichuan" -msgstr "" +msgstr "Yi; Sichuan" #. name for ijc msgid "Izon" -msgstr "" +msgstr "Izon" #. name for ije msgid "Biseni" -msgstr "" +msgstr "Biseni" #. name for ijj msgid "Ede Ije" -msgstr "" +msgstr "Ede Ije" #. name for ijn msgid "Kalabari" -msgstr "" +msgstr "Kalabari" #. name for ijs msgid "Ijo; Southeast" -msgstr "" +msgstr "Ijo; Tenggara" #. name for ike msgid "Inuktitut; Eastern Canadian" -msgstr "" +msgstr "Inuktitut; Kanadi Timur" #. name for iki msgid "Iko" -msgstr "" +msgstr "Iko" #. name for ikk msgid "Ika" -msgstr "" +msgstr "Ika" #. name for ikl msgid "Ikulu" -msgstr "" +msgstr "Ikulu" #. name for iko msgid "Olulumo-Ikom" -msgstr "" +msgstr "Olulumo-Ikom" #. name for ikp msgid "Ikpeshi" -msgstr "" +msgstr "Ikpeshi" #. name for ikt msgid "Inuktitut; Western Canadian" -msgstr "" +msgstr "Inuktitut; Kanadi Barat" #. name for iku msgid "Inuktitut" -msgstr "" +msgstr "Inuktitut" #. name for ikv msgid "Iku-Gora-Ankwa" -msgstr "" +msgstr "Iku-Gora-Ankwa" #. name for ikw msgid "Ikwere" -msgstr "" +msgstr "Ikwere" #. name for ikx msgid "Ik" -msgstr "" +msgstr "Ik" #. name for ikz msgid "Ikizu" -msgstr "" +msgstr "Ikizu" #. name for ila msgid "Ile Ape" -msgstr "" +msgstr "Ile Ape" #. name for ilb msgid "Ila" -msgstr "" +msgstr "Ila" #. name for ile msgid "Interlingue" -msgstr "" +msgstr "Interlingua" #. name for ilg msgid "Garig-Ilgar" -msgstr "" +msgstr "Garig-Ilgar" #. name for ili msgid "Ili Turki" -msgstr "" +msgstr "Ili Turki" #. name for ilk msgid "Ilongot" -msgstr "" +msgstr "Ilongot" #. name for ill msgid "Iranun" -msgstr "" +msgstr "Iranun" #. name for ilo msgid "Iloko" -msgstr "" +msgstr "Iloko" #. name for ils msgid "International Sign" -msgstr "" +msgstr "Isyarat Antarabangsa" #. name for ilu msgid "Ili'uun" -msgstr "" +msgstr "Ili'uun" #. name for ilv msgid "Ilue" -msgstr "" +msgstr "Ilue" #. name for ilw msgid "Talur" -msgstr "" +msgstr "Talur" #. name for ima msgid "Malasar; Mala" -msgstr "" +msgstr "Malasar; Mala" #. name for ime msgid "Imeraguen" -msgstr "" +msgstr "Imeraguen" #. name for imi msgid "Anamgura" -msgstr "" +msgstr "Anamgura" #. name for iml msgid "Miluk" -msgstr "" +msgstr "Miluk" #. name for imn msgid "Imonda" -msgstr "" +msgstr "Imonda" #. name for imo msgid "Imbongu" -msgstr "" +msgstr "Imbongu" #. name for imr msgid "Imroing" -msgstr "" +msgstr "Imroing" #. name for ims msgid "Marsian" -msgstr "" +msgstr "Marsian" #. name for imy msgid "Milyan" -msgstr "" +msgstr "Milyan" #. name for ina msgid "Interlingua (International Auxiliary Language Association)" -msgstr "" +msgstr "Interlingua (International Auxiliary Language Association)" #. name for inb msgid "Inga" -msgstr "" +msgstr "Inga" #. name for ind msgid "Indonesian" @@ -10246,143 +10246,143 @@ msgstr "Indonesia" #. name for ing msgid "Degexit'an" -msgstr "" +msgstr "Degexit'an" #. name for inh msgid "Ingush" -msgstr "" +msgstr "Ingush" #. name for inj msgid "Inga; Jungle" -msgstr "" +msgstr "Inga; Hutan" #. name for inl msgid "Indonesian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Indonesia" #. name for inm msgid "Minaean" -msgstr "" +msgstr "Minaea" #. name for inn msgid "Isinai" -msgstr "" +msgstr "Isinai" #. name for ino msgid "Inoke-Yate" -msgstr "" +msgstr "Inoke-Yate" #. name for inp msgid "Iñapari" -msgstr "" +msgstr "Iñapari" #. name for ins msgid "Indian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat India" #. name for int msgid "Intha" -msgstr "" +msgstr "Intha" #. name for inz msgid "Ineseño" -msgstr "" +msgstr "Ineseño" #. name for ior msgid "Inor" -msgstr "" +msgstr "Inor" #. name for iou msgid "Tuma-Irumu" -msgstr "" +msgstr "Tuma-Irumu" #. name for iow msgid "Iowa-Oto" -msgstr "" +msgstr "Iowa-Oto" #. name for ipi msgid "Ipili" -msgstr "" +msgstr "Ipili" #. name for ipk msgid "Inupiaq" -msgstr "" +msgstr "Inupiaq" #. name for ipo msgid "Ipiko" -msgstr "" +msgstr "Ipiko" #. name for iqu msgid "Iquito" -msgstr "" +msgstr "Iquito" #. name for ire msgid "Iresim" -msgstr "" +msgstr "Iresim" #. name for irh msgid "Irarutu" -msgstr "" +msgstr "Irarutu" #. name for iri msgid "Irigwe" -msgstr "" +msgstr "Irigwe" #. name for irk msgid "Iraqw" -msgstr "" +msgstr "Iraqw" #. name for irn msgid "Irántxe" -msgstr "" +msgstr "Irántxe" #. name for irr msgid "Ir" -msgstr "" +msgstr "Ir" #. name for iru msgid "Irula" -msgstr "" +msgstr "Irula" #. name for irx msgid "Kamberau" -msgstr "" +msgstr "Kamberau" #. name for iry msgid "Iraya" -msgstr "" +msgstr "Iraya" #. name for isa msgid "Isabi" -msgstr "" +msgstr "Isabi" #. name for isc msgid "Isconahua" -msgstr "" +msgstr "Isconahua" #. name for isd msgid "Isnag" -msgstr "" +msgstr "Isnag" #. name for ise msgid "Italian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Itali" #. name for isg msgid "Irish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Ireland" #. name for ish msgid "Esan" -msgstr "" +msgstr "Esan" #. name for isi msgid "Nkem-Nkum" -msgstr "" +msgstr "Nkem-Nkum" #. name for isk msgid "Ishkashimi" -msgstr "" +msgstr "Ishkashimi" #. name for isl msgid "Icelandic" @@ -10390,27 +10390,27 @@ msgstr "Icelandic" #. name for ism msgid "Masimasi" -msgstr "" +msgstr "Masimasi" #. name for isn msgid "Isanzu" -msgstr "" +msgstr "Isanzu" #. name for iso msgid "Isoko" -msgstr "" +msgstr "Isoko" #. name for isr msgid "Israeli Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Israel" #. name for ist msgid "Istriot" -msgstr "" +msgstr "Istriot" #. name for isu msgid "Isu (Menchum Division)" -msgstr "" +msgstr "Isu (Bahagian Menchum)" #. name for ita msgid "Italian" @@ -10418,491 +10418,491 @@ msgstr "Itali" #. name for itb msgid "Itneg; Binongan" -msgstr "" +msgstr "Itneg; Binongan" #. name for ite msgid "Itene" -msgstr "" +msgstr "Itene" #. name for iti msgid "Itneg; Inlaod" -msgstr "" +msgstr "Itneg; Inlaod" #. name for itk msgid "Judeo-Italian" -msgstr "" +msgstr "Yahudi-Itali" #. name for itl msgid "Itelmen" -msgstr "" +msgstr "Itelmen" #. name for itm msgid "Itu Mbon Uzo" -msgstr "" +msgstr "Itu Mbon Uzo" #. name for ito msgid "Itonama" -msgstr "" +msgstr "Itonama" #. name for itr msgid "Iteri" -msgstr "" +msgstr "Iteri" #. name for its msgid "Isekiri" -msgstr "" +msgstr "Isekiri" #. name for itt msgid "Itneg; Maeng" -msgstr "" +msgstr "Itneg; Maeng" #. name for itv msgid "Itawit" -msgstr "" +msgstr "Itawit" #. name for itw msgid "Ito" -msgstr "" +msgstr "Ito" #. name for itx msgid "Itik" -msgstr "" +msgstr "Itik" #. name for ity msgid "Itneg; Moyadan" -msgstr "" +msgstr "Itneg; Moyadan" #. name for itz msgid "Itzá" -msgstr "" +msgstr "Itzá" #. name for ium msgid "Mien; Iu" -msgstr "" +msgstr "Mien; Iu" #. name for ivb msgid "Ibatan" -msgstr "" +msgstr "Ibatan" #. name for ivv msgid "Ivatan" -msgstr "" +msgstr "Ivatan" #. name for iwk msgid "I-Wak" -msgstr "" +msgstr "I-Wak" #. name for iwm msgid "Iwam" -msgstr "" +msgstr "Iwam" #. name for iwo msgid "Iwur" -msgstr "" +msgstr "Iwur" #. name for iws msgid "Iwam; Sepik" -msgstr "" +msgstr "Iwam; Sepik" #. name for ixc msgid "Ixcatec" -msgstr "" +msgstr "Ixcatec" #. name for ixl msgid "Ixil" -msgstr "" +msgstr "Ixil" #. name for iya msgid "Iyayu" -msgstr "" +msgstr "Iyayu" #. name for iyo msgid "Mesaka" -msgstr "" +msgstr "Mesaka" #. name for iyx msgid "Yaka (Congo)" -msgstr "" +msgstr "Yaka (Congo)" #. name for izh msgid "Ingrian" -msgstr "" +msgstr "Ingrian" #. name for izi msgid "Izi-Ezaa-Ikwo-Mgbo" -msgstr "" +msgstr "Izi-Ezaa-Ikwo-Mgbo" #. name for izr msgid "Izere" -msgstr "" +msgstr "Izere" #. name for jaa msgid "Jamamadí" -msgstr "" +msgstr "Jamamadí" #. name for jab msgid "Hyam" -msgstr "" +msgstr "Hyam" #. name for jac msgid "Popti'" -msgstr "" +msgstr "Popti'" #. name for jad msgid "Jahanka" -msgstr "" +msgstr "Jahanka" #. name for jae msgid "Yabem" -msgstr "" +msgstr "Yabem" #. name for jaf msgid "Jara" -msgstr "" +msgstr "Jara" #. name for jah msgid "Jah Hut" -msgstr "" +msgstr "Jah Hut" #. name for jaj msgid "Zazao" -msgstr "" +msgstr "Zazao" #. name for jak msgid "Jakun" -msgstr "" +msgstr "Jakun" #. name for jal msgid "Yalahatan" -msgstr "" +msgstr "Yalahatan" #. name for jam msgid "Creole English; Jamaican" -msgstr "" +msgstr "Inggeris Creole; Jamaica" #. name for jao msgid "Yanyuwa" -msgstr "" +msgstr "Yanyuwa" #. name for jaq msgid "Yaqay" -msgstr "" +msgstr "Yaqay" #. name for jar msgid "Jarawa (Nigeria)" -msgstr "" +msgstr "Jarawa (Nigeria)" #. name for jas msgid "Javanese; New Caledonian" -msgstr "" +msgstr "Jawa; New Caledonia" #. name for jat msgid "Jakati" -msgstr "" +msgstr "Jakati" #. name for jau msgid "Yaur" -msgstr "" +msgstr "Yaur" #. name for jav msgid "Javanese" -msgstr "" +msgstr "Jawa" #. name for jax msgid "Malay; Jambi" -msgstr "" +msgstr "Melayu; Jambi" #. name for jay msgid "Yan-nhangu" -msgstr "" +msgstr "Yan-nhangu" #. name for jaz msgid "Jawe" -msgstr "" +msgstr "Jawe" #. name for jbe msgid "Judeo-Berber" -msgstr "" +msgstr "Yahudi-Barbar" #. name for jbj msgid "Arandai" -msgstr "" +msgstr "Arandai" #. name for jbn msgid "Nafusi" -msgstr "" +msgstr "Nafusi" #. name for jbo msgid "Lojban" -msgstr "" +msgstr "Lojban" #. name for jbr msgid "Jofotek-Bromnya" -msgstr "" +msgstr "Jofotek-Bromnya" #. name for jbt msgid "Jabutí" -msgstr "" +msgstr "Jabutí" #. name for jbu msgid "Jukun Takum" -msgstr "" +msgstr "Jukun Takum" #. name for jcs msgid "Jamaican Country Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Negara Jamaica" #. name for jct msgid "Krymchak" -msgstr "" +msgstr "Krymchak" #. name for jda msgid "Jad" -msgstr "" +msgstr "Jad" #. name for jdg msgid "Jadgali" -msgstr "" +msgstr "Jadgali" #. name for jdt msgid "Judeo-Tat" -msgstr "" +msgstr "Judeo-Tat" #. name for jeb msgid "Jebero" -msgstr "" +msgstr "Jebero" #. name for jee msgid "Jerung" -msgstr "" +msgstr "Jerung" #. name for jeg msgid "Jeng" -msgstr "" +msgstr "Jeng" #. name for jeh msgid "Jeh" -msgstr "" +msgstr "Jeh" #. name for jei msgid "Yei" -msgstr "" +msgstr "Yei" #. name for jek msgid "Jeri Kuo" -msgstr "" +msgstr "Jeri Kuo" #. name for jel msgid "Yelmek" -msgstr "" +msgstr "Yelmek" #. name for jen msgid "Dza" -msgstr "" +msgstr "Dza" #. name for jer msgid "Jere" -msgstr "" +msgstr "Jere" #. name for jet msgid "Manem" -msgstr "" +msgstr "Manem" #. name for jeu msgid "Jonkor Bourmataguil" -msgstr "" +msgstr "Jonkor Bourmataguil" #. name for jgb msgid "Ngbee" -msgstr "" +msgstr "Ngbee" #. name for jge msgid "Judeo-Georgian" -msgstr "" +msgstr "Yahudi-Georgia" #. name for jgo msgid "Ngomba" -msgstr "" +msgstr "Ngomba" #. name for jhi msgid "Jehai" -msgstr "" +msgstr "Jehai" #. name for jhs msgid "Jhankot Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jhankot" #. name for jia msgid "Jina" -msgstr "" +msgstr "Jina" #. name for jib msgid "Jibu" -msgstr "" +msgstr "Jibu" #. name for jic msgid "Tol" -msgstr "" +msgstr "Tol" #. name for jid msgid "Bu" -msgstr "" +msgstr "Bu" #. name for jie msgid "Jilbe" -msgstr "" +msgstr "Jilbe" #. name for jig msgid "Djingili" -msgstr "" +msgstr "Djingili" #. name for jih msgid "Shangzhai" -msgstr "" +msgstr "Shangzhai" #. name for jii msgid "Jiiddu" -msgstr "" +msgstr "Jiiddu" #. name for jil msgid "Jilim" -msgstr "" +msgstr "Jilim" #. name for jim msgid "Jimi (Cameroon)" -msgstr "" +msgstr "Jimi (Cameroon)" #. name for jio msgid "Jiamao" -msgstr "" +msgstr "Jiamao" #. name for jiq msgid "Guanyinqiao" -msgstr "" +msgstr "Guanyinqiao" #. name for jit msgid "Jita" -msgstr "" +msgstr "Jita" #. name for jiu msgid "Jinuo; Youle" -msgstr "" +msgstr "Jinuo; Youle" #. name for jiv msgid "Shuar" -msgstr "" +msgstr "Shuar" #. name for jiy msgid "Jinuo; Buyuan" -msgstr "" +msgstr "Jinuo; Buyuan" #. name for jko msgid "Kubo" -msgstr "" +msgstr "Kubo" #. name for jku msgid "Labir" -msgstr "" +msgstr "Labir" #. name for jle msgid "Ngile" -msgstr "" +msgstr "Ngile" #. name for jls msgid "Jamaican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jamaica" #. name for jma msgid "Dima" -msgstr "" +msgstr "Dima" #. name for jmb msgid "Zumbun" -msgstr "" +msgstr "Zumbun" #. name for jmc msgid "Machame" -msgstr "" +msgstr "Machame" #. name for jmd msgid "Yamdena" -msgstr "" +msgstr "Yamdena" #. name for jmi msgid "Jimi (Nigeria)" -msgstr "" +msgstr "Jimi (Nigeria)" #. name for jml msgid "Jumli" -msgstr "" +msgstr "Jumli" #. name for jmn msgid "Naga; Makuri" -msgstr "" +msgstr "Naga; Makuri" #. name for jmr msgid "Kamara" -msgstr "" +msgstr "Kamara" #. name for jms msgid "Mashi (Nigeria)" -msgstr "" +msgstr "Mashi (Nigeria)" #. name for jmx msgid "Mixtec; Western Juxtlahuaca" -msgstr "" +msgstr "Mixtec; Juxtlahuaca Barat" #. name for jna msgid "Jangshung" -msgstr "" +msgstr "Jangshung" #. name for jnd msgid "Jandavra" -msgstr "" +msgstr "Jandavra" #. name for jng msgid "Yangman" -msgstr "" +msgstr "Yangman" #. name for jni msgid "Janji" -msgstr "" +msgstr "Janji" #. name for jnj msgid "Yemsa" -msgstr "" +msgstr "Yemsa" #. name for jnl msgid "Rawat" -msgstr "" +msgstr "Rawat" #. name for jns msgid "Jaunsari" -msgstr "" +msgstr "Jaunsari" #. name for job msgid "Joba" -msgstr "" +msgstr "Joba" #. name for jod msgid "Wojenaka" -msgstr "" +msgstr "Wojenaka" #. name for jor msgid "Jorá" -msgstr "" +msgstr "Jorá" #. name for jos msgid "Jordanian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jordan" #. name for jow msgid "Jowulu" -msgstr "" +msgstr "Jowulu" #. name for jpa msgid "Aramaic; Jewish Palestinian" -msgstr "" +msgstr "Aramik; Yahudi Palestini" #. name for jpn msgid "Japanese" @@ -10910,1611 +10910,1611 @@ msgstr "Japanese" #. name for jpr msgid "Judeo-Persian" -msgstr "" +msgstr "Yahudi-Parsi" #. name for jqr msgid "Jaqaru" -msgstr "" +msgstr "Jaqaru" #. name for jra msgid "Jarai" -msgstr "" +msgstr "Jarai" #. name for jrb msgid "Judeo-Arabic" -msgstr "" +msgstr "Yahudi-Arab" #. name for jrr msgid "Jiru" -msgstr "" +msgstr "Jiru" #. name for jrt msgid "Jorto" -msgstr "" +msgstr "Jorto" #. name for jru msgid "Japrería" -msgstr "" +msgstr "Japrería" #. name for jsl msgid "Japanese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jepun" #. name for jua msgid "Júma" -msgstr "" +msgstr "Júma" #. name for jub msgid "Wannu" -msgstr "" +msgstr "Wannu" #. name for juc msgid "Jurchen" -msgstr "" +msgstr "Jurchen" #. name for jud msgid "Worodougou" -msgstr "" +msgstr "Worodougou" #. name for juh msgid "Hõne" -msgstr "" +msgstr "Hõne" #. name for juk msgid "Wapan" -msgstr "" +msgstr "Wapan" #. name for jul msgid "Jirel" -msgstr "" +msgstr "Jirel" #. name for jum msgid "Jumjum" -msgstr "" +msgstr "Jumjum" #. name for jun msgid "Juang" -msgstr "" +msgstr "Juang" #. name for juo msgid "Jiba" -msgstr "" +msgstr "Jiba" #. name for jup msgid "Hupdë" -msgstr "" +msgstr "Hupdë" #. name for jur msgid "Jurúna" -msgstr "" +msgstr "Jurúna" #. name for jus msgid "Jumla Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jumla" #. name for jut msgid "Jutish" -msgstr "" +msgstr "Jutish" #. name for juu msgid "Ju" -msgstr "" +msgstr "Ju" #. name for juw msgid "Wãpha" -msgstr "" +msgstr "Wãpha" #. name for juy msgid "Juray" -msgstr "" +msgstr "Juray" #. name for jvd msgid "Javindo" -msgstr "" +msgstr "Javindo" #. name for jvn msgid "Javanese; Caribbean" -msgstr "" +msgstr "Jawa; Caribbean" #. name for jwi msgid "Jwira-Pepesa" -msgstr "" +msgstr "Jwira-Pepesa" #. name for jya msgid "Jiarong" -msgstr "" +msgstr "Jiarong" #. name for jye msgid "Arabic; Judeo-Yemeni" -msgstr "" +msgstr "Arab; Yahudi-Yaman" #. name for jyy msgid "Jaya" -msgstr "" +msgstr "Jaya" #. name for kaa msgid "Kara-Kalpak" -msgstr "" +msgstr "Kara-Kalpak" #. name for kab msgid "Kabyle" -msgstr "" +msgstr "Kabyle" #. name for kac msgid "Kachin" -msgstr "" +msgstr "Kachin" #. name for kad msgid "Kadara" -msgstr "" +msgstr "Kadara" #. name for kae msgid "Ketangalan" -msgstr "" +msgstr "Ketangalan" #. name for kaf msgid "Katso" -msgstr "" +msgstr "Katso" #. name for kag msgid "Kajaman" -msgstr "" +msgstr "Kajaman" #. name for kah msgid "Kara (Central African Republic)" -msgstr "" +msgstr "Kara (Republik Afrika Tengah)" #. name for kai msgid "Karekare" -msgstr "" +msgstr "Karekare" #. name for kaj msgid "Jju" -msgstr "" +msgstr "Jju" #. name for kak msgid "Kallahan; Kayapa" -msgstr "" +msgstr "Kallahan; Kayapa" #. name for kal msgid "Kalaallisut" -msgstr "" +msgstr "Kalaallisut" #. name for kam msgid "Kamba (Kenya)" -msgstr "" +msgstr "Kamba (Kenya)" #. name for kan msgid "Kannada" -msgstr "" +msgstr "Kannada" #. name for kao msgid "Xaasongaxango" -msgstr "" +msgstr "Xaasongaxango" #. name for kap msgid "Bezhta" -msgstr "" +msgstr "Bezhta" #. name for kaq msgid "Capanahua" -msgstr "" +msgstr "Capanahua" #. name for kas msgid "Kashmiri" -msgstr "" +msgstr "Kashmiri" #. name for kat msgid "Georgian" -msgstr "" +msgstr "Georgia" #. name for kau msgid "Kanuri" -msgstr "" +msgstr "Kanuri" #. name for kav msgid "Katukína" -msgstr "" +msgstr "Katukína" #. name for kaw msgid "Kawi" -msgstr "" +msgstr "Kawi" #. name for kax msgid "Kao" -msgstr "" +msgstr "Kao" #. name for kay msgid "Kamayurá" -msgstr "" +msgstr "Kamayurá" #. name for kaz msgid "Kazakh" -msgstr "" +msgstr "Kazakh" #. name for kba msgid "Kalarko" -msgstr "" +msgstr "Kalarko" #. name for kbb msgid "Kaxuiâna" -msgstr "" +msgstr "Kaxuiâna" #. name for kbc msgid "Kadiwéu" -msgstr "" +msgstr "Kadiwéu" #. name for kbd msgid "Kabardian" -msgstr "" +msgstr "Kabardi" #. name for kbe msgid "Kanju" -msgstr "" +msgstr "Kanju" #. name for kbf msgid "Kakauhua" -msgstr "" +msgstr "Kakauhua" #. name for kbg msgid "Khamba" -msgstr "" +msgstr "Khamba" #. name for kbh msgid "Camsá" -msgstr "" +msgstr "Camsá" #. name for kbi msgid "Kaptiau" -msgstr "" +msgstr "Kaptiau" #. name for kbj msgid "Kari" -msgstr "" +msgstr "Kari" #. name for kbk msgid "Koiari; Grass" -msgstr "" +msgstr "Koiari; Grass" #. name for kbl msgid "Kanembu" -msgstr "" +msgstr "Kanembu" #. name for kbm msgid "Iwal" -msgstr "" +msgstr "Iwal" #. name for kbn msgid "Kare (Central African Republic)" -msgstr "" +msgstr "Kare (Republik Afrika Tengah)" #. name for kbo msgid "Keliko" -msgstr "" +msgstr "Keliko" #. name for kbp msgid "Kabiyè" -msgstr "" +msgstr "Kabiyè" #. name for kbq msgid "Kamano" -msgstr "" +msgstr "Kamano" #. name for kbr msgid "Kafa" -msgstr "" +msgstr "Kafa" #. name for kbs msgid "Kande" -msgstr "" +msgstr "Kande" #. name for kbt msgid "Abadi" -msgstr "" +msgstr "Abadi" #. name for kbu msgid "Kabutra" -msgstr "" +msgstr "Kabutra" #. name for kbv msgid "Dera (Indonesia)" -msgstr "" +msgstr "Dera (Indonesia)" #. name for kbw msgid "Kaiep" -msgstr "" +msgstr "Kaiep" #. name for kbx msgid "Ap Ma" -msgstr "" +msgstr "Ap Ma" #. name for kby msgid "Kanuri; Manga" -msgstr "" +msgstr "Kanuri; Manga" #. name for kbz msgid "Duhwa" -msgstr "" +msgstr "Duhwa" #. name for kca msgid "Khanty" -msgstr "" +msgstr "Khanty" #. name for kcb msgid "Kawacha" -msgstr "" +msgstr "Kawacha" #. name for kcc msgid "Lubila" -msgstr "" +msgstr "Lubila" #. name for kcd msgid "Kanum; Ngkâlmpw" -msgstr "" +msgstr "Kanum; Ngkâlmpw" #. name for kce msgid "Kaivi" -msgstr "" +msgstr "Kaivi" #. name for kcf msgid "Ukaan" -msgstr "" +msgstr "Ukaan" #. name for kcg msgid "Tyap" -msgstr "" +msgstr "Tyap" #. name for kch msgid "Vono" -msgstr "" +msgstr "Vono" #. name for kci msgid "Kamantan" -msgstr "" +msgstr "Kamantan" #. name for kcj msgid "Kobiana" -msgstr "" +msgstr "Kobiana" #. name for kck msgid "Kalanga" -msgstr "" +msgstr "Kalanga" #. name for kcl msgid "Kela (Papua New Guinea)" -msgstr "" +msgstr "Kela (Papua New Guinea)" #. name for kcm msgid "Gula (Central African Republic)" -msgstr "" +msgstr "Gula (Central African Republic)" #. name for kcn msgid "Nubi" -msgstr "" +msgstr "Nubi" #. name for kco msgid "Kinalakna" -msgstr "" +msgstr "Kinalakna" #. name for kcp msgid "Kanga" -msgstr "" +msgstr "Kanga" #. name for kcq msgid "Kamo" -msgstr "" +msgstr "Kamo" #. name for kcr msgid "Katla" -msgstr "" +msgstr "Katla" #. name for kcs msgid "Koenoem" -msgstr "" +msgstr "Koenoem" #. name for kct msgid "Kaian" -msgstr "" +msgstr "Kaian" #. name for kcu msgid "Kami (Tanzania)" -msgstr "" +msgstr "Kami (Tanzania)" #. name for kcv msgid "Kete" -msgstr "" +msgstr "Kete" #. name for kcw msgid "Kabwari" -msgstr "" +msgstr "Kabwari" #. name for kcx msgid "Kachama-Ganjule" -msgstr "" +msgstr "Kachama-Ganjule" #. name for kcy msgid "Korandje" -msgstr "" +msgstr "Korandje" #. name for kcz msgid "Konongo" -msgstr "" +msgstr "Konongo" #. name for kda msgid "Worimi" -msgstr "" +msgstr "Worimi" #. name for kdc msgid "Kutu" -msgstr "" +msgstr "Kutu" #. name for kdd msgid "Yankunytjatjara" -msgstr "" +msgstr "Yankunytjatjara" #. name for kde msgid "Makonde" -msgstr "" +msgstr "Makonde" #. name for kdf msgid "Mamusi" -msgstr "" +msgstr "Mamusi" #. name for kdg msgid "Seba" -msgstr "" +msgstr "Seba" #. name for kdh msgid "Tem" -msgstr "" +msgstr "Tem" #. name for kdi msgid "Kumam" -msgstr "" +msgstr "Kumam" #. name for kdj msgid "Karamojong" -msgstr "" +msgstr "Karamojong" #. name for kdk msgid "Numee" -msgstr "" +msgstr "Numee" #. name for kdl msgid "Tsikimba" -msgstr "" +msgstr "Tsikimba" #. name for kdm msgid "Kagoma" -msgstr "" +msgstr "Kagoma" #. name for kdn msgid "Kunda" -msgstr "" +msgstr "Kunda" #. name for kdp msgid "Kaningdon-Nindem" -msgstr "" +msgstr "Kaningdon-Nindem" #. name for kdq msgid "Koch" -msgstr "" +msgstr "Koch" #. name for kdr msgid "Karaim" -msgstr "" +msgstr "Karaim" #. name for kdt msgid "Kuy" -msgstr "" +msgstr "Kuy" #. name for kdu msgid "Kadaru" -msgstr "" +msgstr "Kadaru" #. name for kdv msgid "Kado" -msgstr "" +msgstr "Kado" #. name for kdw msgid "Koneraw" -msgstr "" +msgstr "Koneraw" #. name for kdx msgid "Kam" -msgstr "" +msgstr "Kam" #. name for kdy msgid "Keder" -msgstr "" +msgstr "Keder" #. name for kdz msgid "Kwaja" -msgstr "" +msgstr "Kwaja" #. name for kea msgid "Kabuverdianu" -msgstr "" +msgstr "Kabuverdianu" #. name for keb msgid "Kélé" -msgstr "" +msgstr "Kélé" #. name for kec msgid "Keiga" -msgstr "" +msgstr "Keiga" #. name for ked msgid "Kerewe" -msgstr "" +msgstr "Kerewe" #. name for kee msgid "Keres; Eastern" -msgstr "" +msgstr "Keres; Timur" #. name for kef msgid "Kpessi" -msgstr "" +msgstr "Kpessi" #. name for keg msgid "Tese" -msgstr "" +msgstr "Tese" #. name for keh msgid "Keak" -msgstr "" +msgstr "Keak" #. name for kei msgid "Kei" -msgstr "" +msgstr "Kei" #. name for kej msgid "Kadar" -msgstr "" +msgstr "Kadar" #. name for kek msgid "Kekchí" -msgstr "" +msgstr "Kekchí" #. name for kel msgid "Kela (Democratic Republic of Congo)" -msgstr "" +msgstr "Kela (Republik Democratik Congo)" #. name for kem msgid "Kemak" -msgstr "" +msgstr "Kemak" #. name for ken msgid "Kenyang" -msgstr "" +msgstr "Kenyang" #. name for keo msgid "Kakwa" -msgstr "" +msgstr "Kakwa" #. name for kep msgid "Kaikadi" -msgstr "" +msgstr "Kaikadi" #. name for keq msgid "Kamar" -msgstr "" +msgstr "Kamar" #. name for ker msgid "Kera" -msgstr "" +msgstr "Kera" #. name for kes msgid "Kugbo" -msgstr "" +msgstr "Kugbo" #. name for ket msgid "Ket" -msgstr "" +msgstr "Ket" #. name for keu msgid "Akebu" -msgstr "" +msgstr "Akebu" #. name for kev msgid "Kanikkaran" -msgstr "" +msgstr "Kanikkaran" #. name for kew msgid "Kewa; West" -msgstr "" +msgstr "Kewa; Barat" #. name for kex msgid "Kukna" -msgstr "" +msgstr "Kukna" #. name for key msgid "Kupia" -msgstr "" +msgstr "Kupia" #. name for kez msgid "Kukele" -msgstr "" +msgstr "Kukele" #. name for kfa msgid "Kodava" -msgstr "" +msgstr "Kodava" #. name for kfb msgid "Kolami; Northwestern" -msgstr "" +msgstr "Kolami; Barat Laut" #. name for kfc msgid "Konda-Dora" -msgstr "" +msgstr "Konda-Dora" #. name for kfd msgid "Koraga; Korra" -msgstr "" +msgstr "Koraga; Korra" #. name for kfe msgid "Kota (India)" -msgstr "" +msgstr "Kota (India)" #. name for kff msgid "Koya" -msgstr "" +msgstr "Koya" #. name for kfg msgid "Kudiya" -msgstr "" +msgstr "Kudiya" #. name for kfh msgid "Kurichiya" -msgstr "" +msgstr "Kurichiya" #. name for kfi msgid "Kurumba; Kannada" -msgstr "" +msgstr "Kurumba; Kannada" #. name for kfj msgid "Kemiehua" -msgstr "" +msgstr "Kemiehua" #. name for kfk msgid "Kinnauri" -msgstr "" +msgstr "Kinnauri" #. name for kfl msgid "Kung" -msgstr "" +msgstr "Kung" #. name for kfm msgid "Khunsari" -msgstr "" +msgstr "Khunsari" #. name for kfn msgid "Kuk" -msgstr "" +msgstr "Kuk" #. name for kfo msgid "Koro (Côte d'Ivoire)" -msgstr "" +msgstr "Koro (Côte d'Ivoire)" #. name for kfp msgid "Korwa" -msgstr "" +msgstr "Korwa" #. name for kfq msgid "Korku" -msgstr "" +msgstr "Korku" #. name for kfr msgid "Kachchi" -msgstr "" +msgstr "Kachchi" #. name for kfs msgid "Bilaspuri" -msgstr "" +msgstr "Bilaspuri" #. name for kft msgid "Kanjari" -msgstr "" +msgstr "Kanjari" #. name for kfu msgid "Katkari" -msgstr "" +msgstr "Katkari" #. name for kfv msgid "Kurmukar" -msgstr "" +msgstr "Kurmukar" #. name for kfw msgid "Naga; Kharam" -msgstr "" +msgstr "Naga; Kharam" #. name for kfx msgid "Pahari; Kullu" -msgstr "" +msgstr "Pahari; Kullu" #. name for kfy msgid "Kumaoni" -msgstr "" +msgstr "Kumaoni" #. name for kfz msgid "Koromfé" -msgstr "" +msgstr "Koromfé" #. name for kga msgid "Koyaga" -msgstr "" +msgstr "Koyaga" #. name for kgb msgid "Kawe" -msgstr "" +msgstr "Kawe" #. name for kgc msgid "Kasseng" -msgstr "" +msgstr "Kasseng" #. name for kgd msgid "Kataang" -msgstr "" +msgstr "Kataang" #. name for kge msgid "Komering" -msgstr "" +msgstr "Komering" #. name for kgf msgid "Kube" -msgstr "" +msgstr "Kube" #. name for kgg msgid "Kusunda" -msgstr "" +msgstr "Kusunda" #. name for kgh msgid "Kalinga; Upper Tanudan" -msgstr "" +msgstr "Kalinga; Tanudan Atas" #. name for kgi msgid "Selangor Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Selangor" #. name for kgj msgid "Kham; Gamale" -msgstr "" +msgstr "Kham; Gamale" #. name for kgk msgid "Kaiwá" -msgstr "" +msgstr "Kaiwá" #. name for kgl msgid "Kunggari" -msgstr "" +msgstr "Kunggari" #. name for kgm msgid "Karipúna" -msgstr "" +msgstr "Karipúna" #. name for kgn msgid "Karingani" -msgstr "" +msgstr "Karingani" #. name for kgo msgid "Krongo" -msgstr "" +msgstr "Krongo" #. name for kgp msgid "Kaingang" -msgstr "" +msgstr "Kaingang" #. name for kgq msgid "Kamoro" -msgstr "" +msgstr "Kamoro" #. name for kgr msgid "Abun" -msgstr "" +msgstr "Abun" #. name for kgs msgid "Kumbainggar" -msgstr "" +msgstr "Kumbainggar" #. name for kgt msgid "Somyev" -msgstr "" +msgstr "Somyev" #. name for kgu msgid "Kobol" -msgstr "" +msgstr "Kobol" #. name for kgv msgid "Karas" -msgstr "" +msgstr "Karas" #. name for kgw msgid "Karon Dori" -msgstr "" +msgstr "Karon Dori" #. name for kgx msgid "Kamaru" -msgstr "" +msgstr "Kamaru" #. name for kgy msgid "Kyerung" -msgstr "" +msgstr "Kyerung" #. name for kha msgid "Khasi" -msgstr "" +msgstr "Khasi" #. name for khb msgid "Lü" -msgstr "" +msgstr "Lü" #. name for khc msgid "Tukang Besi North" -msgstr "" +msgstr "Tukang Besi Utara" #. name for khd msgid "Kanum; Bädi" -msgstr "" +msgstr "Kanum; Bädi" #. name for khe msgid "Korowai" -msgstr "" +msgstr "Korowai" #. name for khf msgid "Khuen" -msgstr "" +msgstr "Khuen" #. name for khg msgid "Tibetan; Khams" -msgstr "" +msgstr "Tibet; Khams" #. name for khh msgid "Kehu" -msgstr "" +msgstr "Kehu" #. name for khj msgid "Kuturmi" -msgstr "" +msgstr "Kuturmi" #. name for khk msgid "Mongolian; Halh" -msgstr "" +msgstr "Mongolia; Halh" #. name for khl msgid "Lusi" -msgstr "" +msgstr "Lusi" #. name for khm msgid "Khmer; Central" -msgstr "" +msgstr "Khmer; Pusat" #. name for khn msgid "Khandesi" -msgstr "" +msgstr "Khandesi" #. name for kho msgid "Khotanese" -msgstr "" +msgstr "Khotan" #. name for khp msgid "Kapori" -msgstr "" +msgstr "Kapori" #. name for khq msgid "Songhay; Koyra Chiini" -msgstr "" +msgstr "Songhay; Koyra Chiini" #. name for khr msgid "Kharia" -msgstr "" +msgstr "Kharia" #. name for khs msgid "Kasua" -msgstr "" +msgstr "Kasua" #. name for kht msgid "Khamti" -msgstr "" +msgstr "Khamti" #. name for khu msgid "Nkhumbi" -msgstr "" +msgstr "Nkhumbi" #. name for khv msgid "Khvarshi" -msgstr "" +msgstr "Khvarshi" #. name for khw msgid "Khowar" -msgstr "" +msgstr "Khowar" #. name for khx msgid "Kanu" -msgstr "" +msgstr "Kanu" #. name for khy msgid "Kele (Democratic Republic of Congo)" -msgstr "" +msgstr "Kele (Republik Democratik Congo)" #. name for khz msgid "Keapara" -msgstr "" +msgstr "Keapara" #. name for kia msgid "Kim" -msgstr "" +msgstr "Kim" #. name for kib msgid "Koalib" -msgstr "" +msgstr "Koalib" #. name for kic msgid "Kickapoo" -msgstr "" +msgstr "Kickapoo" #. name for kid msgid "Koshin" -msgstr "" +msgstr "Koshin" #. name for kie msgid "Kibet" -msgstr "" +msgstr "Kibet" #. name for kif msgid "Kham; Eastern Parbate" -msgstr "" +msgstr "Kham; Parbate Timur" #. name for kig msgid "Kimaama" -msgstr "" +msgstr "Kimaama" #. name for kih msgid "Kilmeri" -msgstr "" +msgstr "Kilmeri" #. name for kii msgid "Kitsai" -msgstr "" +msgstr "Kitsai" #. name for kij msgid "Kilivila" -msgstr "" +msgstr "Kilivila" #. name for kik msgid "Kikuyu" -msgstr "" +msgstr "Kikuyu" #. name for kil msgid "Kariya" -msgstr "" +msgstr "Kariya" #. name for kim msgid "Karagas" -msgstr "" +msgstr "Karagas" #. name for kin msgid "Kinyarwanda" -msgstr "" +msgstr "Kinyarwanda" #. name for kio msgid "Kiowa" -msgstr "" +msgstr "Kiowa" #. name for kip msgid "Kham; Sheshi" -msgstr "" +msgstr "Kham; Sheshi" #. name for kiq msgid "Kosadle" -msgstr "" +msgstr "Kosadle" #. name for kir msgid "Kirghiz" -msgstr "" +msgstr "Kirghiz" #. name for kis msgid "Kis" -msgstr "" +msgstr "Kis" #. name for kit msgid "Agob" -msgstr "" +msgstr "Agob" #. name for kiu msgid "Kirmanjki (individual language)" -msgstr "" +msgstr "Kirmanjki (bahasa individu)" #. name for kiv msgid "Kimbu" -msgstr "" +msgstr "Kimbu" #. name for kiw msgid "Kiwai; Northeast" -msgstr "" +msgstr "Kiwai; Timur Laut" #. name for kix msgid "Naga; Khiamniungan" -msgstr "" +msgstr "Naga; Khiamniungan" #. name for kiy msgid "Kirikiri" -msgstr "" +msgstr "Kirikiri" #. name for kiz msgid "Kisi" -msgstr "" +msgstr "Kisi" #. name for kja msgid "Mlap" -msgstr "" +msgstr "Mlap" #. name for kjb msgid "Q'anjob'al" -msgstr "" +msgstr "Q'anjob'al" #. name for kjc msgid "Konjo; Coastal" -msgstr "" +msgstr "Konjo; Pantai" #. name for kjd msgid "Kiwai; Southern" -msgstr "" +msgstr "Kiwai; Selatan" #. name for kje msgid "Kisar" -msgstr "" +msgstr "Kisar" #. name for kjf msgid "Khalaj" -msgstr "" +msgstr "Khalaj" #. name for kjg msgid "Khmu" -msgstr "" +msgstr "Khmu" #. name for kjh msgid "Khakas" -msgstr "" +msgstr "Khakas" #. name for kji msgid "Zabana" -msgstr "" +msgstr "Zabana" #. name for kjj msgid "Khinalugh" -msgstr "" +msgstr "Khinalugh" #. name for kjk msgid "Konjo; Highland" -msgstr "" +msgstr "Konjo; Tanah Tinggi" #. name for kjl msgid "Kham; Western Parbate" -msgstr "" +msgstr "Kham; Parbate Barat" #. name for kjm msgid "Kháng" -msgstr "" +msgstr "Kháng" #. name for kjn msgid "Kunjen" -msgstr "" +msgstr "Kunjen" #. name for kjo msgid "Kinnauri; Harijan" -msgstr "" +msgstr "Kinnauri; Harijan" #. name for kjp msgid "Karen; Pwo Eastern" -msgstr "" +msgstr "Karen; Pwo Timur" #. name for kjq msgid "Keres; Western" -msgstr "" +msgstr "Keres; Barat" #. name for kjr msgid "Kurudu" -msgstr "" +msgstr "Kurudu" #. name for kjs msgid "Kewa; East" -msgstr "" +msgstr "Kewa; Timur" #. name for kjt msgid "Karen; Phrae Pwo" -msgstr "" +msgstr "Karen; Phrae Pwo" #. name for kju msgid "Kashaya" -msgstr "" +msgstr "Kashaya" #. name for kjx msgid "Ramopa" -msgstr "" +msgstr "Ramopa" #. name for kjy msgid "Erave" -msgstr "" +msgstr "Erave" #. name for kjz msgid "Bumthangkha" -msgstr "" +msgstr "Bumthangkha" #. name for kka msgid "Kakanda" -msgstr "" +msgstr "Kakanda" #. name for kkb msgid "Kwerisa" -msgstr "" +msgstr "Kwerisa" #. name for kkc msgid "Odoodee" -msgstr "" +msgstr "Odoodee" #. name for kkd msgid "Kinuku" -msgstr "" +msgstr "Kinuku" #. name for kke msgid "Kakabe" -msgstr "" +msgstr "Kakabe" #. name for kkf msgid "Monpa; Kalaktang" -msgstr "" +msgstr "Monpa; Kalaktang" #. name for kkg msgid "Kalinga; Mabaka Valley" -msgstr "" +msgstr "Kalinga; Lembah Mabaka" #. name for kkh msgid "Khün" -msgstr "" +msgstr "Khün" #. name for kki msgid "Kagulu" -msgstr "" +msgstr "Kagulu" #. name for kkj msgid "Kako" -msgstr "" +msgstr "Kako" #. name for kkk msgid "Kokota" -msgstr "" +msgstr "Kokota" #. name for kkl msgid "Yale; Kosarek" -msgstr "" +msgstr "Yale; Kosarek" #. name for kkm msgid "Kiong" -msgstr "" +msgstr "Kiong" #. name for kkn msgid "Kon Keu" -msgstr "" +msgstr "Kon Keu" #. name for kko msgid "Karko" -msgstr "" +msgstr "Karko" #. name for kkp msgid "Gugubera" -msgstr "" +msgstr "Gugubera" #. name for kkq msgid "Kaiku" -msgstr "" +msgstr "Kaiku" #. name for kkr msgid "Kir-Balar" -msgstr "" +msgstr "Kir-Balar" #. name for kks msgid "Giiwo" -msgstr "" +msgstr "Giiwo" #. name for kkt msgid "Koi" -msgstr "" +msgstr "Koi" #. name for kku msgid "Tumi" -msgstr "" +msgstr "Tumi" #. name for kkv msgid "Kangean" -msgstr "" +msgstr "Kangean" #. name for kkw msgid "Teke-Kukuya" -msgstr "" +msgstr "Teke-Kukuya" #. name for kkx msgid "Kohin" -msgstr "" +msgstr "Kohin" #. name for kky msgid "Guguyimidjir" -msgstr "" +msgstr "Guguyimidjir" #. name for kkz msgid "Kaska" -msgstr "" +msgstr "Kaska" #. name for kla msgid "Klamath-Modoc" -msgstr "" +msgstr "Klamath-Modoc" #. name for klb msgid "Kiliwa" -msgstr "" +msgstr "Kiliwa" #. name for klc msgid "Kolbila" -msgstr "" +msgstr "Kolbila" #. name for kld msgid "Gamilaraay" -msgstr "" +msgstr "Gamilaraay" #. name for kle msgid "Kulung (Nepal)" -msgstr "" +msgstr "Kulung (Nepal)" #. name for klf msgid "Kendeje" -msgstr "" +msgstr "Kendeje" #. name for klg msgid "Tagakaulo" -msgstr "" +msgstr "Tagakaulo" #. name for klh msgid "Weliki" -msgstr "" +msgstr "Weliki" #. name for kli msgid "Kalumpang" -msgstr "" +msgstr "Kalumpang" #. name for klj msgid "Khalaj; Turkic" -msgstr "" +msgstr "Khalaj; Turkic" #. name for klk msgid "Kono (Nigeria)" -msgstr "" +msgstr "Kono (Nigeria)" #. name for kll msgid "Kalagan; Kagan" -msgstr "" +msgstr "Kalagan; Kagan" #. name for klm msgid "Migum" -msgstr "" +msgstr "Migum" #. name for kln msgid "Kalenjin" -msgstr "" +msgstr "Kalenjin" #. name for klo msgid "Kapya" -msgstr "" +msgstr "Kapya" #. name for klp msgid "Kamasa" -msgstr "" +msgstr "Kamasa" #. name for klq msgid "Rumu" -msgstr "" +msgstr "Rumu" #. name for klr msgid "Khaling" -msgstr "" +msgstr "Khaling" #. name for kls msgid "Kalasha" -msgstr "" +msgstr "Kalasha" #. name for klt msgid "Nukna" -msgstr "" +msgstr "Nukna" #. name for klu msgid "Klao" -msgstr "" +msgstr "Klao" #. name for klv msgid "Maskelynes" -msgstr "" +msgstr "Maskelynes" #. name for klw msgid "Lindu" -msgstr "" +msgstr "Lindu" #. name for klx msgid "Koluwawa" -msgstr "" +msgstr "Koluwawa" #. name for kly msgid "Kalao" -msgstr "" +msgstr "Kalao" #. name for klz msgid "Kabola" -msgstr "" +msgstr "Kabola" #. name for kma msgid "Konni" -msgstr "" +msgstr "Konni" #. name for kmb msgid "Kimbundu" -msgstr "" +msgstr "Kimbundu" #. name for kmc msgid "Dong; Southern" -msgstr "" +msgstr "Dong; Selatan" #. name for kmd msgid "Kalinga; Majukayang" -msgstr "" +msgstr "Kalinga; Majukayang" #. name for kme msgid "Bakole" -msgstr "" +msgstr "Bakole" #. name for kmf msgid "Kare (Papua New Guinea)" -msgstr "" +msgstr "Kare (Papua New Guinea)" #. name for kmg msgid "Kâte" -msgstr "" +msgstr "Kâte" #. name for kmh msgid "Kalam" -msgstr "" +msgstr "Kalam" #. name for kmi msgid "Kami (Nigeria)" -msgstr "" +msgstr "Kami (Nigeria)" #. name for kmj msgid "Kumarbhag Paharia" -msgstr "" +msgstr "Kumarbhag Paharia" #. name for kmk msgid "Kalinga; Limos" -msgstr "" +msgstr "Kalinga; Limos" #. name for kml msgid "Kalinga; Lower Tanudan" -msgstr "" +msgstr "Kalinga; Tanudan Bawah" #. name for kmm msgid "Kom (India)" -msgstr "" +msgstr "Kom (India)" #. name for kmn msgid "Awtuw" -msgstr "" +msgstr "Awtuw" #. name for kmo msgid "Kwoma" -msgstr "" +msgstr "Kwoma" #. name for kmp msgid "Gimme" -msgstr "" +msgstr "Gimme" #. name for kmq msgid "Kwama" -msgstr "" +msgstr "Kwama" #. name for kmr msgid "Kurdish; Northern" -msgstr "" +msgstr "Kurdis; Utara" #. name for kms msgid "Kamasau" -msgstr "" +msgstr "Kamasau" #. name for kmt msgid "Kemtuik" -msgstr "" +msgstr "Kemtuik" #. name for kmu msgid "Kanite" -msgstr "" +msgstr "Kanite" #. name for kmv msgid "Creole French; Karipúna" -msgstr "" +msgstr "Perancis Creole; Karipúna" #. name for kmw msgid "Komo (Democratic Republic of Congo)" -msgstr "" +msgstr "Komo (Republik Democratik Congo)" #. name for kmx msgid "Waboda" -msgstr "" +msgstr "Waboda" #. name for kmy msgid "Koma" -msgstr "" +msgstr "Koma" #. name for kmz msgid "Khorasani Turkish" -msgstr "" +msgstr "Turki Khurasan" #. name for kna msgid "Dera (Nigeria)" -msgstr "" +msgstr "Dera (Nigeria)" #. name for knb msgid "Kalinga; Lubuagan" -msgstr "" +msgstr "Kalinga; Lubuagan" #. name for knc msgid "Kanuri; Central" -msgstr "" +msgstr "Kanuri; Tengah" #. name for knd msgid "Konda" -msgstr "" +msgstr "Konda" #. name for kne msgid "Kankanaey" -msgstr "" +msgstr "Kankanaey" #. name for knf msgid "Mankanya" -msgstr "" +msgstr "Mankanya" #. name for kng msgid "Koongo" -msgstr "" +msgstr "Koongo" #. name for kni msgid "Kanufi" -msgstr "" +msgstr "Kanufi" #. name for knj msgid "Kanjobal; Western" -msgstr "" +msgstr "Kanjobal; Barat" #. name for knk msgid "Kuranko" -msgstr "" +msgstr "Kuranko" #. name for knl msgid "Keninjal" -msgstr "" +msgstr "Keninjal" #. name for knm msgid "Kanamarí" -msgstr "" +msgstr "Kanamarí" #. name for knn msgid "Konkani (individual language)" -msgstr "" +msgstr "Konkani (bahasa individu)" #. name for kno msgid "Kono (Sierra Leone)" -msgstr "" +msgstr "Kono (Sierra Leone)" #. name for knp msgid "Kwanja" -msgstr "" +msgstr "Kwanja" #. name for knq msgid "Kintaq" -msgstr "" +msgstr "Kintaq" #. name for knr msgid "Kaningra" -msgstr "" +msgstr "Kaningra" #. name for kns msgid "Kensiu" -msgstr "" +msgstr "Kensiu" #. name for knt msgid "Katukína; Panoan" -msgstr "" +msgstr "Katukína; Panoan" #. name for knu msgid "Kono (Guinea)" -msgstr "" +msgstr "Kono (Guinea)" #. name for knv msgid "Tabo" -msgstr "" +msgstr "Tabo" #. name for knw msgid "Kung-Ekoka" -msgstr "" +msgstr "Kung-Ekoka" #. name for knx msgid "Kendayan" -msgstr "" +msgstr "Kendayan" #. name for kny msgid "Kanyok" -msgstr "" +msgstr "Kanyok" #. name for knz msgid "Kalamsé" -msgstr "" +msgstr "Kalamsé" #. name for koa msgid "Konomala" -msgstr "" +msgstr "Konomala" #. name for koc msgid "Kpati" -msgstr "" +msgstr "Kpati" #. name for kod msgid "Kodi" -msgstr "" +msgstr "Kodi" #. name for koe msgid "Kacipo-Balesi" -msgstr "" +msgstr "Kacipo-Balesi" #. name for kof msgid "Kubi" -msgstr "" +msgstr "Kubi" #. name for kog msgid "Cogui" -msgstr "" +msgstr "Cogui" #. name for koh msgid "Koyo" -msgstr "" +msgstr "Koyo" #. name for koi msgid "Komi-Permyak" -msgstr "" +msgstr "Komi-Permyak" #. name for koj msgid "Sara Dunjo" -msgstr "" +msgstr "Sara Dunjo" #. name for kok msgid "Konkani (macrolanguage)" -msgstr "" +msgstr "Konkani (bahasa makro)" #. name for kol msgid "Kol (Papua New Guinea)" -msgstr "" +msgstr "Kol (Papua New Guinea)" #. name for kom msgid "Komi" -msgstr "" +msgstr "Komi" #. name for kon msgid "Kongo" -msgstr "" +msgstr "Kongo" #. name for koo msgid "Konzo" -msgstr "" +msgstr "Konzo" #. name for kop msgid "Waube" -msgstr "" +msgstr "Waube" #. name for koq msgid "Kota (Gabon)" -msgstr "" +msgstr "Kota (Gabon)" #. name for kor msgid "Korean" @@ -12522,1247 +12522,1247 @@ msgstr "Korean" #. name for kos msgid "Kosraean" -msgstr "" +msgstr "Kosraean" #. name for kot msgid "Lagwan" -msgstr "" +msgstr "Lagwan" #. name for kou msgid "Koke" -msgstr "" +msgstr "Koke" #. name for kov msgid "Kudu-Camo" -msgstr "" +msgstr "Kudu-Camo" #. name for kow msgid "Kugama" -msgstr "" +msgstr "Kugama" #. name for kox msgid "Coxima" -msgstr "" +msgstr "Coxima" #. name for koy msgid "Koyukon" -msgstr "" +msgstr "Koyukon" #. name for koz msgid "Korak" -msgstr "" +msgstr "Korak" #. name for kpa msgid "Kutto" -msgstr "" +msgstr "Kutto" #. name for kpb msgid "Kurumba; Mullu" -msgstr "" +msgstr "Kurumba; Mullu" #. name for kpc msgid "Curripaco" -msgstr "" +msgstr "Curripaco" #. name for kpd msgid "Koba" -msgstr "" +msgstr "Koba" #. name for kpe msgid "Kpelle" -msgstr "" +msgstr "Kpelle" #. name for kpf msgid "Komba" -msgstr "" +msgstr "Komba" #. name for kpg msgid "Kapingamarangi" -msgstr "" +msgstr "Kapingamarangi" #. name for kph msgid "Kplang" -msgstr "" +msgstr "Kplang" #. name for kpi msgid "Kofei" -msgstr "" +msgstr "Kofei" #. name for kpj msgid "Karajá" -msgstr "" +msgstr "Karajá" #. name for kpk msgid "Kpan" -msgstr "" +msgstr "Kpan" #. name for kpl msgid "Kpala" -msgstr "" +msgstr "Kpala" #. name for kpm msgid "Koho" -msgstr "" +msgstr "Koho" #. name for kpn msgid "Kepkiriwát" -msgstr "" +msgstr "Kepkiriwát" #. name for kpo msgid "Ikposo" -msgstr "" +msgstr "Ikposo" #. name for kpp msgid "Karen; Paku" -msgstr "" +msgstr "Karen; Paku" #. name for kpq msgid "Korupun-Sela" -msgstr "" +msgstr "Korupun-Sela" #. name for kpr msgid "Korafe-Yegha" -msgstr "" +msgstr "Korafe-Yegha" #. name for kps msgid "Tehit" -msgstr "" +msgstr "Tehit" #. name for kpt msgid "Karata" -msgstr "" +msgstr "Karata" #. name for kpu msgid "Kafoa" -msgstr "" +msgstr "Kafoa" #. name for kpv msgid "Komi-Zyrian" -msgstr "" +msgstr "Komi-Zyrian" #. name for kpw msgid "Kobon" -msgstr "" +msgstr "Kobon" #. name for kpx msgid "Koiali; Mountain" -msgstr "" +msgstr "Koiali; Gunung" #. name for kpy msgid "Koryak" -msgstr "" +msgstr "Koryak" #. name for kpz msgid "Kupsabiny" -msgstr "" +msgstr "Kupsabiny" #. name for kqa msgid "Mum" -msgstr "" +msgstr "Mum" #. name for kqb msgid "Kovai" -msgstr "" +msgstr "Kovai" #. name for kqc msgid "Doromu-Koki" -msgstr "" +msgstr "Doromu-Koki" #. name for kqd msgid "Koy Sanjaq Surat" -msgstr "" +msgstr "Koy Sanjaq Surat" #. name for kqe msgid "Kalagan" -msgstr "" +msgstr "Kalagan" #. name for kqf msgid "Kakabai" -msgstr "" +msgstr "Kakabai" #. name for kqg msgid "Khe" -msgstr "" +msgstr "Khe" #. name for kqh msgid "Kisankasa" -msgstr "" +msgstr "Kisankasa" #. name for kqi msgid "Koitabu" -msgstr "" +msgstr "Koitabu" #. name for kqj msgid "Koromira" -msgstr "" +msgstr "Koromira" #. name for kqk msgid "Gbe; Kotafon" -msgstr "" +msgstr "Gbe; Kotafon" #. name for kql msgid "Kyenele" -msgstr "" +msgstr "Kyenele" #. name for kqm msgid "Khisa" -msgstr "" +msgstr "Khisa" #. name for kqn msgid "Kaonde" -msgstr "" +msgstr "Kaonde" #. name for kqo msgid "Krahn; Eastern" -msgstr "" +msgstr "Krahn; Timur" #. name for kqp msgid "Kimré" -msgstr "" +msgstr "Kimré" #. name for kqq msgid "Krenak" -msgstr "" +msgstr "Krenak" #. name for kqr msgid "Kimaragang" -msgstr "" +msgstr "Kimaragang" #. name for kqs msgid "Kissi; Northern" -msgstr "" +msgstr "Kissi; Utara" #. name for kqt msgid "Kadazan; Klias River" -msgstr "" +msgstr "Kadazan; Sungai Klias" #. name for kqu msgid "Seroa" -msgstr "" +msgstr "Seroa" #. name for kqv msgid "Okolod" -msgstr "" +msgstr "Okolod" #. name for kqw msgid "Kandas" -msgstr "" +msgstr "Kandas" #. name for kqx msgid "Mser" -msgstr "" +msgstr "Mser" #. name for kqy msgid "Koorete" -msgstr "" +msgstr "Koorete" #. name for kqz msgid "Korana" -msgstr "" +msgstr "Korana" #. name for kra msgid "Kumhali" -msgstr "" +msgstr "Kumhali" #. name for krb msgid "Karkin" -msgstr "" +msgstr "Karkin" #. name for krc msgid "Karachay-Balkar" -msgstr "" +msgstr "Karachay-Balkar" #. name for krd msgid "Kairui-Midiki" -msgstr "" +msgstr "Kairui-Midiki" #. name for kre msgid "Panará" -msgstr "" +msgstr "Panará" #. name for krf msgid "Koro (Vanuatu)" -msgstr "" +msgstr "Koro (Vanuatu)" #. name for krh msgid "Kurama" -msgstr "" +msgstr "Kurama" #. name for kri msgid "Krio" -msgstr "" +msgstr "Krio" #. name for krj msgid "Kinaray-A" -msgstr "" +msgstr "Kinaray-A" #. name for krk msgid "Kerek" -msgstr "" +msgstr "Kerek" #. name for krl msgid "Karelian" -msgstr "" +msgstr "Karelian" #. name for krm msgid "Krim" -msgstr "" +msgstr "Krim" #. name for krn msgid "Sapo" -msgstr "" +msgstr "Sapo" #. name for krp msgid "Korop" -msgstr "" +msgstr "Korop" #. name for krr msgid "Kru'ng 2" -msgstr "" +msgstr "Kru'ng 2" #. name for krs msgid "Gbaya (Sudan)" -msgstr "" +msgstr "Gbaya (Sudan)" #. name for krt msgid "Kanuri; Tumari" -msgstr "" +msgstr "Kanuri; Tumari" #. name for kru msgid "Kurukh" -msgstr "" +msgstr "Kurukh" #. name for krv msgid "Kavet" -msgstr "" +msgstr "Kavet" #. name for krw msgid "Krahn; Western" -msgstr "" +msgstr "Krahn; Barat" #. name for krx msgid "Karon" -msgstr "" +msgstr "Karon" #. name for kry msgid "Kryts" -msgstr "" +msgstr "Kryts" #. name for krz msgid "Kanum; Sota" -msgstr "" +msgstr "Kanum; Sota" #. name for ksa msgid "Shuwa-Zamani" -msgstr "" +msgstr "Shuwa-Zamani" #. name for ksb msgid "Shambala" -msgstr "" +msgstr "Shambala" #. name for ksc msgid "Kalinga; Southern" -msgstr "" +msgstr "Kalinga; Selatan" #. name for ksd msgid "Kuanua" -msgstr "" +msgstr "Kuanua" #. name for kse msgid "Kuni" -msgstr "" +msgstr "Kuni" #. name for ksf msgid "Bafia" -msgstr "" +msgstr "Bafia" #. name for ksg msgid "Kusaghe" -msgstr "" +msgstr "Kusaghe" #. name for ksh msgid "Kölsch" -msgstr "" +msgstr "Kölsch" #. name for ksi msgid "Krisa" -msgstr "" +msgstr "Krisa" #. name for ksj msgid "Uare" -msgstr "" +msgstr "Uare" #. name for ksk msgid "Kansa" -msgstr "" +msgstr "Kansa" #. name for ksl msgid "Kumalu" -msgstr "" +msgstr "Kumalu" #. name for ksm msgid "Kumba" -msgstr "" +msgstr "Kumba" #. name for ksn msgid "Kasiguranin" -msgstr "" +msgstr "Kasiguranin" #. name for kso msgid "Kofa" -msgstr "" +msgstr "Kofa" #. name for ksp msgid "Kaba" -msgstr "" +msgstr "Kaba" #. name for ksq msgid "Kwaami" -msgstr "" +msgstr "Kwaami" #. name for ksr msgid "Borong" -msgstr "" +msgstr "Borong" #. name for kss msgid "Kisi; Southern" -msgstr "" +msgstr "Kisi; Selatan" #. name for kst msgid "Winyé" -msgstr "" +msgstr "Winyé" #. name for ksu msgid "Khamyang" -msgstr "" +msgstr "Khamyang" #. name for ksv msgid "Kusu" -msgstr "" +msgstr "Kusu" #. name for ksw msgid "Karen; S'gaw" -msgstr "" +msgstr "Karen; S'gaw" #. name for ksx msgid "Kedang" -msgstr "" +msgstr "Kedang" #. name for ksy msgid "Kharia Thar" -msgstr "" +msgstr "Kharia Thar" #. name for ksz msgid "Kodaku" -msgstr "" +msgstr "Kodaku" #. name for kta msgid "Katua" -msgstr "" +msgstr "Katua" #. name for ktb msgid "Kambaata" -msgstr "" +msgstr "Kambaata" #. name for ktc msgid "Kholok" -msgstr "" +msgstr "Kholok" #. name for ktd msgid "Kokata" -msgstr "" +msgstr "Kokata" #. name for kte msgid "Nubri" -msgstr "" +msgstr "Nubri" #. name for ktf msgid "Kwami" -msgstr "" +msgstr "Kwami" #. name for ktg msgid "Kalkutung" -msgstr "" +msgstr "Kalkutung" #. name for kth msgid "Karanga" -msgstr "" +msgstr "Karanga" #. name for kti msgid "Muyu; North" -msgstr "" +msgstr "Muyu; Utara" #. name for ktj msgid "Krumen; Plapo" -msgstr "" +msgstr "Krumen; Plapo" #. name for ktk msgid "Kaniet" -msgstr "" +msgstr "Kaniet" #. name for ktl msgid "Koroshi" -msgstr "" +msgstr "Koroshi" #. name for ktm msgid "Kurti" -msgstr "" +msgstr "Kurti" #. name for ktn msgid "Karitiâna" -msgstr "" +msgstr "Karitiâna" #. name for kto msgid "Kuot" -msgstr "" +msgstr "Kuot" #. name for ktp msgid "Kaduo" -msgstr "" +msgstr "Kaduo" #. name for ktq msgid "Katabaga" -msgstr "" +msgstr "Katabaga" #. name for ktr msgid "Kota Marudu Tinagas" -msgstr "" +msgstr "Kota Marudu Tinagas" #. name for kts msgid "Muyu; South" -msgstr "" +msgstr "Muyu; Selatan" #. name for ktt msgid "Ketum" -msgstr "" +msgstr "Ketum" #. name for ktu msgid "Kituba (Democratic Republic of Congo)" -msgstr "" +msgstr "Kiluba (Republik Democratik Congo)" #. name for ktv msgid "Katu; Eastern" -msgstr "" +msgstr "Katu; Timur" #. name for ktw msgid "Kato" -msgstr "" +msgstr "Kato" #. name for ktx msgid "Kaxararí" -msgstr "" +msgstr "Kaxararí" #. name for kty msgid "Kango (Bas-Uélé District)" -msgstr "" +msgstr "Kango (Daerah Bas-Uélé)" #. name for ktz msgid "Ju/'hoan" -msgstr "" +msgstr "Ju/'hoan" #. name for kua msgid "Kuanyama" -msgstr "" +msgstr "Kuanyama" #. name for kub msgid "Kutep" -msgstr "" +msgstr "Kutep" #. name for kuc msgid "Kwinsu" -msgstr "" +msgstr "Kwinsu" #. name for kud msgid "'Auhelawa" -msgstr "" +msgstr "'Auhelawa" #. name for kue msgid "Kuman" -msgstr "" +msgstr "Kuman" #. name for kuf msgid "Katu; Western" -msgstr "" +msgstr "Katu; Barat" #. name for kug msgid "Kupa" -msgstr "" +msgstr "Kupa" #. name for kuh msgid "Kushi" -msgstr "" +msgstr "Kushi" #. name for kui msgid "Kuikúro-Kalapálo" -msgstr "" +msgstr "Kuikúro-Kalapálo" #. name for kuj msgid "Kuria" -msgstr "" +msgstr "Kuria" #. name for kuk msgid "Kepo'" -msgstr "" +msgstr "Kepo'" #. name for kul msgid "Kulere" -msgstr "" +msgstr "Kulere" #. name for kum msgid "Kumyk" -msgstr "" +msgstr "Kumyk" #. name for kun msgid "Kunama" -msgstr "" +msgstr "Kunama" #. name for kuo msgid "Kumukio" -msgstr "" +msgstr "Kumukio" #. name for kup msgid "Kunimaipa" -msgstr "" +msgstr "Kunimaipa" #. name for kuq msgid "Karipuna" -msgstr "" +msgstr "Karipuna" #. name for kur msgid "Kurdish" -msgstr "" +msgstr "Kurdish" #. name for kus msgid "Kusaal" -msgstr "" +msgstr "Kusaal" #. name for kut msgid "Kutenai" -msgstr "" +msgstr "Kutenai" #. name for kuu msgid "Kuskokwim; Upper" -msgstr "" +msgstr "Kuskokwim; Atas" #. name for kuv msgid "Kur" -msgstr "" +msgstr "Kur" #. name for kuw msgid "Kpagua" -msgstr "" +msgstr "Kpagua" #. name for kux msgid "Kukatja" -msgstr "" +msgstr "Kukatja" #. name for kuy msgid "Kuuku-Ya'u" -msgstr "" +msgstr "Kuuku-Ya'u" #. name for kuz msgid "Kunza" -msgstr "" +msgstr "Kunza" #. name for kva msgid "Bagvalal" -msgstr "" +msgstr "Bagvalal" #. name for kvb msgid "Kubu" -msgstr "" +msgstr "Kubu" #. name for kvc msgid "Kove" -msgstr "" +msgstr "Kove" #. name for kvd msgid "Kui (Indonesia)" -msgstr "" +msgstr "Kui (Indonesia)" #. name for kve msgid "Kalabakan" -msgstr "" +msgstr "Kalabakan" #. name for kvf msgid "Kabalai" -msgstr "" +msgstr "Kabalai" #. name for kvg msgid "Kuni-Boazi" -msgstr "" +msgstr "Kuni-Boazi" #. name for kvh msgid "Komodo" -msgstr "" +msgstr "Komodo" #. name for kvi msgid "Kwang" -msgstr "" +msgstr "Kwang" #. name for kvj msgid "Psikye" -msgstr "" +msgstr "Psikye" #. name for kvk msgid "Korean Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Korea" #. name for kvl msgid "Karen; Brek" -msgstr "" +msgstr "Karen; Brek" #. name for kvm msgid "Kendem" -msgstr "" +msgstr "Kendem" #. name for kvn msgid "Kuna; Border" -msgstr "" +msgstr "Kuna; Sempadan" #. name for kvo msgid "Dobel" -msgstr "" +msgstr "Dobel" #. name for kvp msgid "Kompane" -msgstr "" +msgstr "Kompane" #. name for kvq msgid "Karen; Geba" -msgstr "" +msgstr "Karen; Geba" #. name for kvr msgid "Kerinci" -msgstr "" +msgstr "Kerinci" #. name for kvs msgid "Kunggara" -msgstr "" +msgstr "Kunggara" #. name for kvt msgid "Karen; Lahta" -msgstr "" +msgstr "Karen; Lahta" #. name for kvu msgid "Karen; Yinbaw" -msgstr "" +msgstr "Karen; Yinbaw" #. name for kvv msgid "Kola" -msgstr "" +msgstr "Kola" #. name for kvw msgid "Wersing" -msgstr "" +msgstr "Wersing" #. name for kvx msgid "Koli; Parkari" -msgstr "" +msgstr "Koli; Parkari" #. name for kvy msgid "Karen; Yintale" -msgstr "" +msgstr "Karen; Yintale" #. name for kvz msgid "Tsakwambo" -msgstr "" +msgstr "Tsakwambo" #. name for kwa msgid "Dâw" -msgstr "" +msgstr "Dâw" #. name for kwb msgid "Kwa" -msgstr "" +msgstr "Kwa" #. name for kwc msgid "Likwala" -msgstr "" +msgstr "Likwala" #. name for kwd msgid "Kwaio" -msgstr "" +msgstr "Kwaio" #. name for kwe msgid "Kwerba" -msgstr "" +msgstr "Kwerba" #. name for kwf msgid "Kwara'ae" -msgstr "" +msgstr "Kwara'ae" #. name for kwg msgid "Sara Kaba Deme" -msgstr "" +msgstr "Sara Kaba Deme" #. name for kwh msgid "Kowiai" -msgstr "" +msgstr "Kowiai" #. name for kwi msgid "Awa-Cuaiquer" -msgstr "" +msgstr "Awa-Cuaiquer" #. name for kwj msgid "Kwanga" -msgstr "" +msgstr "Kwanga" #. name for kwk msgid "Kwakiutl" -msgstr "" +msgstr "Kwakiutl" #. name for kwl msgid "Kofyar" -msgstr "" +msgstr "Kofyar" #. name for kwm msgid "Kwambi" -msgstr "" +msgstr "Kwambi" #. name for kwn msgid "Kwangali" -msgstr "" +msgstr "Kwangali" #. name for kwo msgid "Kwomtari" -msgstr "" +msgstr "Kwomtari" #. name for kwp msgid "Kodia" -msgstr "" +msgstr "Kodia" #. name for kwq msgid "Kwak" -msgstr "" +msgstr "Kwak" #. name for kwr msgid "Kwer" -msgstr "" +msgstr "Kwer" #. name for kws msgid "Kwese" -msgstr "" +msgstr "Kwese" #. name for kwt msgid "Kwesten" -msgstr "" +msgstr "Kwesten" #. name for kwu msgid "Kwakum" -msgstr "" +msgstr "Kwakum" #. name for kwv msgid "Sara Kaba Náà" -msgstr "" +msgstr "Sara Kaba Náà" #. name for kww msgid "Kwinti" -msgstr "" +msgstr "Kwinti" #. name for kwx msgid "Khirwar" -msgstr "" +msgstr "Khirwar" #. name for kwy msgid "Kongo; San Salvador" -msgstr "" +msgstr "Kongo; San Salvador" #. name for kwz msgid "Kwadi" -msgstr "" +msgstr "Kwadi" #. name for kxa msgid "Kairiru" -msgstr "" +msgstr "Kairiru" #. name for kxb msgid "Krobu" -msgstr "" +msgstr "Krobu" #. name for kxc msgid "Konso" -msgstr "" +msgstr "Konso" #. name for kxd msgid "Brunei" -msgstr "" +msgstr "Brunei" #. name for kxe msgid "Kakihum" -msgstr "" +msgstr "Kakihum" #. name for kxf msgid "Karen; Manumanaw" -msgstr "" +msgstr "Karen; Manumanaw" #. name for kxh msgid "Karo (Ethiopia)" -msgstr "" +msgstr "Karo (Habsyi)" #. name for kxi msgid "Murut; Keningau" -msgstr "" +msgstr "Murut; Keningau" #. name for kxj msgid "Kulfa" -msgstr "" +msgstr "Kulfa" #. name for kxk msgid "Karen; Zayein" -msgstr "" +msgstr "Karen; Zayein" #. name for kxl msgid "Kurux; Nepali" -msgstr "" +msgstr "Kurux; Nepal" #. name for kxm msgid "Khmer; Northern" -msgstr "" +msgstr "Khmer; Utara" #. name for kxn msgid "Melanau; Kanowit-Tanjong" -msgstr "" +msgstr "Melanau; Kanowit-Tanjong" #. name for kxo msgid "Kanoé" -msgstr "" +msgstr "Kanoé" #. name for kxp msgid "Koli; Wadiyara" -msgstr "" +msgstr "Koli; Wadiyara" #. name for kxq msgid "Kanum; Smärky" -msgstr "" +msgstr "Kanum; Smärky" #. name for kxr msgid "Koro (Papua New Guinea)" -msgstr "" +msgstr "Koro (Papua New Guinea)" #. name for kxs msgid "Kangjia" -msgstr "" +msgstr "Kangjia" #. name for kxt msgid "Koiwat" -msgstr "" +msgstr "Koiwat" #. name for kxu msgid "Kui (India)" -msgstr "" +msgstr "Kui (India)" #. name for kxv msgid "Kuvi" -msgstr "" +msgstr "Kuvi" #. name for kxw msgid "Konai" -msgstr "" +msgstr "Konai" #. name for kxx msgid "Likuba" -msgstr "" +msgstr "Likuba" #. name for kxy msgid "Kayong" -msgstr "" +msgstr "Kayong" #. name for kxz msgid "Kerewo" -msgstr "" +msgstr "Kerewo" #. name for kya msgid "Kwaya" -msgstr "" +msgstr "Kwaya" #. name for kyb msgid "Kalinga; Butbut" -msgstr "" +msgstr "Kalinga; Butbut" #. name for kyc msgid "Kyaka" -msgstr "" +msgstr "Kyaka" #. name for kyd msgid "Karey" -msgstr "" +msgstr "Karey" #. name for kye msgid "Krache" -msgstr "" +msgstr "Krache" #. name for kyf msgid "Kouya" -msgstr "" +msgstr "Kouya" #. name for kyg msgid "Keyagana" -msgstr "" +msgstr "Keyagana" #. name for kyh msgid "Karok" -msgstr "" +msgstr "Karok" #. name for kyi msgid "Kiput" -msgstr "" +msgstr "Kiput" #. name for kyj msgid "Karao" -msgstr "" +msgstr "Karao" #. name for kyk msgid "Kamayo" -msgstr "" +msgstr "Kamayo" #. name for kyl msgid "Kalapuya" -msgstr "" +msgstr "Kalapuya" #. name for kym msgid "Kpatili" -msgstr "" +msgstr "Kpatili" #. name for kyn msgid "Binukidnon; Northern" -msgstr "" +msgstr "Binukidnon; Utara" #. name for kyo msgid "Kelon" -msgstr "" +msgstr "Kelon" #. name for kyp msgid "Kang" -msgstr "" +msgstr "Kang" #. name for kyq msgid "Kenga" -msgstr "" +msgstr "Kenga" #. name for kyr msgid "Kuruáya" -msgstr "" +msgstr "Kuruáya" #. name for kys msgid "Kayan; Baram" -msgstr "" +msgstr "Kayan; Baram" #. name for kyt msgid "Kayagar" -msgstr "" +msgstr "Kayagar" #. name for kyu msgid "Kayah; Western" -msgstr "" +msgstr "Kayah; Barat" #. name for kyv msgid "Kayort" -msgstr "" +msgstr "Kayort" #. name for kyw msgid "Kudmali" -msgstr "" +msgstr "Kudmali" #. name for kyx msgid "Rapoisi" -msgstr "" +msgstr "Rapoisi" #. name for kyy msgid "Kambaira" -msgstr "" +msgstr "Kambaira" #. name for kyz msgid "Kayabí" -msgstr "" +msgstr "Kayabí" #. name for kza msgid "Karaboro; Western" -msgstr "" +msgstr "Karaboro; Barat" #. name for kzb msgid "Kaibobo" -msgstr "" +msgstr "Kaibobo" #. name for kzc msgid "Kulango; Bondoukou" -msgstr "" +msgstr "Kulango; Bondoukou" #. name for kzd msgid "Kadai" -msgstr "" +msgstr "Kadai" #. name for kze msgid "Kosena" -msgstr "" +msgstr "Kosena" #. name for kzf msgid "Kaili; Da'a" -msgstr "" +msgstr "Kaili; Da'a" #. name for kzg msgid "Kikai" -msgstr "" +msgstr "Kikai" #. name for kzh msgid "Kenuzi-Dongola" -msgstr "" +msgstr "Kenuzi-Dongola" #. name for kzi msgid "Kelabit" -msgstr "" +msgstr "Kelabit" #. name for kzj msgid "Kadazan; Coastal" -msgstr "" +msgstr "Kadazan, Pantai" #. name for kzk msgid "Kazukuru" -msgstr "" +msgstr "Kazukuru" #. name for kzl msgid "Kayeli" -msgstr "" +msgstr "Kayeli" #. name for kzm msgid "Kais" -msgstr "" +msgstr "Kais" #. name for kzn msgid "Kokola" -msgstr "" +msgstr "Kokola" #. name for kzo msgid "Kaningi" -msgstr "" +msgstr "Kaningi" #. name for kzp msgid "Kaidipang" -msgstr "" +msgstr "Kaidipang" #. name for kzq msgid "Kaike" -msgstr "" +msgstr "Kaike" #. name for kzr msgid "Karang" -msgstr "" +msgstr "Karang" #. name for kzs msgid "Dusun; Sugut" -msgstr "" +msgstr "Dusun; Sugut" #. name for kzt msgid "Dusun; Tambunan" -msgstr "" +msgstr "Dusun; Tambunan" #. name for kzu msgid "Kayupulau" -msgstr "" +msgstr "Kayupulau" #. name for kzv msgid "Komyandaret" -msgstr "" +msgstr "Komyandaret" #. name for kzw msgid "Karirí-Xocó" -msgstr "" +msgstr "Karirí-Xocó" #. name for kzx msgid "Kamarian" -msgstr "" +msgstr "Kamarian" #. name for kzy msgid "Kango (Tshopo District)" -msgstr "" +msgstr "Kango (Daerah Tshopo)" #. name for kzz msgid "Kalabra" -msgstr "" +msgstr "Kalabra" #. name for laa msgid "Subanen; Southern" -msgstr "" +msgstr "Subanen; Selatan" #. name for lab msgid "Linear A" -msgstr "" +msgstr "Linear A" #. name for lac msgid "Lacandon" -msgstr "" +msgstr "Lacandon" #. name for lad msgid "Ladino" -msgstr "" +msgstr "Ladino" #. name for lae msgid "Pattani" -msgstr "" +msgstr "Pattani" #. name for laf msgid "Lafofa" -msgstr "" +msgstr "Lafofa" #. name for lag msgid "Langi" -msgstr "" +msgstr "Langi" #. name for lah msgid "Lahnda" -msgstr "" +msgstr "Lahnda" #. name for lai msgid "Lambya" -msgstr "" +msgstr "Lambya" #. name for laj msgid "Lango (Uganda)" -msgstr "" +msgstr "Lango (Uganda)" #. name for lak msgid "Laka (Nigeria)" -msgstr "" +msgstr "Laka (Nigeria)" #. name for lal msgid "Lalia" -msgstr "" +msgstr "Lalia" #. name for lam msgid "Lamba" -msgstr "" +msgstr "Lamba" #. name for lan msgid "Laru" -msgstr "" +msgstr "Laru" #. name for lao msgid "Lao" -msgstr "" +msgstr "Lao" #. name for lap msgid "Laka (Chad)" -msgstr "" +msgstr "Laka (Chad)" #. name for laq msgid "Qabiao" -msgstr "" +msgstr "Qabiao" #. name for lar msgid "Larteh" -msgstr "" +msgstr "Larteh" #. name for las msgid "Lama (Togo)" -msgstr "" +msgstr "Lama (Togo)" #. name for lat msgid "Latin" -msgstr "" +msgstr "Latin" #. name for lau msgid "Laba" -msgstr "" +msgstr "Laba" #. name for lav msgid "Latvian" @@ -13770,487 +13770,487 @@ msgstr "Latvian" #. name for law msgid "Lauje" -msgstr "" +msgstr "Lauje" #. name for lax msgid "Tiwa" -msgstr "" +msgstr "Tiwa" #. name for lay msgid "Lama (Myanmar)" -msgstr "" +msgstr "Lama (Myanmar)" #. name for laz msgid "Aribwatsa" -msgstr "" +msgstr "Aribwatsa" #. name for lba msgid "Lui" -msgstr "" +msgstr "Lui" #. name for lbb msgid "Label" -msgstr "" +msgstr "Label" #. name for lbc msgid "Lakkia" -msgstr "" +msgstr "Lakkia" #. name for lbe msgid "Lak" -msgstr "" +msgstr "Lak" #. name for lbf msgid "Tinani" -msgstr "" +msgstr "Tinani" #. name for lbg msgid "Laopang" -msgstr "" +msgstr "Laopang" #. name for lbi msgid "La'bi" -msgstr "" +msgstr "La'bi" #. name for lbj msgid "Ladakhi" -msgstr "" +msgstr "Ladakhi" #. name for lbk msgid "Bontok; Central" -msgstr "" +msgstr "Bontok; Tengah" #. name for lbl msgid "Bikol; Libon" -msgstr "" +msgstr "Bikol; Libon" #. name for lbm msgid "Lodhi" -msgstr "" +msgstr "Lodhi" #. name for lbn msgid "Lamet" -msgstr "" +msgstr "Lamet" #. name for lbo msgid "Laven" -msgstr "" +msgstr "Laven" #. name for lbq msgid "Wampar" -msgstr "" +msgstr "Wampar" #. name for lbr msgid "Lorung; Northern" -msgstr "" +msgstr "Lorung; Utara" #. name for lbs msgid "Libyan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Libya" #. name for lbt msgid "Lachi" -msgstr "" +msgstr "Lachi" #. name for lbu msgid "Labu" -msgstr "" +msgstr "Labu" #. name for lbv msgid "Lavatbura-Lamusong" -msgstr "" +msgstr "Lavatbura-Lamusong" #. name for lbw msgid "Tolaki" -msgstr "" +msgstr "Tolaki" #. name for lbx msgid "Lawangan" -msgstr "" +msgstr "Lawangan" #. name for lby msgid "Lamu-Lamu" -msgstr "" +msgstr "Lamu-Lamu" #. name for lbz msgid "Lardil" -msgstr "" +msgstr "Lardil" #. name for lcc msgid "Legenyem" -msgstr "" +msgstr "Legenyem" #. name for lcd msgid "Lola" -msgstr "" +msgstr "Lola" #. name for lce msgid "Loncong" -msgstr "" +msgstr "Loncong" #. name for lcf msgid "Lubu" -msgstr "" +msgstr "Lubu" #. name for lch msgid "Luchazi" -msgstr "" +msgstr "Luchazi" #. name for lcl msgid "Lisela" -msgstr "" +msgstr "Lisela" #. name for lcm msgid "Tungag" -msgstr "" +msgstr "Tungag" #. name for lcp msgid "Lawa; Western" -msgstr "" +msgstr "Lawa; Barat" #. name for lcq msgid "Luhu" -msgstr "" +msgstr "Luhu" #. name for lcs msgid "Lisabata-Nuniali" -msgstr "" +msgstr "Lisabata-Nuniali" #. name for ldb msgid "Idun" -msgstr "" +msgstr "Idun" #. name for ldd msgid "Luri" -msgstr "" +msgstr "Luri" #. name for ldg msgid "Lenyima" -msgstr "" +msgstr "Lenyima" #. name for ldh msgid "Lamja-Dengsa-Tola" -msgstr "" +msgstr "Lamja-Dengsa-Tola" #. name for ldi msgid "Laari" -msgstr "" +msgstr "Laari" #. name for ldj msgid "Lemoro" -msgstr "" +msgstr "Lemoro" #. name for ldk msgid "Leelau" -msgstr "" +msgstr "Leelau" #. name for ldl msgid "Kaan" -msgstr "" +msgstr "Kaan" #. name for ldm msgid "Landoma" -msgstr "" +msgstr "Landoma" #. name for ldn msgid "Láadan" -msgstr "" +msgstr "Láadan" #. name for ldo msgid "Loo" -msgstr "" +msgstr "Loo" #. name for ldp msgid "Tso" -msgstr "" +msgstr "Tso" #. name for ldq msgid "Lufu" -msgstr "" +msgstr "Lufu" #. name for lea msgid "Lega-Shabunda" -msgstr "" +msgstr "Lega-Shabunda" #. name for leb msgid "Lala-Bisa" -msgstr "" +msgstr "Lala-Bisa" #. name for lec msgid "Leco" -msgstr "" +msgstr "Leco" #. name for led msgid "Lendu" -msgstr "" +msgstr "Lendu" #. name for lee msgid "Lyélé" -msgstr "" +msgstr "Lyélé" #. name for lef msgid "Lelemi" -msgstr "" +msgstr "Lelemi" #. name for leg msgid "Lengua" -msgstr "" +msgstr "Lengua" #. name for leh msgid "Lenje" -msgstr "" +msgstr "Lenje" #. name for lei msgid "Lemio" -msgstr "" +msgstr "Lemio" #. name for lej msgid "Lengola" -msgstr "" +msgstr "Lengola" #. name for lek msgid "Leipon" -msgstr "" +msgstr "Leipon" #. name for lel msgid "Lele (Democratic Republic of Congo)" -msgstr "" +msgstr "Lele (Republik Democratik Congo)" #. name for lem msgid "Nomaande" -msgstr "" +msgstr "Nomaande" #. name for len msgid "Lenca" -msgstr "" +msgstr "Lenca" #. name for leo msgid "Leti (Cameroon)" -msgstr "" +msgstr "Leti (Cameroon)" #. name for lep msgid "Lepcha" -msgstr "" +msgstr "Lepcha" #. name for leq msgid "Lembena" -msgstr "" +msgstr "Lembena" #. name for ler msgid "Lenkau" -msgstr "" +msgstr "Lenkau" #. name for les msgid "Lese" -msgstr "" +msgstr "Lese" #. name for let msgid "Lesing-Gelimi" -msgstr "" +msgstr "Lesing-Gelimi" #. name for leu msgid "Kara (Papua New Guinea)" -msgstr "" +msgstr "Kara (Papua New Guinea)" #. name for lev msgid "Lamma" -msgstr "" +msgstr "Lamma" #. name for lew msgid "Kaili; Ledo" -msgstr "" +msgstr "Kaili; Ledo" #. name for lex msgid "Luang" -msgstr "" +msgstr "Luang" #. name for ley msgid "Lemolang" -msgstr "" +msgstr "Lemolang" #. name for lez msgid "Lezghian" -msgstr "" +msgstr "Lezghian" #. name for lfa msgid "Lefa" -msgstr "" +msgstr "Lefa" #. name for lfn msgid "Lingua Franca Nova" -msgstr "" +msgstr "Lingua Franca Nova" #. name for lga msgid "Lungga" -msgstr "" +msgstr "Lungga" #. name for lgb msgid "Laghu" -msgstr "" +msgstr "Laghu" #. name for lgg msgid "Lugbara" -msgstr "" +msgstr "Lugbara" #. name for lgh msgid "Laghuu" -msgstr "" +msgstr "Laghuu" #. name for lgi msgid "Lengilu" -msgstr "" +msgstr "Lengilu" #. name for lgk msgid "Lingarak" -msgstr "" +msgstr "Lingarak" #. name for lgl msgid "Wala" -msgstr "" +msgstr "Wala" #. name for lgm msgid "Lega-Mwenga" -msgstr "" +msgstr "Lega-Mwenga" #. name for lgn msgid "Opuuo" -msgstr "" +msgstr "Opuuo" #. name for lgq msgid "Logba" -msgstr "" +msgstr "Logba" #. name for lgr msgid "Lengo" -msgstr "" +msgstr "Lengo" #. name for lgt msgid "Pahi" -msgstr "" +msgstr "Pahi" #. name for lgu msgid "Longgu" -msgstr "" +msgstr "Longgu" #. name for lgz msgid "Ligenza" -msgstr "" +msgstr "Ligenza" #. name for lha msgid "Laha (Viet Nam)" -msgstr "" +msgstr "Laha (Viet Nam)" #. name for lhh msgid "Laha (Indonesia)" -msgstr "" +msgstr "Laha (Indonesia)" #. name for lhi msgid "Lahu Shi" -msgstr "" +msgstr "Lahu Shi" #. name for lhl msgid "Lohar; Lahul" -msgstr "" +msgstr "Lohar; Lahul" #. name for lhm msgid "Lhomi" -msgstr "" +msgstr "Lhomi" #. name for lhn msgid "Lahanan" -msgstr "" +msgstr "Lahanan" #. name for lhp msgid "Lhokpu" -msgstr "" +msgstr "Lhokpu" #. name for lhs msgid "Mlahsö" -msgstr "" +msgstr "Mlahsö" #. name for lht msgid "Lo-Toga" -msgstr "" +msgstr "Lo-Toga" #. name for lhu msgid "Lahu" -msgstr "" +msgstr "Lahu" #. name for lia msgid "Limba; West-Central" -msgstr "" +msgstr "Limba; Tengah Barat" #. name for lib msgid "Likum" -msgstr "" +msgstr "Likum" #. name for lic msgid "Hlai" -msgstr "" +msgstr "Hlai" #. name for lid msgid "Nyindrou" -msgstr "" +msgstr "Nyindrou" #. name for lie msgid "Likila" -msgstr "" +msgstr "Likila" #. name for lif msgid "Limbu" -msgstr "" +msgstr "Limbu" #. name for lig msgid "Ligbi" -msgstr "" +msgstr "Ligbi" #. name for lih msgid "Lihir" -msgstr "" +msgstr "Lihir" #. name for lii msgid "Lingkhim" -msgstr "" +msgstr "Lingkhim" #. name for lij msgid "Ligurian" -msgstr "" +msgstr "Ligurian" #. name for lik msgid "Lika" -msgstr "" +msgstr "Lika" #. name for lil msgid "Lillooet" -msgstr "" +msgstr "Lillooet" #. name for lim msgid "Limburgan" -msgstr "" +msgstr "Limburgan" #. name for lin msgid "Lingala" -msgstr "" +msgstr "Lingala" #. name for lio msgid "Liki" -msgstr "" +msgstr "Liki" #. name for lip msgid "Sekpele" -msgstr "" +msgstr "Sekpele" #. name for liq msgid "Libido" -msgstr "" +msgstr "Libido" #. name for lir msgid "English; Liberian" -msgstr "" +msgstr "Inggeris; Liberia" #. name for lis msgid "Lisu" -msgstr "" +msgstr "Lisu" #. name for lit msgid "Lithuanian" @@ -14258,1775 +14258,1775 @@ msgstr "Lithuanian" #. name for liu msgid "Logorik" -msgstr "" +msgstr "Logorik" #. name for liv msgid "Liv" -msgstr "" +msgstr "Liv" #. name for liw msgid "Col" -msgstr "" +msgstr "Col" #. name for lix msgid "Liabuku" -msgstr "" +msgstr "Liabuku" #. name for liy msgid "Banda-Bambari" -msgstr "" +msgstr "Banda-Bambari" #. name for liz msgid "Libinza" -msgstr "" +msgstr "Libinza" #. name for lje msgid "Rampi" -msgstr "" +msgstr "Rampi" #. name for lji msgid "Laiyolo" -msgstr "" +msgstr "Laiyolo" #. name for ljl msgid "Li'o" -msgstr "" +msgstr "Li'o" #. name for ljp msgid "Lampung Api" -msgstr "" +msgstr "Lampung Api" #. name for lka msgid "Lakalei" -msgstr "" +msgstr "Lakalei" #. name for lkb msgid "Kabras" -msgstr "" +msgstr "Kabras" #. name for lkc msgid "Kucong" -msgstr "" +msgstr "Kucong" #. name for lkd msgid "Lakondê" -msgstr "" +msgstr "Lakondê" #. name for lke msgid "Kenyi" -msgstr "" +msgstr "Kenyi" #. name for lkh msgid "Lakha" -msgstr "" +msgstr "Lakha" #. name for lki msgid "Laki" -msgstr "" +msgstr "Laki" #. name for lkj msgid "Remun" -msgstr "" +msgstr "Remun" #. name for lkl msgid "Laeko-Libuat" -msgstr "" +msgstr "Laeko-Libuat" #. name for lkn msgid "Lakon" -msgstr "" +msgstr "Lakon" #. name for lko msgid "Khayo" -msgstr "" +msgstr "Khayo" #. name for lkr msgid "Päri" -msgstr "" +msgstr "Päri" #. name for lks msgid "Kisa" -msgstr "" +msgstr "Kisa" #. name for lkt msgid "Lakota" -msgstr "" +msgstr "Lakota" #. name for lky msgid "Lokoya" -msgstr "" +msgstr "Lokoya" #. name for lla msgid "Lala-Roba" -msgstr "" +msgstr "Lala-Roba" #. name for llb msgid "Lolo" -msgstr "" +msgstr "Lolo" #. name for llc msgid "Lele (Guinea)" -msgstr "" +msgstr "Lele (Guinea)" #. name for lld msgid "Ladin" -msgstr "" +msgstr "Ladin" #. name for lle msgid "Lele (Papua New Guinea)" -msgstr "" +msgstr "Lele (Papua New Guinea)" #. name for llf msgid "Hermit" -msgstr "" +msgstr "Hermit" #. name for llg msgid "Lole" -msgstr "" +msgstr "Lole" #. name for llh msgid "Lamu" -msgstr "" +msgstr "Lamu" #. name for lli msgid "Teke-Laali" -msgstr "" +msgstr "Teke-Laali" #. name for llk msgid "Lelak" -msgstr "" +msgstr "Lelak" #. name for lll msgid "Lilau" -msgstr "" +msgstr "Lilau" #. name for llm msgid "Lasalimu" -msgstr "" +msgstr "Lasalimu" #. name for lln msgid "Lele (Chad)" -msgstr "" +msgstr "Lele (Chad)" #. name for llo msgid "Khlor" -msgstr "" +msgstr "Khlor" #. name for llp msgid "Efate; North" -msgstr "" +msgstr "Efate; Utara" #. name for llq msgid "Lolak" -msgstr "" +msgstr "Lolak" #. name for lls msgid "Lithuanian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Lithuania" #. name for llu msgid "Lau" -msgstr "" +msgstr "Lau" #. name for llx msgid "Lauan" -msgstr "" +msgstr "Lauan" #. name for lma msgid "Limba; East" -msgstr "" +msgstr "Limba; Timur" #. name for lmb msgid "Merei" -msgstr "" +msgstr "Merei" #. name for lmc msgid "Limilngan" -msgstr "" +msgstr "Limilngan" #. name for lmd msgid "Lumun" -msgstr "" +msgstr "Lumun" #. name for lme msgid "Pévé" -msgstr "" +msgstr "Pévé" #. name for lmf msgid "Lembata; South" -msgstr "" +msgstr "Lembata; Selatan" #. name for lmg msgid "Lamogai" -msgstr "" +msgstr "Lamogai" #. name for lmh msgid "Lambichhong" -msgstr "" +msgstr "Lambichhong" #. name for lmi msgid "Lombi" -msgstr "" +msgstr "Lombi" #. name for lmj msgid "Lembata; West" -msgstr "" +msgstr "Lembata; Barat" #. name for lmk msgid "Lamkang" -msgstr "" +msgstr "Lamkang" #. name for lml msgid "Hano" -msgstr "" +msgstr "Hano" #. name for lmm msgid "Lamam" -msgstr "" +msgstr "Lamam" #. name for lmn msgid "Lambadi" -msgstr "" +msgstr "Lambadi" #. name for lmo msgid "Lombard" -msgstr "" +msgstr "Lombard" #. name for lmp msgid "Limbum" -msgstr "" +msgstr "Limbum" #. name for lmq msgid "Lamatuka" -msgstr "" +msgstr "Lamatuka" #. name for lmr msgid "Lamalera" -msgstr "" +msgstr "Lamalera" #. name for lmu msgid "Lamenu" -msgstr "" +msgstr "Lamenu" #. name for lmv msgid "Lomaiviti" -msgstr "" +msgstr "Lomaiviti" #. name for lmw msgid "Miwok; Lake" -msgstr "" +msgstr "Miwok; Tasik" #. name for lmx msgid "Laimbue" -msgstr "" +msgstr "Laimbue" #. name for lmy msgid "Lamboya" -msgstr "" +msgstr "Lamboya" #. name for lmz msgid "Lumbee" -msgstr "" +msgstr "Lumbee" #. name for lna msgid "Langbashe" -msgstr "" +msgstr "Langbashe" #. name for lnb msgid "Mbalanhu" -msgstr "" +msgstr "Mbalanhu" #. name for lnd msgid "Lundayeh" -msgstr "" +msgstr "Lundayeh" #. name for lng msgid "Langobardic" -msgstr "" +msgstr "Langobardic" #. name for lnh msgid "Lanoh" -msgstr "" +msgstr "Lanoh" #. name for lni msgid "Daantanai'" -msgstr "" +msgstr "Daantanai'" #. name for lnj msgid "Leningitij" -msgstr "" +msgstr "Leningitij" #. name for lnl msgid "Banda; South Central" -msgstr "" +msgstr "Banda; Tengah Selatan" #. name for lnm msgid "Langam" -msgstr "" +msgstr "Langam" #. name for lnn msgid "Lorediakarkar" -msgstr "" +msgstr "Lorediakarkar" #. name for lno msgid "Lango (Sudan)" -msgstr "" +msgstr "Lango (Sudan)" #. name for lns msgid "Lamnso'" -msgstr "" +msgstr "Lamnso'" #. name for lnu msgid "Longuda" -msgstr "" +msgstr "Longuda" #. name for lnz msgid "Lonzo" -msgstr "" +msgstr "Lonzo" #. name for loa msgid "Loloda" -msgstr "" +msgstr "Loloda" #. name for lob msgid "Lobi" -msgstr "" +msgstr "Lobi" #. name for loc msgid "Inonhan" -msgstr "" +msgstr "Inonhan" #. name for loe msgid "Coastal" -msgstr "" +msgstr "Coastal" #. name for lof msgid "Logol" -msgstr "" +msgstr "Logol" #. name for log msgid "Logo" -msgstr "" +msgstr "Logo" #. name for loh msgid "Narim" -msgstr "" +msgstr "Narim" #. name for loi msgid "Loma (Côte d'Ivoire)" -msgstr "" +msgstr "Loma (Côte d'Ivoire)" #. name for loj msgid "Lou" -msgstr "" +msgstr "Lou" #. name for lok msgid "Loko" -msgstr "" +msgstr "Loko" #. name for lol msgid "Mongo" -msgstr "" +msgstr "Mongo" #. name for lom msgid "Loma (Liberia)" -msgstr "" +msgstr "Loma (Liberia)" #. name for lon msgid "Lomwe; Malawi" -msgstr "" +msgstr "Lomwe; Malawi" #. name for loo msgid "Lombo" -msgstr "" +msgstr "Lombo" #. name for lop msgid "Lopa" -msgstr "" +msgstr "Lopa" #. name for loq msgid "Lobala" -msgstr "" +msgstr "Lobala" #. name for lor msgid "Téén" -msgstr "" +msgstr "Téén" #. name for los msgid "Loniu" -msgstr "" +msgstr "Loniu" #. name for lot msgid "Otuho" -msgstr "" +msgstr "Otuho" #. name for lou msgid "Creole French; Louisiana" -msgstr "" +msgstr "Perancis Creole; Louisiana" #. name for lov msgid "Lopi" -msgstr "" +msgstr "Lopi" #. name for low msgid "Lobu; Tampias" -msgstr "" +msgstr "Lobu; Tampias" #. name for lox msgid "Loun" -msgstr "" +msgstr "Loun" #. name for loy msgid "Lowa" -msgstr "" +msgstr "Lowa" #. name for loz msgid "Lozi" -msgstr "" +msgstr "Lozi" #. name for lpa msgid "Lelepa" -msgstr "" +msgstr "Lelepa" #. name for lpe msgid "Lepki" -msgstr "" +msgstr "Lepki" #. name for lpn msgid "Naga; Long Phuri" -msgstr "" +msgstr "Naga; Long Phuri" #. name for lpo msgid "Lipo" -msgstr "" +msgstr "Lipo" #. name for lpx msgid "Lopit" -msgstr "" +msgstr "Lopit" #. name for lra msgid "Rara Bakati'" -msgstr "" +msgstr "Rara Bakati'" #. name for lrc msgid "Luri; Northern" -msgstr "" +msgstr "Luri; Utara" #. name for lre msgid "Laurentian" -msgstr "" +msgstr "Laurentia" #. name for lrg msgid "Laragia" -msgstr "" +msgstr "Laragia" #. name for lri msgid "Marachi" -msgstr "" +msgstr "Marachi" #. name for lrk msgid "Loarki" -msgstr "" +msgstr "Loarki" #. name for lrl msgid "Lari" -msgstr "" +msgstr "Lari" #. name for lrm msgid "Marama" -msgstr "" +msgstr "Marama" #. name for lrn msgid "Lorang" -msgstr "" +msgstr "Lorang" #. name for lro msgid "Laro" -msgstr "" +msgstr "Laro" #. name for lrr msgid "Lorung; Southern" -msgstr "" +msgstr "Lorung; Selatan" #. name for lrt msgid "Malay; Larantuka" -msgstr "" +msgstr "Malay; Larantuka" #. name for lrv msgid "Larevat" -msgstr "" +msgstr "Larevat" #. name for lrz msgid "Lemerig" -msgstr "" +msgstr "Lemerig" #. name for lsa msgid "Lasgerdi" -msgstr "" +msgstr "Lasgerdi" #. name for lsd msgid "Lishana Deni" -msgstr "" +msgstr "Lishana Deni" #. name for lse msgid "Lusengo" -msgstr "" +msgstr "Lusengo" #. name for lsg msgid "Lyons Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Lyons" #. name for lsh msgid "Lish" -msgstr "" +msgstr "Lish" #. name for lsi msgid "Lashi" -msgstr "" +msgstr "Lashi" #. name for lsl msgid "Latvian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Latvia" #. name for lsm msgid "Saamia" -msgstr "" +msgstr "Saamia" #. name for lso msgid "Laos Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Laos" #. name for lsp msgid "Panamanian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Panama" #. name for lsr msgid "Aruop" -msgstr "" +msgstr "Aruop" #. name for lss msgid "Lasi" -msgstr "" +msgstr "Lasi" #. name for lst msgid "Trinidad and Tobago Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Trinidad dan Tobago" #. name for lsy msgid "Mauritian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mauriti" #. name for ltc msgid "Chinese; Late Middle" -msgstr "" +msgstr "Cina; Pertengahan Akhir" #. name for ltg msgid "Latgalian" -msgstr "" +msgstr "Latgalia" #. name for lti msgid "Leti (Indonesia)" -msgstr "" +msgstr "Leti (Indonesia)" #. name for ltn msgid "Latundê" -msgstr "" +msgstr "Latundê" #. name for lto msgid "Tsotso" -msgstr "" +msgstr "Tsotso" #. name for lts msgid "Tachoni" -msgstr "" +msgstr "Tachoni" #. name for ltu msgid "Latu" -msgstr "" +msgstr "Latu" #. name for ltz msgid "Luxembourgish" -msgstr "" +msgstr "Luxembourg" #. name for lua msgid "Luba-Lulua" -msgstr "" +msgstr "Luba-Lulua" #. name for lub msgid "Luba-Katanga" -msgstr "" +msgstr "Luba-Katanga" #. name for luc msgid "Aringa" -msgstr "" +msgstr "Aringa" #. name for lud msgid "Ludian" -msgstr "" +msgstr "Ludian" #. name for lue msgid "Luvale" -msgstr "" +msgstr "Luvale" #. name for luf msgid "Laua" -msgstr "" +msgstr "Laua" #. name for lug msgid "Ganda" -msgstr "" +msgstr "Ganda" #. name for lui msgid "Luiseno" -msgstr "" +msgstr "Luiseno" #. name for luj msgid "Luna" -msgstr "" +msgstr "Luna" #. name for luk msgid "Lunanakha" -msgstr "" +msgstr "Lunanakha" #. name for lul msgid "Olu'bo" -msgstr "" +msgstr "Olu'bo" #. name for lum msgid "Luimbi" -msgstr "" +msgstr "Luimbi" #. name for lun msgid "Lunda" -msgstr "" +msgstr "Lunda" #. name for luo msgid "Luo (Kenya and Tanzania)" -msgstr "" +msgstr "Luo (Kenya dan Tanzania)" #. name for lup msgid "Lumbu" -msgstr "" +msgstr "Lumbu" #. name for luq msgid "Lucumi" -msgstr "" +msgstr "Lucumi" #. name for lur msgid "Laura" -msgstr "" +msgstr "Laura" #. name for lus msgid "Lushai" -msgstr "" +msgstr "Lushai" #. name for lut msgid "Lushootseed" -msgstr "" +msgstr "Lushootseed" #. name for luu msgid "Lumba-Yakkha" -msgstr "" +msgstr "Lumba-Yakkha" #. name for luv msgid "Luwati" -msgstr "" +msgstr "Luwati" #. name for luw msgid "Luo (Cameroon)" -msgstr "" +msgstr "Luo (Cameroon)" #. name for luy msgid "Luyia" -msgstr "" +msgstr "Luyia" #. name for luz msgid "Luri; Southern" -msgstr "" +msgstr "Luri; Selatan" #. name for lva msgid "Maku'a" -msgstr "" +msgstr "Maku'a" #. name for lvk msgid "Lavukaleve" -msgstr "" +msgstr "Lavukaleve" #. name for lvs msgid "Latvian; Standard" -msgstr "" +msgstr "Latvia; Piawai" #. name for lvu msgid "Levuka" -msgstr "" +msgstr "Levuka" #. name for lwa msgid "Lwalu" -msgstr "" +msgstr "Lwalu" #. name for lwe msgid "Lewo Eleng" -msgstr "" +msgstr "Lewo Eleng" #. name for lwg msgid "Wanga" -msgstr "" +msgstr "Wanga" #. name for lwh msgid "Lachi; White" -msgstr "" +msgstr "Lachi; White" #. name for lwl msgid "Lawa; Eastern" -msgstr "" +msgstr "Lawa; Timur" #. name for lwm msgid "Laomian" -msgstr "" +msgstr "Laomian" #. name for lwo msgid "Luwo" -msgstr "" +msgstr "Luwo" #. name for lwt msgid "Lewotobi" -msgstr "" +msgstr "Lewotobi" #. name for lww msgid "Lewo" -msgstr "" +msgstr "Lewo" #. name for lya msgid "Layakha" -msgstr "" +msgstr "Layakha" #. name for lyg msgid "Lyngngam" -msgstr "" +msgstr "Lyngngam" #. name for lyn msgid "Luyana" -msgstr "" +msgstr "Luyana" #. name for lzh msgid "Chinese; Literary" -msgstr "" +msgstr "Cina, Literasi" #. name for lzl msgid "Litzlitz" -msgstr "" +msgstr "Litzlitz" #. name for lzn msgid "Naga; Leinong" -msgstr "" +msgstr "Naga; Leinong" #. name for lzz msgid "Laz" -msgstr "" +msgstr "Laz" #. name for maa msgid "Mazatec; San Jerónimo Tecóatl" -msgstr "" +msgstr "Mazatec; San Jerónimo Tecóatl" #. name for mab msgid "Mixtec; Yutanduchi" -msgstr "" +msgstr "Mixtec; Yutanduchi" #. name for mad msgid "Madurese" -msgstr "" +msgstr "Madura" #. name for mae msgid "Bo-Rukul" -msgstr "" +msgstr "Bo-Rukul" #. name for maf msgid "Mafa" -msgstr "" +msgstr "Mafa" #. name for mag msgid "Magahi" -msgstr "" +msgstr "Magahi" #. name for mah msgid "Marshallese" -msgstr "" +msgstr "Marshall" #. name for mai msgid "Maithili" -msgstr "" +msgstr "Maithili" #. name for maj msgid "Mazatec; Jalapa De Díaz" -msgstr "" +msgstr "Mazatec; Jalapa De Díaz" #. name for mak msgid "Makasar" -msgstr "" +msgstr "Makasar" #. name for mal msgid "Malayalam" -msgstr "" +msgstr "Malayalam" #. name for mam msgid "Mam" -msgstr "" +msgstr "Mam" #. name for man msgid "Mandingo" -msgstr "" +msgstr "Mandingo" #. name for maq msgid "Mazatec; Chiquihuitlán" -msgstr "" +msgstr "Mazatec; Chiquihuitlán" #. name for mar msgid "Marathi" -msgstr "" +msgstr "Marathi" #. name for mas msgid "Masai" -msgstr "" +msgstr "Masai" #. name for mat msgid "Matlatzinca; San Francisco" -msgstr "" +msgstr "Matlatzinca; San Francisco" #. name for mau msgid "Mazatec; Huautla" -msgstr "" +msgstr "Mazatec; Huautla" #. name for mav msgid "Sateré-Mawé" -msgstr "" +msgstr "Sateré-Mawé" #. name for maw msgid "Mampruli" -msgstr "" +msgstr "Mampruli" #. name for max msgid "Malay; North Moluccan" -msgstr "" +msgstr "Melayu; Molucca Utara" #. name for maz msgid "Mazahua; Central" -msgstr "" +msgstr "Mazahua; Tengah" #. name for mba msgid "Higaonon" -msgstr "" +msgstr "Higaonon" #. name for mbb msgid "Manobo; Western Bukidnon" -msgstr "" +msgstr "Manobo; Bukidnon Barat" #. name for mbc msgid "Macushi" -msgstr "" +msgstr "Macushi" #. name for mbd msgid "Manobo; Dibabawon" -msgstr "" +msgstr "Manobo; Dibabawon" #. name for mbe msgid "Molale" -msgstr "" +msgstr "Molale" #. name for mbf msgid "Malay; Baba" -msgstr "" +msgstr "Melayu; Baba" #. name for mbh msgid "Mangseng" -msgstr "" +msgstr "Mangseng" #. name for mbi msgid "Manobo; Ilianen" -msgstr "" +msgstr "Manobo; Ilianen" #. name for mbj msgid "Nadëb" -msgstr "" +msgstr "Nadëb" #. name for mbk msgid "Malol" -msgstr "" +msgstr "Malol" #. name for mbl msgid "Maxakalí" -msgstr "" +msgstr "Maxakalí" #. name for mbm msgid "Ombamba" -msgstr "" +msgstr "Ombamba" #. name for mbn msgid "Macaguán" -msgstr "" +msgstr "Macaguán" #. name for mbo msgid "Mbo (Cameroon)" -msgstr "" +msgstr "Mbo (Cameroon)" #. name for mbp msgid "Malayo" -msgstr "" +msgstr "Malayo" #. name for mbq msgid "Maisin" -msgstr "" +msgstr "Maisin" #. name for mbr msgid "Nukak Makú" -msgstr "" +msgstr "Nukak Makú" #. name for mbs msgid "Manobo; Sarangani" -msgstr "" +msgstr "Manobo; Sarangani" #. name for mbt msgid "Manobo; Matigsalug" -msgstr "" +msgstr "Manobo; Matigsalug" #. name for mbu msgid "Mbula-Bwazza" -msgstr "" +msgstr "Mbula-Bwazza" #. name for mbv msgid "Mbulungish" -msgstr "" +msgstr "Mbulungish" #. name for mbw msgid "Maring" -msgstr "" +msgstr "Maring" #. name for mbx msgid "Mari (East Sepik Province)" -msgstr "" +msgstr "Mari (Wilayah Sepik Timur)" #. name for mby msgid "Memoni" -msgstr "" +msgstr "Memoni" #. name for mbz msgid "Mixtec; Amoltepec" -msgstr "" +msgstr "Mixtec; Amoltepec" #. name for mca msgid "Maca" -msgstr "" +msgstr "Maca" #. name for mcb msgid "Machiguenga" -msgstr "" +msgstr "Machiguenga" #. name for mcc msgid "Bitur" -msgstr "" +msgstr "Bitur" #. name for mcd msgid "Sharanahua" -msgstr "" +msgstr "Sharanahua" #. name for mce msgid "Mixtec; Itundujia" -msgstr "" +msgstr "Mixtec; Itundujia" #. name for mcf msgid "Matsés" -msgstr "" +msgstr "Matsés" #. name for mcg msgid "Mapoyo" -msgstr "" +msgstr "Mapoyo" #. name for mch msgid "Maquiritari" -msgstr "" +msgstr "Maquiritari" #. name for mci msgid "Mese" -msgstr "" +msgstr "Mese" #. name for mcj msgid "Mvanip" -msgstr "" +msgstr "Mvanip" #. name for mck msgid "Mbunda" -msgstr "" +msgstr "Mbunda" #. name for mcl msgid "Macaguaje" -msgstr "" +msgstr "Macaguaje" #. name for mcm msgid "Creole Portuguese; Malaccan" -msgstr "" +msgstr "Portugis Creole; Melaka" #. name for mcn msgid "Masana" -msgstr "" +msgstr "Masana" #. name for mco msgid "Mixe; Coatlán" -msgstr "" +msgstr "Mixe; Coatlán" #. name for mcp msgid "Makaa" -msgstr "" +msgstr "Makaa" #. name for mcq msgid "Ese" -msgstr "" +msgstr "Ese" #. name for mcr msgid "Menya" -msgstr "" +msgstr "Menya" #. name for mcs msgid "Mambai" -msgstr "" +msgstr "Mambai" #. name for mct msgid "Mengisa" -msgstr "" +msgstr "Mengisa" #. name for mcu msgid "Mambila; Cameroon" -msgstr "" +msgstr "Mambila; Cameroon" #. name for mcv msgid "Minanibai" -msgstr "" +msgstr "Minanibai" #. name for mcw msgid "Mawa (Chad)" -msgstr "" +msgstr "Mawa (Chad)" #. name for mcx msgid "Mpiemo" -msgstr "" +msgstr "Mpiemo" #. name for mcy msgid "Watut; South" -msgstr "" +msgstr "Watut; Selatan" #. name for mcz msgid "Mawan" -msgstr "" +msgstr "Mawan" #. name for mda msgid "Mada (Nigeria)" -msgstr "" +msgstr "Mada (Nigeria)" #. name for mdb msgid "Morigi" -msgstr "" +msgstr "Morigi" #. name for mdc msgid "Male (Papua New Guinea)" -msgstr "" +msgstr "Male (Papua New Guinea)" #. name for mdd msgid "Mbum" -msgstr "" +msgstr "Mbum" #. name for mde msgid "Maba (Chad)" -msgstr "" +msgstr "Maba (Chad)" #. name for mdf msgid "Moksha" -msgstr "" +msgstr "Moksha" #. name for mdg msgid "Massalat" -msgstr "" +msgstr "Massalat" #. name for mdh msgid "Maguindanaon" -msgstr "" +msgstr "Maguindanaon" #. name for mdi msgid "Mamvu" -msgstr "" +msgstr "Mamvu" #. name for mdj msgid "Mangbetu" -msgstr "" +msgstr "Mangbetu" #. name for mdk msgid "Mangbutu" -msgstr "" +msgstr "Mangbutu" #. name for mdl msgid "Maltese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Malta" #. name for mdm msgid "Mayogo" -msgstr "" +msgstr "Mayogo" #. name for mdn msgid "Mbati" -msgstr "" +msgstr "Mbati" #. name for mdp msgid "Mbala" -msgstr "" +msgstr "Mbala" #. name for mdq msgid "Mbole" -msgstr "" +msgstr "Mbole" #. name for mdr msgid "Mandar" -msgstr "" +msgstr "Mandar" #. name for mds msgid "Maria (Papua New Guinea)" -msgstr "" +msgstr "Maria (Papua New Guinea)" #. name for mdt msgid "Mbere" -msgstr "" +msgstr "Mbere" #. name for mdu msgid "Mboko" -msgstr "" +msgstr "Mboko" #. name for mdv msgid "Mixtec; Santa Lucía Monteverde" -msgstr "" +msgstr "Mixtec; Santa Lucía Monteverde" #. name for mdw msgid "Mbosi" -msgstr "" +msgstr "Mbosi" #. name for mdx msgid "Dizin" -msgstr "" +msgstr "Dizin" #. name for mdy msgid "Male (Ethiopia)" -msgstr "" +msgstr "Male (Ethiopia)" #. name for mdz msgid "Suruí Do Pará" -msgstr "" +msgstr "Suruí Do Pará" #. name for mea msgid "Menka" -msgstr "" +msgstr "Menka" #. name for meb msgid "Ikobi-Mena" -msgstr "" +msgstr "Ikobi-Mena" #. name for mec msgid "Mara" -msgstr "" +msgstr "Mara" #. name for med msgid "Melpa" -msgstr "" +msgstr "Melpa" #. name for mee msgid "Mengen" -msgstr "" +msgstr "Mengen" #. name for mef msgid "Megam" -msgstr "" +msgstr "Megam" #. name for meg msgid "Mea" -msgstr "" +msgstr "Mea" #. name for meh msgid "Mixtec; Southwestern Tlaxiaco" -msgstr "" +msgstr "Mixtec; Tlaxiaco Barat Daya" #. name for mei msgid "Midob" -msgstr "" +msgstr "Midob" #. name for mej msgid "Meyah" -msgstr "" +msgstr "Meyah" #. name for mek msgid "Mekeo" -msgstr "" +msgstr "Mekeo" #. name for mel msgid "Melanau; Central" -msgstr "" +msgstr "Melanau; Tengah" #. name for mem msgid "Mangala" -msgstr "" +msgstr "Mangala" #. name for men msgid "Mende (Sierra Leone)" -msgstr "" +msgstr "Mende (Sierra Leone)" #. name for meo msgid "Malay; Kedah" -msgstr "" +msgstr "Melayu; Kedah" #. name for mep msgid "Miriwung" -msgstr "" +msgstr "Miriwung" #. name for meq msgid "Merey" -msgstr "" +msgstr "Merey" #. name for mer msgid "Meru" -msgstr "" +msgstr "Meru" #. name for mes msgid "Masmaje" -msgstr "" +msgstr "Masmaje" #. name for met msgid "Mato" -msgstr "" +msgstr "Mato" #. name for meu msgid "Motu" -msgstr "" +msgstr "Motu" #. name for mev msgid "Mann" -msgstr "" +msgstr "Mann" #. name for mew msgid "Maaka" -msgstr "" +msgstr "Maaka" #. name for mey msgid "Hassaniyya" -msgstr "" +msgstr "Hassaniyya" #. name for mez msgid "Menominee" -msgstr "" +msgstr "Menominee" #. name for mfa msgid "Malay; Pattani" -msgstr "" +msgstr "Melayu; Pattani" #. name for mfb msgid "Bangka" -msgstr "" +msgstr "Bangka" #. name for mfc msgid "Mba" -msgstr "" +msgstr "Mba" #. name for mfd msgid "Mendankwe-Nkwen" -msgstr "" +msgstr "Mendankwe-Nkwen" #. name for mfe msgid "Morisyen" -msgstr "" +msgstr "Morisyen" #. name for mff msgid "Naki" -msgstr "" +msgstr "Naki" #. name for mfg msgid "Mixifore" -msgstr "" +msgstr "Mixifore" #. name for mfh msgid "Matal" -msgstr "" +msgstr "Matal" #. name for mfi msgid "Wandala" -msgstr "" +msgstr "Wandala" #. name for mfj msgid "Mefele" -msgstr "" +msgstr "Mefele" #. name for mfk msgid "Mofu; North" -msgstr "" +msgstr "Mofu; Utara" #. name for mfl msgid "Putai" -msgstr "" +msgstr "Putai" #. name for mfm msgid "Marghi South" -msgstr "" +msgstr "Marghi Selatan" #. name for mfn msgid "Mbembe; Cross River" -msgstr "" +msgstr "Mbembe; Seberang Sungai" #. name for mfo msgid "Mbe" -msgstr "" +msgstr "Mbe" #. name for mfp msgid "Malay; Makassar" -msgstr "" +msgstr "Melayu; Makassar" #. name for mfq msgid "Moba" -msgstr "" +msgstr "Moba" #. name for mfr msgid "Marithiel" -msgstr "" +msgstr "Marithiel" #. name for mfs msgid "Mexican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mexico" #. name for mft msgid "Mokerang" -msgstr "" +msgstr "Mokerang" #. name for mfu msgid "Mbwela" -msgstr "" +msgstr "Mbwela" #. name for mfv msgid "Mandjak" -msgstr "" +msgstr "Mandjak" #. name for mfw msgid "Mulaha" -msgstr "" +msgstr "Mulaha" #. name for mfx msgid "Melo" -msgstr "" +msgstr "Melo" #. name for mfy msgid "Mayo" -msgstr "" +msgstr "Mayo" #. name for mfz msgid "Mabaan" -msgstr "" +msgstr "Mabaan" #. name for mga msgid "Irish; Middle (900-1200)" -msgstr "" +msgstr "Ireland; Pertengahan (900-1200)" #. name for mgb msgid "Mararit" -msgstr "" +msgstr "Mararit" #. name for mgc msgid "Morokodo" -msgstr "" +msgstr "Morokodo" #. name for mgd msgid "Moru" -msgstr "" +msgstr "Moru" #. name for mge msgid "Mango" -msgstr "" +msgstr "Mango" #. name for mgf msgid "Maklew" -msgstr "" +msgstr "Maklew" #. name for mgg msgid "Mpongmpong" -msgstr "" +msgstr "Mpongmpong" #. name for mgh msgid "Makhuwa-Meetto" -msgstr "" +msgstr "Makhuwa-Meetto" #. name for mgi msgid "Lijili" -msgstr "" +msgstr "Lijili" #. name for mgj msgid "Abureni" -msgstr "" +msgstr "Abureni" #. name for mgk msgid "Mawes" -msgstr "" +msgstr "Mawes" #. name for mgl msgid "Maleu-Kilenge" -msgstr "" +msgstr "Maleu-Kilenge" #. name for mgm msgid "Mambae" -msgstr "" +msgstr "Mambae" #. name for mgn msgid "Mbangi" -msgstr "" +msgstr "Mbangi" #. name for mgo msgid "Meta'" -msgstr "" +msgstr "Meta'" #. name for mgp msgid "Magar; Eastern" -msgstr "" +msgstr "Magar; Timur" #. name for mgq msgid "Malila" -msgstr "" +msgstr "Malila" #. name for mgr msgid "Mambwe-Lungu" -msgstr "" +msgstr "Mambwe-Lungu" #. name for mgs msgid "Manda (Tanzania)" -msgstr "" +msgstr "Manda (Tanzania)" #. name for mgt msgid "Mongol" -msgstr "" +msgstr "Mongol" #. name for mgu msgid "Mailu" -msgstr "" +msgstr "Mailu" #. name for mgv msgid "Matengo" -msgstr "" +msgstr "Matengo" #. name for mgw msgid "Matumbi" -msgstr "" +msgstr "Matumbi" #. name for mgx msgid "Omati" -msgstr "" +msgstr "Omati" #. name for mgy msgid "Mbunga" -msgstr "" +msgstr "Mbunga" #. name for mgz msgid "Mbugwe" -msgstr "" +msgstr "Mbugwe" #. name for mha msgid "Manda (India)" -msgstr "" +msgstr "Manda (India)" #. name for mhb msgid "Mahongwe" -msgstr "" +msgstr "Mahongwe" #. name for mhc msgid "Mocho" -msgstr "" +msgstr "Mocho" #. name for mhd msgid "Mbugu" -msgstr "" +msgstr "Mbugu" #. name for mhe msgid "Besisi" -msgstr "" +msgstr "Besisi" #. name for mhf msgid "Mamaa" -msgstr "" +msgstr "Mamaa" #. name for mhg msgid "Margu" -msgstr "" +msgstr "Margu" #. name for mhh msgid "Maskoy Pidgin" -msgstr "" +msgstr "Maskoy Pidgin" #. name for mhi msgid "Ma'di" -msgstr "" +msgstr "Ma'di" #. name for mhj msgid "Mogholi" -msgstr "" +msgstr "Mogholi" #. name for mhk msgid "Mungaka" -msgstr "" +msgstr "Mungaka" #. name for mhl msgid "Mauwake" -msgstr "" +msgstr "Mauwake" #. name for mhm msgid "Makhuwa-Moniga" -msgstr "" +msgstr "Makhuwa-Moniga" #. name for mhn msgid "Mócheno" -msgstr "" +msgstr "Mócheno" #. name for mho msgid "Mashi (Zambia)" -msgstr "" +msgstr "Mashi (Zambia)" #. name for mhp msgid "Malay; Balinese" -msgstr "" +msgstr "Melayu; Bali" #. name for mhq msgid "Mandan" -msgstr "" +msgstr "Mandan" #. name for mhr msgid "Mari; Eastern" -msgstr "" +msgstr "Mari; Timur" #. name for mhs msgid "Buru (Indonesia)" -msgstr "" +msgstr "Buru (Indonesia)" #. name for mht msgid "Mandahuaca" -msgstr "" +msgstr "Mandahuaca" #. name for mhu msgid "Deng; Darang" -msgstr "" +msgstr "Deng; Darang" #. name for mhw msgid "Mbukushu" -msgstr "" +msgstr "Mbukushu" #. name for mhx msgid "Maru" -msgstr "" +msgstr "Maru" #. name for mhy msgid "Ma'anyan" -msgstr "" +msgstr "Ma'anyan" #. name for mhz msgid "Mor (Mor Islands)" -msgstr "" +msgstr "Mor (Kepulauan Mor)" #. name for mia msgid "Miami" -msgstr "" +msgstr "Miami" #. name for mib msgid "Mixtec; Atatláhuca" -msgstr "" +msgstr "Mixtec; Atatláhuca" #. name for mic msgid "Mi'kmaq" -msgstr "" +msgstr "Mi'kmaq" #. name for mid msgid "Mandaic" -msgstr "" +msgstr "Mandaic" #. name for mie msgid "Mixtec; Ocotepec" -msgstr "" +msgstr "Mixtec; Ocotepec" #. name for mif msgid "Mofu-Gudur" -msgstr "" +msgstr "Mofu-Gudur" #. name for mig msgid "Mixtec; San Miguel El Grande" -msgstr "" +msgstr "Mixtec; San Miguel El Grande" #. name for mih msgid "Mixtec; Chayuco" -msgstr "" +msgstr "Mixtec; Chayuco" #. name for mii msgid "Mixtec; Chigmecatitlán" -msgstr "" +msgstr "Mixtec; Chigmecatitlán" #. name for mij msgid "Abar" -msgstr "" +msgstr "Abar" #. name for mik msgid "Mikasuki" -msgstr "" +msgstr "Mikasuki" #. name for mil msgid "Mixtec; Peñoles" -msgstr "" +msgstr "Mixtec; Peñoles" #. name for mim msgid "Mixtec; Alacatlatzala" -msgstr "" +msgstr "Mixtec; Alacatlatzala" #. name for min msgid "Minangkabau" -msgstr "" +msgstr "Minangkabau" #. name for mio msgid "Mixtec; Pinotepa Nacional" -msgstr "" +msgstr "Mixtec; Pinotepa Nacional" #. name for mip msgid "Mixtec; Apasco-Apoala" -msgstr "" +msgstr "Mixtec; Apasco-Apoala" #. name for miq msgid "Mískito" -msgstr "" +msgstr "Mískito" #. name for mir msgid "Mixe; Isthmus" -msgstr "" +msgstr "Mixe; Isthmus" #. name for mis msgid "Uncoded languages" -msgstr "" +msgstr "Bahasa tidak dikod" #. name for mit msgid "Mixtec; Southern Puebla" -msgstr "" +msgstr "Mixtec; Puebla Selatan" #. name for miu msgid "Mixtec; Cacaloxtepec" -msgstr "" +msgstr "Mixtec; Cacaloxtepec" #. name for miw msgid "Akoye" -msgstr "" +msgstr "Akoye" #. name for mix msgid "Mixtec; Mixtepec" -msgstr "" +msgstr "Mixtec; Mixtepec" #. name for miy msgid "Mixtec; Ayutla" -msgstr "" +msgstr "Mixtec; Ayutla" #. name for miz msgid "Mixtec; Coatzospan" -msgstr "" +msgstr "Mixtec; Coatzospan" #. name for mjc msgid "Mixtec; San Juan Colorado" -msgstr "" +msgstr "Mixtec; San Juan Colorado" #. name for mjd msgid "Maidu; Northwest" -msgstr "" +msgstr "Maidu; Barat Daya" #. name for mje msgid "Muskum" -msgstr "" +msgstr "Muskum" #. name for mjg msgid "Tu" -msgstr "" +msgstr "Tu" #. name for mjh msgid "Mwera (Nyasa)" -msgstr "" +msgstr "Mwera (Nyasa)" #. name for mji msgid "Kim Mun" -msgstr "" +msgstr "Kim Mun" #. name for mjj msgid "Mawak" -msgstr "" +msgstr "Mawak" #. name for mjk msgid "Matukar" -msgstr "" +msgstr "Matukar" #. name for mjl msgid "Mandeali" -msgstr "" +msgstr "Mandeali" #. name for mjm msgid "Medebur" -msgstr "" +msgstr "Medebur" #. name for mjn msgid "Ma (Papua New Guinea)" -msgstr "" +msgstr "Ma (Papua New Guinea)" #. name for mjo msgid "Malankuravan" -msgstr "" +msgstr "Malankuravan" #. name for mjp msgid "Malapandaram" -msgstr "" +msgstr "Malapandaram" #. name for mjq msgid "Malaryan" -msgstr "" +msgstr "Malaryan" #. name for mjr msgid "Malavedan" -msgstr "" +msgstr "Malavedan" #. name for mjs msgid "Miship" -msgstr "" +msgstr "Miship" #. name for mjt msgid "Sauria Paharia" -msgstr "" +msgstr "Sauria Paharia" #. name for mju msgid "Manna-Dora" -msgstr "" +msgstr "Manna-Dora" #. name for mjv msgid "Mannan" -msgstr "" +msgstr "Mannan" #. name for mjw msgid "Karbi" -msgstr "" +msgstr "Karbi" #. name for mjx msgid "Mahali" -msgstr "" +msgstr "Mahali" #. name for mjy msgid "Mahican" -msgstr "" +msgstr "Mahican" #. name for mjz msgid "Majhi" -msgstr "" +msgstr "Majhi" #. name for mka msgid "Mbre" -msgstr "" +msgstr "Mbre" #. name for mkb msgid "Mal Paharia" -msgstr "" +msgstr "Mal Paharia" #. name for mkc msgid "Siliput" -msgstr "" +msgstr "Siliput" #. name for mkd msgid "Macedonian" @@ -16034,2531 +16034,2531 @@ msgstr "Macedonian" #. name for mke msgid "Mawchi" -msgstr "" +msgstr "Mawchi" #. name for mkf msgid "Miya" -msgstr "" +msgstr "Miya" #. name for mkg msgid "Mak (China)" -msgstr "" +msgstr "Mak (China)" #. name for mki msgid "Dhatki" -msgstr "" +msgstr "Dhatki" #. name for mkj msgid "Mokilese" -msgstr "" +msgstr "Mokilese" #. name for mkk msgid "Byep" -msgstr "" +msgstr "Byep" #. name for mkl msgid "Mokole" -msgstr "" +msgstr "Mokole" #. name for mkm msgid "Moklen" -msgstr "" +msgstr "Moklen" #. name for mkn msgid "Malay; Kupang" -msgstr "" +msgstr "Melayu; Kupang" #. name for mko msgid "Mingang Doso" -msgstr "" +msgstr "Mingang Doso" #. name for mkp msgid "Moikodi" -msgstr "" +msgstr "Moikodi" #. name for mkq msgid "Miwok; Bay" -msgstr "" +msgstr "Miwok; Teluk" #. name for mkr msgid "Malas" -msgstr "" +msgstr "Malas" #. name for mks msgid "Mixtec; Silacayoapan" -msgstr "" +msgstr "Mixtec; Silacayoapan" #. name for mkt msgid "Vamale" -msgstr "" +msgstr "Vamale" #. name for mku msgid "Maninka; Konyanka" -msgstr "" +msgstr "Maninka; Konyanka" #. name for mkv msgid "Mafea" -msgstr "" +msgstr "Mafea" #. name for mkw msgid "Kituba (Congo)" -msgstr "" +msgstr "Kituba (Congo)" #. name for mkx msgid "Manobo; Kinamiging" -msgstr "" +msgstr "Manobo; Kinamiging" #. name for mky msgid "Makian; East" -msgstr "" +msgstr "Makian; Timur" #. name for mkz msgid "Makasae" -msgstr "" +msgstr "Makasae" #. name for mla msgid "Malo" -msgstr "" +msgstr "Malo" #. name for mlb msgid "Mbule" -msgstr "" +msgstr "Mbule" #. name for mlc msgid "Cao Lan" -msgstr "" +msgstr "Cao Lan" #. name for mld msgid "Malakhel" -msgstr "" +msgstr "Malakhel" #. name for mle msgid "Manambu" -msgstr "" +msgstr "Manambu" #. name for mlf msgid "Mal" -msgstr "" +msgstr "Mal" #. name for mlg msgid "Malagasy" -msgstr "" +msgstr "Malagasy" #. name for mlh msgid "Mape" -msgstr "" +msgstr "Mape" #. name for mli msgid "Malimpung" -msgstr "" +msgstr "Malimpung" #. name for mlj msgid "Miltu" -msgstr "" +msgstr "Miltu" #. name for mlk msgid "Ilwana" -msgstr "" +msgstr "Ilwana" #. name for mll msgid "Malua Bay" -msgstr "" +msgstr "Malua Bay" #. name for mlm msgid "Mulam" -msgstr "" +msgstr "Mulam" #. name for mln msgid "Malango" -msgstr "" +msgstr "Malango" #. name for mlo msgid "Mlomp" -msgstr "" +msgstr "Mlomp" #. name for mlp msgid "Bargam" -msgstr "" +msgstr "Bargam" #. name for mlq msgid "Maninkakan; Western" -msgstr "" +msgstr "Maninkakan; Barat" #. name for mlr msgid "Vame" -msgstr "" +msgstr "Vame" #. name for mls msgid "Masalit" -msgstr "" +msgstr "Masalit" #. name for mlt msgid "Maltese" -msgstr "" +msgstr "Malta" #. name for mlu msgid "To'abaita" -msgstr "" +msgstr "To'abaita" #. name for mlv msgid "Motlav" -msgstr "" +msgstr "Motlav" #. name for mlw msgid "Moloko" -msgstr "" +msgstr "Moloko" #. name for mlx msgid "Malfaxal" -msgstr "" +msgstr "Malfaxal" #. name for mlz msgid "Malaynon" -msgstr "" +msgstr "Malaynon" #. name for mma msgid "Mama" -msgstr "" +msgstr "Mama" #. name for mmb msgid "Momina" -msgstr "" +msgstr "Momina" #. name for mmc msgid "Mazahua; Michoacán" -msgstr "" +msgstr "Mazahua; Michoacán" #. name for mmd msgid "Maonan" -msgstr "" +msgstr "Maonan" #. name for mme msgid "Mae" -msgstr "" +msgstr "Mae" #. name for mmf msgid "Mundat" -msgstr "" +msgstr "Mundat" #. name for mmg msgid "Ambrym; North" -msgstr "" +msgstr "Ambrym; Utara" #. name for mmh msgid "Mehináku" -msgstr "" +msgstr "Mehináku" #. name for mmi msgid "Musar" -msgstr "" +msgstr "Musar" #. name for mmj msgid "Majhwar" -msgstr "" +msgstr "Majhwar" #. name for mmk msgid "Mukha-Dora" -msgstr "" +msgstr "Mukha-Dora" #. name for mml msgid "Man Met" -msgstr "" +msgstr "Man Met" #. name for mmm msgid "Maii" -msgstr "" +msgstr "Maii" #. name for mmn msgid "Mamanwa" -msgstr "" +msgstr "Mamanwa" #. name for mmo msgid "Buang; Mangga" -msgstr "" +msgstr "Buang; Mangga" #. name for mmp msgid "Siawi" -msgstr "" +msgstr "Siawi" #. name for mmq msgid "Musak" -msgstr "" +msgstr "Musak" #. name for mmr msgid "Miao; Western Xiangxi" -msgstr "" +msgstr "Miao; Xiangxi Barat" #. name for mmt msgid "Malalamai" -msgstr "" +msgstr "Malalamai" #. name for mmu msgid "Mmaala" -msgstr "" +msgstr "Mmaala" #. name for mmv msgid "Miriti" -msgstr "" +msgstr "Miriti" #. name for mmw msgid "Emae" -msgstr "" +msgstr "Emae" #. name for mmx msgid "Madak" -msgstr "" +msgstr "Madak" #. name for mmy msgid "Migaama" -msgstr "" +msgstr "Migaama" #. name for mmz msgid "Mabaale" -msgstr "" +msgstr "Mabaale" #. name for mna msgid "Mbula" -msgstr "" +msgstr "Mbula" #. name for mnb msgid "Muna" -msgstr "" +msgstr "Muna" #. name for mnc msgid "Manchu" -msgstr "" +msgstr "Manchu" #. name for mnd msgid "Mondé" -msgstr "" +msgstr "Mondé" #. name for mne msgid "Naba" -msgstr "" +msgstr "Naba" #. name for mnf msgid "Mundani" -msgstr "" +msgstr "Mundani" #. name for mng msgid "Mnong; Eastern" -msgstr "" +msgstr "Mnong; Timur" #. name for mnh msgid "Mono (Democratic Republic of Congo)" -msgstr "" +msgstr "Mono (Republik Democratik Congo)" #. name for mni msgid "Manipuri" -msgstr "" +msgstr "Manipuri" #. name for mnj msgid "Munji" -msgstr "" +msgstr "Munji" #. name for mnk msgid "Mandinka" -msgstr "" +msgstr "Mandinka" #. name for mnl msgid "Tiale" -msgstr "" +msgstr "Tiale" #. name for mnm msgid "Mapena" -msgstr "" +msgstr "Mapena" #. name for mnn msgid "Mnong; Southern" -msgstr "" +msgstr "Mnong; Selatan" #. name for mnp msgid "Chinese; Min Bei" -msgstr "" +msgstr "Cina; Min Bei" #. name for mnq msgid "Minriq" -msgstr "" +msgstr "Minriq" #. name for mnr msgid "Mono (USA)" -msgstr "" +msgstr "Mono (USA)" #. name for mns msgid "Mansi" -msgstr "" +msgstr "Mansi" #. name for mnt msgid "Maykulan" -msgstr "" +msgstr "Maykulan" #. name for mnu msgid "Mer" -msgstr "" +msgstr "Mer" #. name for mnv msgid "Rennell-Bellona" -msgstr "" +msgstr "Rennell-Bellona" #. name for mnw msgid "Mon" -msgstr "" +msgstr "Mon" #. name for mnx msgid "Manikion" -msgstr "" +msgstr "Manikion" #. name for mny msgid "Manyawa" -msgstr "" +msgstr "Manyawa" #. name for mnz msgid "Moni" -msgstr "" +msgstr "Moni" #. name for moa msgid "Mwan" -msgstr "" +msgstr "Mwan" #. name for moc msgid "Mocoví" -msgstr "" +msgstr "Mocoví" #. name for mod msgid "Mobilian" -msgstr "" +msgstr "Mobilian" #. name for moe msgid "Montagnais" -msgstr "" +msgstr "Montagnais" #. name for mog msgid "Mongondow" -msgstr "" +msgstr "Mongondow" #. name for moh msgid "Mohawk" -msgstr "" +msgstr "Mohawk" #. name for moi msgid "Mboi" -msgstr "" +msgstr "Mboi" #. name for moj msgid "Monzombo" -msgstr "" +msgstr "Monzombo" #. name for mok msgid "Morori" -msgstr "" +msgstr "Morori" #. name for mom msgid "Mangue" -msgstr "" +msgstr "Mangue" #. name for mon msgid "Mongolian" -msgstr "" +msgstr "Mongolia" #. name for moo msgid "Monom" -msgstr "" +msgstr "Monom" #. name for mop msgid "Mopán Maya" -msgstr "" +msgstr "Mopán Maya" #. name for moq msgid "Mor (Bomberai Peninsula)" -msgstr "" +msgstr "Mor (Semenanjung Bomberai)" #. name for mor msgid "Moro" -msgstr "" +msgstr "Moro" #. name for mos msgid "Mossi" -msgstr "" +msgstr "Mossi" #. name for mot msgid "Barí" -msgstr "" +msgstr "Barí" #. name for mou msgid "Mogum" -msgstr "" +msgstr "Mogum" #. name for mov msgid "Mohave" -msgstr "" +msgstr "Mohave" #. name for mow msgid "Moi (Congo)" -msgstr "" +msgstr "Moi (Congo)" #. name for mox msgid "Molima" -msgstr "" +msgstr "Molima" #. name for moy msgid "Shekkacho" -msgstr "" +msgstr "Shekkacho" #. name for moz msgid "Mukulu" -msgstr "" +msgstr "Mukulu" #. name for mpa msgid "Mpoto" -msgstr "" +msgstr "Mpoto" #. name for mpb msgid "Mullukmulluk" -msgstr "" +msgstr "Mullukmulluk" #. name for mpc msgid "Mangarayi" -msgstr "" +msgstr "Mangarayi" #. name for mpd msgid "Machinere" -msgstr "" +msgstr "Machinere" #. name for mpe msgid "Majang" -msgstr "" +msgstr "Majang" #. name for mpg msgid "Marba" -msgstr "" +msgstr "Marba" #. name for mph msgid "Maung" -msgstr "" +msgstr "Maung" #. name for mpi msgid "Mpade" -msgstr "" +msgstr "Mpade" #. name for mpj msgid "Martu Wangka" -msgstr "" +msgstr "Martu Wangka" #. name for mpk msgid "Mbara (Chad)" -msgstr "" +msgstr "Mbara (Chad)" #. name for mpl msgid "Watut; Middle" -msgstr "" +msgstr "Watut; Middle" #. name for mpm msgid "Mixtec; Yosondúa" -msgstr "" +msgstr "Mixtec; Yosondúa" #. name for mpn msgid "Mindiri" -msgstr "" +msgstr "Mindiri" #. name for mpo msgid "Miu" -msgstr "" +msgstr "Miu" #. name for mpp msgid "Migabac" -msgstr "" +msgstr "Migabac" #. name for mpq msgid "Matís" -msgstr "" +msgstr "Matís" #. name for mpr msgid "Vangunu" -msgstr "" +msgstr "Vangunu" #. name for mps msgid "Dadibi" -msgstr "" +msgstr "Dadibi" #. name for mpt msgid "Mian" -msgstr "" +msgstr "Mian" #. name for mpu msgid "Makuráp" -msgstr "" +msgstr "Makuráp" #. name for mpv msgid "Mungkip" -msgstr "" +msgstr "Mungkip" #. name for mpw msgid "Mapidian" -msgstr "" +msgstr "Mapidian" #. name for mpx msgid "Misima-Paneati" -msgstr "" +msgstr "Misima-Paneati" #. name for mpy msgid "Mapia" -msgstr "" +msgstr "Mapia" #. name for mpz msgid "Mpi" -msgstr "" +msgstr "Mpi" #. name for mqa msgid "Maba (Indonesia)" -msgstr "" +msgstr "Maba (Indonesia)" #. name for mqb msgid "Mbuko" -msgstr "" +msgstr "Mbuko" #. name for mqc msgid "Mangole" -msgstr "" +msgstr "Mangole" #. name for mqe msgid "Matepi" -msgstr "" +msgstr "Matepi" #. name for mqf msgid "Momuna" -msgstr "" +msgstr "Momuna" #. name for mqg msgid "Malay; Kota Bangun Kutai" -msgstr "" +msgstr "Malay; Kota Bangun Kutai" #. name for mqh msgid "Mixtec; Tlazoyaltepec" -msgstr "" +msgstr "Mixtec; Tlazoyaltepec" #. name for mqi msgid "Mariri" -msgstr "" +msgstr "Mariri" #. name for mqj msgid "Mamasa" -msgstr "" +msgstr "Mamasa" #. name for mqk msgid "Manobo; Rajah Kabunsuwan" -msgstr "" +msgstr "Manobo; Rajah Kabunsuwan" #. name for mql msgid "Mbelime" -msgstr "" +msgstr "Mbelime" #. name for mqm msgid "Marquesan; South" -msgstr "" +msgstr "Marquesan; Selatan" #. name for mqn msgid "Moronene" -msgstr "" +msgstr "Moronene" #. name for mqo msgid "Modole" -msgstr "" +msgstr "Modole" #. name for mqp msgid "Manipa" -msgstr "" +msgstr "Manipa" #. name for mqq msgid "Minokok" -msgstr "" +msgstr "Minokok" #. name for mqr msgid "Mander" -msgstr "" +msgstr "Mander" #. name for mqs msgid "Makian; West" -msgstr "" +msgstr "Makian; Barat" #. name for mqt msgid "Mok" -msgstr "" +msgstr "Mok" #. name for mqu msgid "Mandari" -msgstr "" +msgstr "Mandari" #. name for mqv msgid "Mosimo" -msgstr "" +msgstr "Mosimo" #. name for mqw msgid "Murupi" -msgstr "" +msgstr "Murupi" #. name for mqx msgid "Mamuju" -msgstr "" +msgstr "Mamuju" #. name for mqy msgid "Manggarai" -msgstr "" +msgstr "Manggarai" #. name for mqz msgid "Malasanga" -msgstr "" +msgstr "Malasanga" #. name for mra msgid "Mlabri" -msgstr "" +msgstr "Mlabri" #. name for mrb msgid "Marino" -msgstr "" +msgstr "Marino" #. name for mrc msgid "Maricopa" -msgstr "" +msgstr "Maricopa" #. name for mrd msgid "Magar; Western" -msgstr "" +msgstr "Magar; Barat" #. name for mre msgid "Martha's Vineyard Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Marta/s Vineyard" #. name for mrf msgid "Elseng" -msgstr "" +msgstr "Elseng" #. name for mrg msgid "Mising" -msgstr "" +msgstr "Mising" #. name for mrh msgid "Chin; Mara" -msgstr "" +msgstr "Chin; Mara" #. name for mri msgid "Maori" -msgstr "" +msgstr "Maori" #. name for mrj msgid "Mari; Western" -msgstr "" +msgstr "Mari; Barat" #. name for mrk msgid "Hmwaveke" -msgstr "" +msgstr "Hmwaveke" #. name for mrl msgid "Mortlockese" -msgstr "" +msgstr "Mortlockese" #. name for mrm msgid "Merlav" -msgstr "" +msgstr "Merlav" #. name for mrn msgid "Cheke Holo" -msgstr "" +msgstr "Cheke Holo" #. name for mro msgid "Mru" -msgstr "" +msgstr "Mru" #. name for mrp msgid "Morouas" -msgstr "" +msgstr "Morouas" #. name for mrq msgid "Marquesan; North" -msgstr "" +msgstr "Marquesan; Utara" #. name for mrr msgid "Maria (India)" -msgstr "" +msgstr "Maria (India)" #. name for mrs msgid "Maragus" -msgstr "" +msgstr "Maragus" #. name for mrt msgid "Marghi Central" -msgstr "" +msgstr "Marghi Tengah" #. name for mru msgid "Mono (Cameroon)" -msgstr "" +msgstr "Mono (Cameroon)" #. name for mrv msgid "Mangareva" -msgstr "" +msgstr "Mangareva" #. name for mrw msgid "Maranao" -msgstr "" +msgstr "Maranao" #. name for mrx msgid "Maremgi" -msgstr "" +msgstr "Maremgi" #. name for mry msgid "Mandaya" -msgstr "" +msgstr "Mandaya" #. name for mrz msgid "Marind" -msgstr "" +msgstr "Marind" #. name for msa msgid "Malay (macrolanguage)" -msgstr "" +msgstr "Melayu (bahasa makro)" #. name for msb msgid "Masbatenyo" -msgstr "" +msgstr "Masbatenyo" #. name for msc msgid "Maninka; Sankaran" -msgstr "" +msgstr "Maninka; Sankaran" #. name for msd msgid "Yucatec Maya Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Yucatec Maya" #. name for mse msgid "Musey" -msgstr "" +msgstr "Musey" #. name for msf msgid "Mekwei" -msgstr "" +msgstr "Mekwei" #. name for msg msgid "Moraid" -msgstr "" +msgstr "Moraid" #. name for msh msgid "Malagasy; Masikoro" -msgstr "" +msgstr "Malagasy; Masikoro" #. name for msi msgid "Malay; Sabah" -msgstr "" +msgstr "Melayu; Sabah" #. name for msj msgid "Ma (Democratic Republic of Congo)" -msgstr "" +msgstr "Ma (Republik Democratik Congo)" #. name for msk msgid "Mansaka" -msgstr "" +msgstr "Mansaka" #. name for msl msgid "Molof" -msgstr "" +msgstr "Molof" #. name for msm msgid "Manobo; Agusan" -msgstr "" +msgstr "Manobo; Agusan" #. name for msn msgid "Vurës" -msgstr "" +msgstr "Vurës" #. name for mso msgid "Mombum" -msgstr "" +msgstr "Mombum" #. name for msp msgid "Maritsauá" -msgstr "" +msgstr "Maritsauá" #. name for msq msgid "Caac" -msgstr "" +msgstr "Caac" #. name for msr msgid "Mongolian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mongolia" #. name for mss msgid "Masela; West" -msgstr "" +msgstr "Masela; Barat" #. name for msu msgid "Musom" -msgstr "" +msgstr "Musom" #. name for msv msgid "Maslam" -msgstr "" +msgstr "Maslam" #. name for msw msgid "Mansoanka" -msgstr "" +msgstr "Mansoanka" #. name for msx msgid "Moresada" -msgstr "" +msgstr "Moresada" #. name for msy msgid "Aruamu" -msgstr "" +msgstr "Aruamu" #. name for msz msgid "Momare" -msgstr "" +msgstr "Momare" #. name for mta msgid "Manobo; Cotabato" -msgstr "" +msgstr "Manobo; Cotabato" #. name for mtb msgid "Anyin Morofo" -msgstr "" +msgstr "Anyin Morofo" #. name for mtc msgid "Munit" -msgstr "" +msgstr "Munit" #. name for mtd msgid "Mualang" -msgstr "" +msgstr "Mualang" #. name for mte msgid "Mono (Solomon Islands)" -msgstr "" +msgstr "Mono (Kepulauan Solomon)" #. name for mtf msgid "Murik (Papua New Guinea)" -msgstr "" +msgstr "Murik (Papua New Guinea)" #. name for mtg msgid "Una" -msgstr "" +msgstr "Una" #. name for mth msgid "Munggui" -msgstr "" +msgstr "Munggui" #. name for mti msgid "Maiwa (Papua New Guinea)" -msgstr "" +msgstr "Maiwa (Papua New Guinea)" #. name for mtj msgid "Moskona" -msgstr "" +msgstr "Moskona" #. name for mtk msgid "Mbe'" -msgstr "" +msgstr "Mbe'" #. name for mtl msgid "Montol" -msgstr "" +msgstr "Montol" #. name for mtm msgid "Mator" -msgstr "" +msgstr "Mator" #. name for mtn msgid "Matagalpa" -msgstr "" +msgstr "Matagalpa" #. name for mto msgid "Mixe; Totontepec" -msgstr "" +msgstr "Mixe; Totontepec" #. name for mtp msgid "Wichí Lhamtés Nocten" -msgstr "" +msgstr "Wichí Lhamtés Nocten" #. name for mtq msgid "Muong" -msgstr "" +msgstr "Muong" #. name for mtr msgid "Mewari" -msgstr "" +msgstr "Mewari" #. name for mts msgid "Yora" -msgstr "" +msgstr "Yora" #. name for mtt msgid "Mota" -msgstr "" +msgstr "Mota" #. name for mtu msgid "Mixtec; Tututepec" -msgstr "" +msgstr "Mixtec; Tututepec" #. name for mtv msgid "Asaro'o" -msgstr "" +msgstr "Asaro'o" #. name for mtw msgid "Binukidnon; Southern" -msgstr "" +msgstr "Binukidnon; Selatan" #. name for mtx msgid "Mixtec; Tidaá" -msgstr "" +msgstr "Mixtec; Tidaá" #. name for mty msgid "Nabi" -msgstr "" +msgstr "Nabi" #. name for mua msgid "Mundang" -msgstr "" +msgstr "Mundang" #. name for mub msgid "Mubi" -msgstr "" +msgstr "Mubi" #. name for muc msgid "Mbu'" -msgstr "" +msgstr "Mbu'" #. name for mud msgid "Aleut; Mednyj" -msgstr "" +msgstr "Aleut; Mednyj" #. name for mue msgid "Media Lengua" -msgstr "" +msgstr "Media Lengua" #. name for mug msgid "Musgu" -msgstr "" +msgstr "Musgu" #. name for muh msgid "Mündü" -msgstr "" +msgstr "Mündü" #. name for mui msgid "Musi" -msgstr "" +msgstr "Musi" #. name for muj msgid "Mabire" -msgstr "" +msgstr "Mabire" #. name for muk msgid "Mugom" -msgstr "" +msgstr "Mugom" #. name for mul msgid "Multiple languages" -msgstr "" +msgstr "Bahasa Berbilang" #. name for mum msgid "Maiwala" -msgstr "" +msgstr "Maiwala" #. name for muo msgid "Nyong" -msgstr "" +msgstr "Nyong" #. name for mup msgid "Malvi" -msgstr "" +msgstr "Malvi" #. name for muq msgid "Miao; Eastern Xiangxi" -msgstr "" +msgstr "Miao; Xiangxi Timur" #. name for mur msgid "Murle" -msgstr "" +msgstr "Murle" #. name for mus msgid "Creek" -msgstr "" +msgstr "Creek" #. name for mut msgid "Muria; Western" -msgstr "" +msgstr "Muria; Barat" #. name for muu msgid "Yaaku" -msgstr "" +msgstr "Yaaku" #. name for muv msgid "Muthuvan" -msgstr "" +msgstr "Muthuvan" #. name for mux msgid "Bo-Ung" -msgstr "" +msgstr "Bo-Ung" #. name for muy msgid "Muyang" -msgstr "" +msgstr "Muyang" #. name for muz msgid "Mursi" -msgstr "" +msgstr "Mursi" #. name for mva msgid "Manam" -msgstr "" +msgstr "Manam" #. name for mvb msgid "Mattole" -msgstr "" +msgstr "Mattole" #. name for mvd msgid "Mamboru" -msgstr "" +msgstr "Mamboru" #. name for mve msgid "Marwari (Pakistan)" -msgstr "" +msgstr "Marwari (Pakistan)" #. name for mvf msgid "Mongolian; Peripheral" -msgstr "" +msgstr "Mongolia; Kecil" #. name for mvg msgid "Mixtec; Yucuañe" -msgstr "" +msgstr "Mixtec; Yucuañe" #. name for mvh msgid "Mire" -msgstr "" +msgstr "Mire" #. name for mvi msgid "Miyako" -msgstr "" +msgstr "Miyako" #. name for mvk msgid "Mekmek" -msgstr "" +msgstr "Mekmek" #. name for mvl msgid "Mbara (Australia)" -msgstr "" +msgstr "Mbara (Australia)" #. name for mvm msgid "Muya" -msgstr "" +msgstr "Muya" #. name for mvn msgid "Minaveha" -msgstr "" +msgstr "Minaveha" #. name for mvo msgid "Marovo" -msgstr "" +msgstr "Marovo" #. name for mvp msgid "Duri" -msgstr "" +msgstr "Duri" #. name for mvq msgid "Moere" -msgstr "" +msgstr "Moere" #. name for mvr msgid "Marau" -msgstr "" +msgstr "Marau" #. name for mvs msgid "Massep" -msgstr "" +msgstr "Massep" #. name for mvt msgid "Mpotovoro" -msgstr "" +msgstr "Mpotovoro" #. name for mvu msgid "Marfa" -msgstr "" +msgstr "Marfa" #. name for mvv msgid "Murut; Tagal" -msgstr "" +msgstr "Murut; Tagal" #. name for mvw msgid "Machinga" -msgstr "" +msgstr "Machinga" #. name for mvx msgid "Meoswar" -msgstr "" +msgstr "Meoswar" #. name for mvy msgid "Kohistani; Indus" -msgstr "" +msgstr "Kohistani; Indus" #. name for mvz msgid "Mesqan" -msgstr "" +msgstr "Mesqan" #. name for mwa msgid "Mwatebu" -msgstr "" +msgstr "Mwatebu" #. name for mwb msgid "Juwal" -msgstr "" +msgstr "Juwal" #. name for mwc msgid "Are" -msgstr "" +msgstr "Are" #. name for mwd msgid "Mudbura" -msgstr "" +msgstr "Mudbura" #. name for mwe msgid "Mwera (Chimwera)" -msgstr "" +msgstr "Mwera (Chimwera)" #. name for mwf msgid "Murrinh-Patha" -msgstr "" +msgstr "Murrinh-Patha" #. name for mwg msgid "Aiklep" -msgstr "" +msgstr "Aiklep" #. name for mwh msgid "Mouk-Aria" -msgstr "" +msgstr "Mouk-Aria" #. name for mwi msgid "Labo" -msgstr "" +msgstr "Labo" #. name for mwj msgid "Maligo" -msgstr "" +msgstr "Maligo" #. name for mwk msgid "Maninkakan; Kita" -msgstr "" +msgstr "Maninkakan; Kita" #. name for mwl msgid "Mirandese" -msgstr "" +msgstr "Mirandese" #. name for mwm msgid "Sar" -msgstr "" +msgstr "Sar" #. name for mwn msgid "Nyamwanga" -msgstr "" +msgstr "Nyamwanga" #. name for mwo msgid "Maewo; Central" -msgstr "" +msgstr "Maewo; Tengah" #. name for mwp msgid "Kala Lagaw Ya" -msgstr "" +msgstr "Kala Lagaw Ya" #. name for mwq msgid "Chin; Mün" -msgstr "" +msgstr "Chin; Mün" #. name for mwr msgid "Marwari" -msgstr "" +msgstr "Marwari" #. name for mws msgid "Mwimbi-Muthambi" -msgstr "" +msgstr "Mwimbi-Muthambi" #. name for mwt msgid "Moken" -msgstr "" +msgstr "Moken" #. name for mwu msgid "Mittu" -msgstr "" +msgstr "Mittu" #. name for mwv msgid "Mentawai" -msgstr "" +msgstr "Mentawai" #. name for mww msgid "Hmong Daw" -msgstr "" +msgstr "Hmong Daw" #. name for mwx msgid "Mediak" -msgstr "" +msgstr "Mediak" #. name for mwy msgid "Mosiro" -msgstr "" +msgstr "Mosiro" #. name for mwz msgid "Moingi" -msgstr "" +msgstr "Moingi" #. name for mxa msgid "Mixtec; Northwest Oaxaca" -msgstr "" +msgstr "Mixtec; Oaxaca Barat Daya" #. name for mxb msgid "Mixtec; Tezoatlán" -msgstr "" +msgstr "Mixtec; Tezoatlán" #. name for mxc msgid "Manyika" -msgstr "" +msgstr "Manyika" #. name for mxd msgid "Modang" -msgstr "" +msgstr "Modang" #. name for mxe msgid "Mele-Fila" -msgstr "" +msgstr "Mele-Fila" #. name for mxf msgid "Malgbe" -msgstr "" +msgstr "Malgbe" #. name for mxg msgid "Mbangala" -msgstr "" +msgstr "Mbangala" #. name for mxh msgid "Mvuba" -msgstr "" +msgstr "Mvuba" #. name for mxi msgid "Mozarabic" -msgstr "" +msgstr "Mozarabic" #. name for mxj msgid "Deng; Geman" -msgstr "" +msgstr "Deng; Geman" #. name for mxk msgid "Monumbo" -msgstr "" +msgstr "Monumbo" #. name for mxl msgid "Gbe; Maxi" -msgstr "" +msgstr "Gbe; Maxi" #. name for mxm msgid "Meramera" -msgstr "" +msgstr "Meramera" #. name for mxn msgid "Moi (Indonesia)" -msgstr "" +msgstr "Moi (Indonesia)" #. name for mxo msgid "Mbowe" -msgstr "" +msgstr "Mbowe" #. name for mxp msgid "Mixe; Tlahuitoltepec" -msgstr "" +msgstr "Mixe; Tlahuitoltepec" #. name for mxq msgid "Mixe; Juquila" -msgstr "" +msgstr "Mixe; Juquila" #. name for mxr msgid "Murik (Malaysia)" -msgstr "" +msgstr "Murik (Malaysia)" #. name for mxs msgid "Mixtec; Huitepec" -msgstr "" +msgstr "Mixtec; Huitepec" #. name for mxt msgid "Mixtec; Jamiltepec" -msgstr "" +msgstr "Mixtec; Jamiltepec" #. name for mxu msgid "Mada (Cameroon)" -msgstr "" +msgstr "Mada (Cameroon)" #. name for mxv msgid "Mixtec; Metlatónoc" -msgstr "" +msgstr "Mixtec; Metlatónoc" #. name for mxw msgid "Namo" -msgstr "" +msgstr "Namo" #. name for mxx msgid "Mahou" -msgstr "" +msgstr "Mahou" #. name for mxy msgid "Mixtec; Southeastern Nochixtlán" -msgstr "" +msgstr "Mixtec; Nochixtlán Tenggara" #. name for mxz msgid "Masela; Central" -msgstr "" +msgstr "Masela; Tengah" #. name for mya msgid "Burmese" -msgstr "" +msgstr "Burma" #. name for myb msgid "Mbay" -msgstr "" +msgstr "Mbay" #. name for myc msgid "Mayeka" -msgstr "" +msgstr "Mayeka" #. name for myd msgid "Maramba" -msgstr "" +msgstr "Maramba" #. name for mye msgid "Myene" -msgstr "" +msgstr "Myene" #. name for myf msgid "Bambassi" -msgstr "" +msgstr "Bambassi" #. name for myg msgid "Manta" -msgstr "" +msgstr "Manta" #. name for myh msgid "Makah" -msgstr "" +msgstr "Makah" #. name for myi msgid "Mina (India)" -msgstr "" +msgstr "Mina (India)" #. name for myj msgid "Mangayat" -msgstr "" +msgstr "Mangayat" #. name for myk msgid "Senoufo; Mamara" -msgstr "" +msgstr "Senoufo; Mamara" #. name for myl msgid "Moma" -msgstr "" +msgstr "Moma" #. name for mym msgid "Me'en" -msgstr "" +msgstr "Me'en" #. name for myo msgid "Anfillo" -msgstr "" +msgstr "Anfillo" #. name for myp msgid "Pirahã" -msgstr "" +msgstr "Pirahã" #. name for myq msgid "Maninka; Forest" -msgstr "" +msgstr "Maninka; Hutan" #. name for myr msgid "Muniche" -msgstr "" +msgstr "Muniche" #. name for mys msgid "Mesmes" -msgstr "" +msgstr "Mesmes" #. name for myu msgid "Mundurukú" -msgstr "" +msgstr "Mundurukú" #. name for myv msgid "Erzya" -msgstr "" +msgstr "Erzya" #. name for myw msgid "Muyuw" -msgstr "" +msgstr "Muyuw" #. name for myx msgid "Masaaba" -msgstr "" +msgstr "Masaaba" #. name for myy msgid "Macuna" -msgstr "" +msgstr "Macuna" #. name for myz msgid "Mandaic; Classical" -msgstr "" +msgstr "Mandaic; Klasik" #. name for mza msgid "Mixtec; Santa María Zacatepec" -msgstr "" +msgstr "Mixtec; Santa María Zacatepec" #. name for mzb msgid "Tumzabt" -msgstr "" +msgstr "Tumzabt" #. name for mzc msgid "Madagascar Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Madagascar" #. name for mzd msgid "Malimba" -msgstr "" +msgstr "Malimba" #. name for mze msgid "Morawa" -msgstr "" +msgstr "Morawa" #. name for mzg msgid "Monastic Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Monastik" #. name for mzh msgid "Wichí Lhamtés Güisnay" -msgstr "" +msgstr "Wichí Lhamtés Güisnay" #. name for mzi msgid "Mazatec; Ixcatlán" -msgstr "" +msgstr "Mazatec; Ixcatlán" #. name for mzj msgid "Manya" -msgstr "" +msgstr "Manya" #. name for mzk msgid "Mambila; Nigeria" -msgstr "" +msgstr "Mambila; Nigeria" #. name for mzl msgid "Mixe; Mazatlán" -msgstr "" +msgstr "Mixe; Mazatlán" #. name for mzm msgid "Mumuye" -msgstr "" +msgstr "Mumuye" #. name for mzn msgid "Mazanderani" -msgstr "" +msgstr "Mazanderani" #. name for mzo msgid "Matipuhy" -msgstr "" +msgstr "Matipuhy" #. name for mzp msgid "Movima" -msgstr "" +msgstr "Movima" #. name for mzq msgid "Mori Atas" -msgstr "" +msgstr "Mori Atas" #. name for mzr msgid "Marúbo" -msgstr "" +msgstr "Marúbo" #. name for mzs msgid "Macanese" -msgstr "" +msgstr "Macanese" #. name for mzt msgid "Mintil" -msgstr "" +msgstr "Mintil" #. name for mzu msgid "Inapang" -msgstr "" +msgstr "Inapang" #. name for mzv msgid "Manza" -msgstr "" +msgstr "Manza" #. name for mzw msgid "Deg" -msgstr "" +msgstr "Deg" #. name for mzx msgid "Mawayana" -msgstr "" +msgstr "Mawayana" #. name for mzy msgid "Mozambican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mozambic" #. name for mzz msgid "Maiadomu" -msgstr "" +msgstr "Maiadomu" #. name for naa msgid "Namla" -msgstr "" +msgstr "Namla" #. name for nab msgid "Nambikuára; Southern" -msgstr "" +msgstr "Nambikuára; Selatan" #. name for nac msgid "Narak" -msgstr "" +msgstr "Narak" #. name for nad msgid "Nijadali" -msgstr "" +msgstr "Nijadali" #. name for nae msgid "Naka'ela" -msgstr "" +msgstr "Naka'ela" #. name for naf msgid "Nabak" -msgstr "" +msgstr "Nabak" #. name for nag msgid "Naga Pidgin" -msgstr "" +msgstr "Naga Pidgin" #. name for naj msgid "Nalu" -msgstr "" +msgstr "Nalu" #. name for nak msgid "Nakanai" -msgstr "" +msgstr "Nakanai" #. name for nal msgid "Nalik" -msgstr "" +msgstr "Nalik" #. name for nam msgid "Nangikurrunggurr" -msgstr "" +msgstr "Nangikurrunggurr" #. name for nan msgid "Chinese; Min Nan" -msgstr "" +msgstr "Cina; Min Nan" #. name for nao msgid "Naaba" -msgstr "" +msgstr "Naaba" #. name for nap msgid "Neapolitan" -msgstr "" +msgstr "Neapolitan" #. name for naq msgid "Nama (Namibia)" -msgstr "" +msgstr "Nama (Namibia)" #. name for nar msgid "Iguta" -msgstr "" +msgstr "Iguta" #. name for nas msgid "Naasioi" -msgstr "" +msgstr "Naasioi" #. name for nat msgid "Hungworo" -msgstr "" +msgstr "Hungworo" #. name for nau msgid "Nauru" -msgstr "" +msgstr "Nauru" #. name for nav msgid "Navajo" -msgstr "" +msgstr "Navajo" #. name for naw msgid "Nawuri" -msgstr "" +msgstr "Nawuri" #. name for nax msgid "Nakwi" -msgstr "" +msgstr "Nakwi" #. name for nay msgid "Narrinyeri" -msgstr "" +msgstr "Narrinyeri" #. name for naz msgid "Nahuatl; Coatepec" -msgstr "" +msgstr "Nahuatl; Coatepec" #. name for nba msgid "Nyemba" -msgstr "" +msgstr "Nyemba" #. name for nbb msgid "Ndoe" -msgstr "" +msgstr "Ndoe" #. name for nbc msgid "Naga; Chang" -msgstr "" +msgstr "Naga; Chang" #. name for nbd msgid "Ngbinda" -msgstr "" +msgstr "Ngbinda" #. name for nbe msgid "Naga; Konyak" -msgstr "" +msgstr "Naga; Konyak" #. name for nbg msgid "Nagarchal" -msgstr "" +msgstr "Nagarchal" #. name for nbh msgid "Ngamo" -msgstr "" +msgstr "Ngamo" #. name for nbi msgid "Naga; Mao" -msgstr "" +msgstr "Naga; Mao" #. name for nbj msgid "Ngarinman" -msgstr "" +msgstr "Ngarinman" #. name for nbk msgid "Nake" -msgstr "" +msgstr "Nake" #. name for nbl msgid "Ndebele; South" -msgstr "" +msgstr "Ndebele; Selatan" #. name for nbm msgid "Ngbaka Ma'bo" -msgstr "" +msgstr "Ngbaka Ma'bo" #. name for nbn msgid "Kuri" -msgstr "" +msgstr "Kuri" #. name for nbo msgid "Nkukoli" -msgstr "" +msgstr "Nkukoli" #. name for nbp msgid "Nnam" -msgstr "" +msgstr "Nnam" #. name for nbq msgid "Nggem" -msgstr "" +msgstr "Nggem" #. name for nbr msgid "Numana-Nunku-Gbantu-Numbu" -msgstr "" +msgstr "Numana-Nunku-Gbantu-Numbu" #. name for nbs msgid "Namibian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Namibia" #. name for nbt msgid "Na" -msgstr "" +msgstr "Na" #. name for nbu msgid "Naga; Rongmei" -msgstr "" +msgstr "Naga; Rongmei" #. name for nbv msgid "Ngamambo" -msgstr "" +msgstr "Ngamambo" #. name for nbw msgid "Ngbandi; Southern" -msgstr "" +msgstr "Ngbandi; Selatan" #. name for nbx msgid "Ngura" -msgstr "" +msgstr "Ngura" #. name for nby msgid "Ningera" -msgstr "" +msgstr "Ningera" #. name for nca msgid "Iyo" -msgstr "" +msgstr "Iyo" #. name for ncb msgid "Nicobarese; Central" -msgstr "" +msgstr "Nicobar; Tengah" #. name for ncc msgid "Ponam" -msgstr "" +msgstr "Ponam" #. name for ncd msgid "Nachering" -msgstr "" +msgstr "Nachering" #. name for nce msgid "Yale" -msgstr "" +msgstr "Yale" #. name for ncf msgid "Notsi" -msgstr "" +msgstr "Notsi" #. name for ncg msgid "Nisga'a" -msgstr "" +msgstr "Nisga'a" #. name for nch msgid "Nahuatl; Central Huasteca" -msgstr "" +msgstr "Nahuatl; Huasteca Tengah" #. name for nci msgid "Nahuatl; Classical" -msgstr "" +msgstr "Nahuatl; Klasik" #. name for ncj msgid "Nahuatl; Northern Puebla" -msgstr "" +msgstr "Nahuatl; Puebla Utara" #. name for nck msgid "Nakara" -msgstr "" +msgstr "Nakara" #. name for ncl msgid "Nahuatl; Michoacán" -msgstr "" +msgstr "Nahuatl; Michoacán" #. name for ncm msgid "Nambo" -msgstr "" +msgstr "Nambo" #. name for ncn msgid "Nauna" -msgstr "" +msgstr "Nauna" #. name for nco msgid "Sibe" -msgstr "" +msgstr "Sibe" #. name for ncp msgid "Ndaktup" -msgstr "" +msgstr "Ndaktup" #. name for ncr msgid "Ncane" -msgstr "" +msgstr "Ncane" #. name for ncs msgid "Nicaraguan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Nicaragua" #. name for nct msgid "Naga; Chothe" -msgstr "" +msgstr "Naga; Chothe" #. name for ncu msgid "Chumburung" -msgstr "" +msgstr "Chumburung" #. name for ncx msgid "Nahuatl; Central Puebla" -msgstr "" +msgstr "Nahuatl; Puebla Tengah" #. name for ncz msgid "Natchez" -msgstr "" +msgstr "Natchez" #. name for nda msgid "Ndasa" -msgstr "" +msgstr "Ndasa" #. name for ndb msgid "Kenswei Nsei" -msgstr "" +msgstr "Kenswei Nsei" #. name for ndc msgid "Ndau" -msgstr "" +msgstr "Ndau" #. name for ndd msgid "Nde-Nsele-Nta" -msgstr "" +msgstr "Nde-Nsele-Nta" #. name for nde msgid "Ndebele; North" -msgstr "" +msgstr "Ndebele; Utara" #. name for ndf msgid "Nadruvian" -msgstr "" +msgstr "Nadruvia" #. name for ndg msgid "Ndengereko" -msgstr "" +msgstr "Ndengereko" #. name for ndh msgid "Ndali" -msgstr "" +msgstr "Ndali" #. name for ndi msgid "Samba Leko" -msgstr "" +msgstr "Samba Leko" #. name for ndj msgid "Ndamba" -msgstr "" +msgstr "Ndamba" #. name for ndk msgid "Ndaka" -msgstr "" +msgstr "Ndaka" #. name for ndl msgid "Ndolo" -msgstr "" +msgstr "Ndolo" #. name for ndm msgid "Ndam" -msgstr "" +msgstr "Ndam" #. name for ndn msgid "Ngundi" -msgstr "" +msgstr "Ngundi" #. name for ndo msgid "Ndonga" -msgstr "" +msgstr "Ndonga" #. name for ndp msgid "Ndo" -msgstr "" +msgstr "Ndo" #. name for ndq msgid "Ndombe" -msgstr "" +msgstr "Ndombe" #. name for ndr msgid "Ndoola" -msgstr "" +msgstr "Ndoola" #. name for nds msgid "German; Low" -msgstr "" +msgstr "Jerman; Rendah" #. name for ndt msgid "Ndunga" -msgstr "" +msgstr "Ndunga" #. name for ndu msgid "Dugun" -msgstr "" +msgstr "Dugun" #. name for ndv msgid "Ndut" -msgstr "" +msgstr "Ndut" #. name for ndw msgid "Ndobo" -msgstr "" +msgstr "Ndobo" #. name for ndx msgid "Nduga" -msgstr "" +msgstr "Nduga" #. name for ndy msgid "Lutos" -msgstr "" +msgstr "Lutos" #. name for ndz msgid "Ndogo" -msgstr "" +msgstr "Ndogo" #. name for nea msgid "Ngad'a; Eastern" -msgstr "" +msgstr "Ngad'a; Timur" #. name for neb msgid "Toura (Côte d'Ivoire)" -msgstr "" +msgstr "Toura (Côte d'Ivoire)" #. name for nec msgid "Nedebang" -msgstr "" +msgstr "Nedebang" #. name for ned msgid "Nde-Gbite" -msgstr "" +msgstr "Nde-Gbite" #. name for nee msgid "Nêlêmwa-Nixumwak" -msgstr "" +msgstr "Nêlêmwa-Nixumwak" #. name for nef msgid "Nefamese" -msgstr "" +msgstr "Nefamese" #. name for neg msgid "Negidal" -msgstr "" +msgstr "Negidal" #. name for neh msgid "Nyenkha" -msgstr "" +msgstr "Nyenkha" #. name for nei msgid "Hittite; Neo-" -msgstr "" +msgstr "Hittite; Neo-" #. name for nej msgid "Neko" -msgstr "" +msgstr "Neko" #. name for nek msgid "Neku" -msgstr "" +msgstr "Neku" #. name for nem msgid "Nemi" -msgstr "" +msgstr "Nemi" #. name for nen msgid "Nengone" -msgstr "" +msgstr "Nengone" #. name for neo msgid "Ná-Meo" -msgstr "" +msgstr "Ná-Meo" #. name for nep msgid "Nepali" -msgstr "" +msgstr "Nepali" #. name for neq msgid "Mixe; North Central" -msgstr "" +msgstr "Mixe; Tengah Utara" #. name for ner msgid "Yahadian" -msgstr "" +msgstr "Yahadi" #. name for nes msgid "Kinnauri; Bhoti" -msgstr "" +msgstr "Kinnauri; Bhoti" #. name for net msgid "Nete" -msgstr "" +msgstr "Nete" #. name for nev msgid "Nyaheun" -msgstr "" +msgstr "Nyaheun" #. name for new msgid "Bhasa; Nepal" -msgstr "" +msgstr "Bhasa; Nepal" #. name for nex msgid "Neme" -msgstr "" +msgstr "Neme" #. name for ney msgid "Neyo" -msgstr "" +msgstr "Neyo" #. name for nez msgid "Nez Perce" -msgstr "" +msgstr "Nez Perce" #. name for nfa msgid "Dhao" -msgstr "" +msgstr "Dhao" #. name for nfd msgid "Ahwai" -msgstr "" +msgstr "Ahwai" #. name for nfl msgid "Ayiwo" -msgstr "" +msgstr "Ayiwo" #. name for nfr msgid "Nafaanra" -msgstr "" +msgstr "Nafaanra" #. name for nfu msgid "Mfumte" -msgstr "" +msgstr "Mfumte" #. name for nga msgid "Ngbaka" -msgstr "" +msgstr "Ngbaka" #. name for ngb msgid "Ngbandi; Northern" -msgstr "" +msgstr "Ngbandi; Utara" #. name for ngc msgid "Ngombe (Democratic Republic of Congo)" -msgstr "" +msgstr "Ngombe (Republik Democratik Congo)" #. name for ngd msgid "Ngando (Central African Republic)" -msgstr "" +msgstr "Ngando (Republik Afrika Tengah)" #. name for nge msgid "Ngemba" -msgstr "" +msgstr "Ngemba" #. name for ngg msgid "Ngbaka Manza" -msgstr "" +msgstr "Ngbaka Manza" #. name for ngh msgid "N/u" -msgstr "" +msgstr "N/u" #. name for ngi msgid "Ngizim" -msgstr "" +msgstr "Ngizim" #. name for ngj msgid "Ngie" -msgstr "" +msgstr "Ngie" #. name for ngk msgid "Ngalkbun" -msgstr "" +msgstr "Ngalkbun" #. name for ngl msgid "Lomwe" -msgstr "" +msgstr "Lomwe" #. name for ngm msgid "Ngatik Men's Creole" -msgstr "" +msgstr "Ngatik Men's Creole" #. name for ngn msgid "Ngwo" -msgstr "" +msgstr "Ngwo" #. name for ngo msgid "Ngoni" -msgstr "" +msgstr "Ngoni" #. name for ngp msgid "Ngulu" -msgstr "" +msgstr "Ngulu" #. name for ngq msgid "Ngurimi" -msgstr "" +msgstr "Ngurimi" #. name for ngr msgid "Nanggu" -msgstr "" +msgstr "Nanggu" #. name for ngs msgid "Gvoko" -msgstr "" +msgstr "Gvoko" #. name for ngt msgid "Ngeq" -msgstr "" +msgstr "Ngeq" #. name for ngu msgid "Nahuatl; Guerrero" -msgstr "" +msgstr "Nahuatl; Guerrero" #. name for ngv msgid "Nagumi" -msgstr "" +msgstr "Nagumi" #. name for ngw msgid "Ngwaba" -msgstr "" +msgstr "Ngwaba" #. name for ngx msgid "Nggwahyi" -msgstr "" +msgstr "Nggwahyi" #. name for ngy msgid "Tibea" -msgstr "" +msgstr "Tibea" #. name for ngz msgid "Ngungwel" -msgstr "" +msgstr "Ngungwel" #. name for nha msgid "Nhanda" -msgstr "" +msgstr "Nhanda" #. name for nhb msgid "Beng" -msgstr "" +msgstr "Beng" #. name for nhc msgid "Nahuatl; Tabasco" -msgstr "" +msgstr "Nahuatl; Tabasco" #. name for nhd msgid "Guaraní; Ava" -msgstr "" +msgstr "Guaraní; Ava" #. name for nhe msgid "Nahuatl; Eastern Huasteca" -msgstr "" +msgstr "Nahuatl; Huasteca Timur" #. name for nhf msgid "Nhuwala" -msgstr "" +msgstr "Nhuwala" #. name for nhg msgid "Nahuatl; Tetelcingo" -msgstr "" +msgstr "Nahuatl; Tetelcingo" #. name for nhh msgid "Nahari" -msgstr "" +msgstr "Nahari" #. name for nhi msgid "Nahuatl; Zacatlán-Ahuacatlán-Tepetzintla" -msgstr "" +msgstr "Nahuatl; Zacatlán-Ahuacatlán-Tepetzintla" #. name for nhk msgid "Nahuatl; Isthmus-Cosoleacaque" -msgstr "" +msgstr "Nahuatl; Isthmus-Cosoleacaque" #. name for nhm msgid "Nahuatl; Morelos" -msgstr "" +msgstr "Nahuatl; Morelos" #. name for nhn msgid "Nahuatl; Central" -msgstr "" +msgstr "Nahuatl; Tengah" #. name for nho msgid "Takuu" -msgstr "" +msgstr "Takuu" #. name for nhp msgid "Nahuatl; Isthmus-Pajapan" -msgstr "" +msgstr "Nahuatl; Isthmus-Pajapan" #. name for nhq msgid "Nahuatl; Huaxcaleca" -msgstr "" +msgstr "Nahuatl; Huaxcaleca" #. name for nhr msgid "Naro" -msgstr "" +msgstr "Naro" #. name for nht msgid "Nahuatl; Ometepec" -msgstr "" +msgstr "Nahuatl; Ometepec" #. name for nhu msgid "Noone" -msgstr "" +msgstr "Noone" #. name for nhv msgid "Nahuatl; Temascaltepec" -msgstr "" +msgstr "Nahuatl; Temascaltepec" #. name for nhw msgid "Nahuatl; Western Huasteca" -msgstr "" +msgstr "Nahuatl; Huasteca Barat" #. name for nhx msgid "Nahuatl; Isthmus-Mecayapan" -msgstr "" +msgstr "Nahuatl; Isthmus-Mecayapan" #. name for nhy msgid "Nahuatl; Northern Oaxaca" -msgstr "" +msgstr "Nahuatl; Oaxaca Utara" #. name for nhz msgid "Nahuatl; Santa María La Alta" -msgstr "" +msgstr "Nahuatl; Santa María La Alta" #. name for nia msgid "Nias" -msgstr "" +msgstr "Nias" #. name for nib msgid "Nakame" -msgstr "" +msgstr "Nakame" #. name for nid msgid "Ngandi" -msgstr "" +msgstr "Ngandi" #. name for nie msgid "Niellim" -msgstr "" +msgstr "Niellim" #. name for nif msgid "Nek" -msgstr "" +msgstr "Nek" #. name for nig msgid "Ngalakan" -msgstr "" +msgstr "Ngalakan" #. name for nih msgid "Nyiha (Tanzania)" -msgstr "" +msgstr "Nyiha (Tanzania)" #. name for nii msgid "Nii" -msgstr "" +msgstr "Nii" #. name for nij msgid "Ngaju" -msgstr "" +msgstr "Ngaju" #. name for nik msgid "Nicobarese; Southern" -msgstr "" +msgstr "Nicobar; Selatan" #. name for nil msgid "Nila" -msgstr "" +msgstr "Nila" #. name for nim msgid "Nilamba" -msgstr "" +msgstr "Nilamba" #. name for nin msgid "Ninzo" -msgstr "" +msgstr "Ninzo" #. name for nio msgid "Nganasan" -msgstr "" +msgstr "Nganasan" #. name for niq msgid "Nandi" -msgstr "" +msgstr "Nandi" #. name for nir msgid "Nimboran" -msgstr "" +msgstr "Nimboran" #. name for nis msgid "Nimi" -msgstr "" +msgstr "Nimi" #. name for nit msgid "Kolami; Southeastern" -msgstr "" +msgstr "Kolami; Tenggara" #. name for niu msgid "Niuean" -msgstr "" +msgstr "Niuean" #. name for niv msgid "Gilyak" -msgstr "" +msgstr "Gilyak" #. name for niw msgid "Nimo" -msgstr "" +msgstr "Nimo" #. name for nix msgid "Hema" -msgstr "" +msgstr "Hema" #. name for niy msgid "Ngiti" -msgstr "" +msgstr "Ngiti" #. name for niz msgid "Ningil" -msgstr "" +msgstr "Ningil" #. name for nja msgid "Nzanyi" -msgstr "" +msgstr "Nzanyi" #. name for njb msgid "Naga; Nocte" -msgstr "" +msgstr "Naga; Nocte" #. name for njd msgid "Ndonde Hamba" -msgstr "" +msgstr "Ndonde Hamba" #. name for njh msgid "Naga; Lotha" -msgstr "" +msgstr "Naga; Lotha" #. name for nji msgid "Gudanji" -msgstr "" +msgstr "Gudanji" #. name for njj msgid "Njen" -msgstr "" +msgstr "Njen" #. name for njl msgid "Njalgulgule" -msgstr "" +msgstr "Njalgulgule" #. name for njm msgid "Naga; Angami" -msgstr "" +msgstr "Naga; Angami" #. name for njn msgid "Naga; Liangmai" -msgstr "" +msgstr "Naga; Liangmai" #. name for njo msgid "Naga; Ao" -msgstr "" +msgstr "Naga; Ao" #. name for njr msgid "Njerep" -msgstr "" +msgstr "Njerep" #. name for njs msgid "Nisa" -msgstr "" +msgstr "Nisa" #. name for njt msgid "Ndyuka-Trio Pidgin" -msgstr "" +msgstr "Ndyuka-Trio Pidgin" #. name for nju msgid "Ngadjunmaya" -msgstr "" +msgstr "Ngadjunmaya" #. name for njx msgid "Kunyi" -msgstr "" +msgstr "Kunyi" #. name for njy msgid "Njyem" -msgstr "" +msgstr "Njyem" #. name for nka msgid "Nkoya" -msgstr "" +msgstr "Nkoya" #. name for nkb msgid "Naga; Khoibu" -msgstr "" +msgstr "Naga; Khoibu" #. name for nkc msgid "Nkongho" -msgstr "" +msgstr "Nkongho" #. name for nkd msgid "Koireng" -msgstr "" +msgstr "Koireng" #. name for nke msgid "Duke" -msgstr "" +msgstr "Duke" #. name for nkf msgid "Naga; Inpui" -msgstr "" +msgstr "Naga; Inpui" #. name for nkg msgid "Nekgini" -msgstr "" +msgstr "Nekgini" #. name for nkh msgid "Naga; Khezha" -msgstr "" +msgstr "Naga; Khezha" #. name for nki msgid "Naga; Thangal" -msgstr "" +msgstr "Naga; Thangal" #. name for nkj msgid "Nakai" -msgstr "" +msgstr "Nakai" #. name for nkk msgid "Nokuku" -msgstr "" +msgstr "Nokuku" #. name for nkm msgid "Namat" -msgstr "" +msgstr "Namat" #. name for nkn msgid "Nkangala" -msgstr "" +msgstr "Nkangala" #. name for nko msgid "Nkonya" -msgstr "" +msgstr "Nkonya" #. name for nkp msgid "Niuatoputapu" -msgstr "" +msgstr "Niuatoputapu" #. name for nkq msgid "Nkami" -msgstr "" +msgstr "Nkami" #. name for nkr msgid "Nukuoro" -msgstr "" +msgstr "Nukuoro" #. name for nks msgid "Asmat; North" -msgstr "" +msgstr "Asmat; Utara" #. name for nkt msgid "Nyika (Tanzania)" -msgstr "" +msgstr "Nyika (Tanzania)" #. name for nku msgid "Kulango; Bouna" -msgstr "" +msgstr "Kulango; Bouna" #. name for nkv msgid "Nyika (Malawi and Zambia)" -msgstr "" +msgstr "Nyika (Malawi dan Zambia)" #. name for nkw msgid "Nkutu" -msgstr "" +msgstr "Nkutu" #. name for nkx msgid "Nkoroo" -msgstr "" +msgstr "Nkoroo" #. name for nkz msgid "Nkari" -msgstr "" +msgstr "Nkari" #. name for nla msgid "Ngombale" -msgstr "" +msgstr "Ngombale" #. name for nlc msgid "Nalca" -msgstr "" +msgstr "Nalca" #. name for nld msgid "Dutch" @@ -18566,327 +18566,327 @@ msgstr "Dutch" #. name for nle msgid "Nyala; East" -msgstr "" +msgstr "Nyala; Timur" #. name for nlg msgid "Gela" -msgstr "" +msgstr "Gela" #. name for nli msgid "Grangali" -msgstr "" +msgstr "Grangali" #. name for nlj msgid "Nyali" -msgstr "" +msgstr "Nyali" #. name for nlk msgid "Yali; Ninia" -msgstr "" +msgstr "Yali; Ninia" #. name for nll msgid "Nihali" -msgstr "" +msgstr "Nihali" #. name for nln msgid "Nahuatl; Durango" -msgstr "" +msgstr "Nahuatl; Durango" #. name for nlo msgid "Ngul" -msgstr "" +msgstr "Ngul" #. name for nlr msgid "Ngarla" -msgstr "" +msgstr "Ngarla" #. name for nlu msgid "Nchumbulu" -msgstr "" +msgstr "Nchumbulu" #. name for nlv msgid "Nahuatl; Orizaba" -msgstr "" +msgstr "Nahuatl; Orizaba" #. name for nlx msgid "Nahali" -msgstr "" +msgstr "Nahali" #. name for nly msgid "Nyamal" -msgstr "" +msgstr "Nyamal" #. name for nlz msgid "Nalögo" -msgstr "" +msgstr "Nalögo" #. name for nma msgid "Naga; Maram" -msgstr "" +msgstr "Naga; Maram" #. name for nmb msgid "Nambas; Big" -msgstr "" +msgstr "Nambas; Big" #. name for nmc msgid "Ngam" -msgstr "" +msgstr "Ngam" #. name for nmd msgid "Ndumu" -msgstr "" +msgstr "Ndumu" #. name for nme msgid "Naga; Mzieme" -msgstr "" +msgstr "Naga; Mzieme" #. name for nmf msgid "Naga; Tangkhul" -msgstr "" +msgstr "Naga; Tangkhul" #. name for nmg msgid "Kwasio" -msgstr "" +msgstr "Kwasio" #. name for nmh msgid "Naga; Monsang" -msgstr "" +msgstr "Naga; Monsang" #. name for nmi msgid "Nyam" -msgstr "" +msgstr "Nyam" #. name for nmj msgid "Ngombe (Central African Republic)" -msgstr "" +msgstr "Ngombe (Republik Afrika Tengah)" #. name for nmk msgid "Namakura" -msgstr "" +msgstr "Namakura" #. name for nml msgid "Ndemli" -msgstr "" +msgstr "Ndemli" #. name for nmm msgid "Manangba" -msgstr "" +msgstr "Manangba" #. name for nmn msgid "!Xóõ" -msgstr "" +msgstr "!Xóõ" #. name for nmo msgid "Naga; Moyon" -msgstr "" +msgstr "Naga; Moyon" #. name for nmp msgid "Nimanbur" -msgstr "" +msgstr "Nimanbur" #. name for nmq msgid "Nambya" -msgstr "" +msgstr "Nambya" #. name for nmr msgid "Nimbari" -msgstr "" +msgstr "Nimbari" #. name for nms msgid "Letemboi" -msgstr "" +msgstr "Letemboi" #. name for nmt msgid "Namonuito" -msgstr "" +msgstr "Namonuito" #. name for nmu msgid "Maidu; Northeast" -msgstr "" +msgstr "Maidu; Timur Laut" #. name for nmv msgid "Ngamini" -msgstr "" +msgstr "Ngamini" #. name for nmw msgid "Nimoa" -msgstr "" +msgstr "Nimoa" #. name for nmx msgid "Nama (Papua New Guinea)" -msgstr "" +msgstr "Nama (Papua New Guinea)" #. name for nmy msgid "Namuyi" -msgstr "" +msgstr "Namuyi" #. name for nmz msgid "Nawdm" -msgstr "" +msgstr "Nawdm" #. name for nna msgid "Nyangumarta" -msgstr "" +msgstr "Nyangumarta" #. name for nnb msgid "Nande" -msgstr "" +msgstr "Nande" #. name for nnc msgid "Nancere" -msgstr "" +msgstr "Nancere" #. name for nnd msgid "Ambae; West" -msgstr "" +msgstr "Ambae; Barat" #. name for nne msgid "Ngandyera" -msgstr "" +msgstr "Ngandyera" #. name for nnf msgid "Ngaing" -msgstr "" +msgstr "Ngaing" #. name for nng msgid "Naga; Maring" -msgstr "" +msgstr "Naga; Maring" #. name for nnh msgid "Ngiemboon" -msgstr "" +msgstr "Ngiemboon" #. name for nni msgid "Nuaulu; North" -msgstr "" +msgstr "Nuaulu; Utara" #. name for nnj msgid "Nyangatom" -msgstr "" +msgstr "Nyangatom" #. name for nnk msgid "Nankina" -msgstr "" +msgstr "Nankina" #. name for nnl msgid "Naga; Northern Rengma" -msgstr "" +msgstr "Naga; Rengma Utara" #. name for nnm msgid "Namia" -msgstr "" +msgstr "Namia" #. name for nnn msgid "Ngete" -msgstr "" +msgstr "Ngete" #. name for nno msgid "Norwegian Nynorsk" -msgstr "" +msgstr "Norway Nynorsk" #. name for nnp msgid "Naga; Wancho" -msgstr "" +msgstr "Naga; Wancho" #. name for nnq msgid "Ngindo" -msgstr "" +msgstr "Ngindo" #. name for nnr msgid "Narungga" -msgstr "" +msgstr "Narungga" #. name for nns msgid "Ningye" -msgstr "" +msgstr "Ningye" #. name for nnt msgid "Nanticoke" -msgstr "" +msgstr "Nanticoke" #. name for nnu msgid "Dwang" -msgstr "" +msgstr "Dwang" #. name for nnv msgid "Nugunu (Australia)" -msgstr "" +msgstr "Nugunu (Australia)" #. name for nnw msgid "Nuni; Southern" -msgstr "" +msgstr "Nuni; Selatan" #. name for nnx msgid "Ngong" -msgstr "" +msgstr "Ngong" #. name for nny msgid "Nyangga" -msgstr "" +msgstr "Nyangga" #. name for nnz msgid "Nda'nda'" -msgstr "" +msgstr "Nda'nda'" #. name for noa msgid "Woun Meu" -msgstr "" +msgstr "Woun Meu" #. name for nob msgid "Norwegian Bokmål" -msgstr "" +msgstr "Norway Bokmål" #. name for noc msgid "Nuk" -msgstr "" +msgstr "Nuk" #. name for nod msgid "Thai; Northern" -msgstr "" +msgstr "Siam; Utara" #. name for noe msgid "Nimadi" -msgstr "" +msgstr "Nimadi" #. name for nof msgid "Nomane" -msgstr "" +msgstr "Nomane" #. name for nog msgid "Nogai" -msgstr "" +msgstr "Nogai" #. name for noh msgid "Nomu" -msgstr "" +msgstr "Nomu" #. name for noi msgid "Noiri" -msgstr "" +msgstr "Noiri" #. name for noj msgid "Nonuya" -msgstr "" +msgstr "Nonuya" #. name for nok msgid "Nooksack" -msgstr "" +msgstr "Nooksack" #. name for nom msgid "Nocamán" -msgstr "" +msgstr "Nocamán" #. name for non msgid "Norse; Old" -msgstr "" +msgstr "Norse; Tua" #. name for nop msgid "Numanggang" -msgstr "" +msgstr "Numanggang" #. name for noq msgid "Ngongo" -msgstr "" +msgstr "Ngongo" #. name for nor msgid "Norwegian" @@ -18894,2175 +18894,2175 @@ msgstr "Norwegian" #. name for nos msgid "Nisu; Eastern" -msgstr "" +msgstr "Nisu; Timur" #. name for not msgid "Nomatsiguenga" -msgstr "" +msgstr "Nomatsiguenga" #. name for nou msgid "Ewage-Notu" -msgstr "" +msgstr "Ewage-Notu" #. name for nov msgid "Novial" -msgstr "" +msgstr "Novial" #. name for now msgid "Nyambo" -msgstr "" +msgstr "Nyambo" #. name for noy msgid "Noy" -msgstr "" +msgstr "Noy" #. name for noz msgid "Nayi" -msgstr "" +msgstr "Nayi" #. name for npa msgid "Nar Phu" -msgstr "" +msgstr "Nar Phu" #. name for npb msgid "Nupbikha" -msgstr "" +msgstr "Nupbikha" #. name for nph msgid "Naga; Phom" -msgstr "" +msgstr "Naga; Phom" #. name for npl msgid "Nahuatl; Southeastern Puebla" -msgstr "" +msgstr "Nahuatl; Puebla Tenggara" #. name for npn msgid "Mondropolon" -msgstr "" +msgstr "Mondropolon" #. name for npo msgid "Naga; Pochuri" -msgstr "" +msgstr "Naga; Pochuri" #. name for nps msgid "Nipsan" -msgstr "" +msgstr "Nipsan" #. name for npu msgid "Naga; Puimei" -msgstr "" +msgstr "Naga; Puimei" #. name for npy msgid "Napu" -msgstr "" +msgstr "Napu" #. name for nqg msgid "Nago; Southern" -msgstr "" +msgstr "Nago; Selatan" #. name for nqk msgid "Ede Nago; Kura" -msgstr "" +msgstr "Ede Nago; Kura" #. name for nqm msgid "Ndom" -msgstr "" +msgstr "Ndom" #. name for nqn msgid "Nen" -msgstr "" +msgstr "Nen" #. name for nqo msgid "N'Ko" -msgstr "" +msgstr "N'Ko" #. name for nra msgid "Ngom" -msgstr "" +msgstr "Ngom" #. name for nrb msgid "Nara" -msgstr "" +msgstr "Nara" #. name for nrc msgid "Noric" -msgstr "" +msgstr "Noric" #. name for nre msgid "Naga; Southern Rengma" -msgstr "" +msgstr "Naga; Rengma Selatan" #. name for nrg msgid "Narango" -msgstr "" +msgstr "Narango" #. name for nri msgid "Naga; Chokri" -msgstr "" +msgstr "Naga; Chokri" #. name for nrl msgid "Ngarluma" -msgstr "" +msgstr "Ngarluma" #. name for nrm msgid "Narom" -msgstr "" +msgstr "Narom" #. name for nrn msgid "Norn" -msgstr "" +msgstr "Norn" #. name for nrp msgid "Picene; North" -msgstr "" +msgstr "Picene; Utara" #. name for nrr msgid "Norra" -msgstr "" +msgstr "Norra" #. name for nrt msgid "Kalapuya; Northern" -msgstr "" +msgstr "Kalapuya; Utara" #. name for nru msgid "Narua" -msgstr "" +msgstr "Narua" #. name for nrx msgid "Ngurmbur" -msgstr "" +msgstr "Ngurmbur" #. name for nrz msgid "Lala" -msgstr "" +msgstr "Lala" #. name for nsa msgid "Naga; Sangtam" -msgstr "" +msgstr "Naga; Sangtam" #. name for nsc msgid "Nshi" -msgstr "" +msgstr "Nshi" #. name for nsd msgid "Nisu; Southern" -msgstr "" +msgstr "Nisu; Selatan" #. name for nse msgid "Nsenga" -msgstr "" +msgstr "Nsenga" #. name for nsg msgid "Ngasa" -msgstr "" +msgstr "Ngasa" #. name for nsh msgid "Ngoshie" -msgstr "" +msgstr "Ngoshie" #. name for nsi msgid "Nigerian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Nigeria" #. name for nsk msgid "Naskapi" -msgstr "" +msgstr "Naskapi" #. name for nsl msgid "Norwegian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Norway" #. name for nsm msgid "Naga; Sumi" -msgstr "" +msgstr "Naga; Sumi" #. name for nsn msgid "Nehan" -msgstr "" +msgstr "Nehan" #. name for nso msgid "Sotho; Northern" -msgstr "" +msgstr "Sotho; Utara" #. name for nsp msgid "Nepalese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Nepal" #. name for nsq msgid "Miwok; Northern Sierra" -msgstr "" +msgstr "Miwok; Sierra Utara" #. name for nsr msgid "Maritime Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Mauritim" #. name for nss msgid "Nali" -msgstr "" +msgstr "Nali" #. name for nst msgid "Naga; Tase" -msgstr "" +msgstr "Naga; Tase" #. name for nsu msgid "Nahuatl; Sierra Negra" -msgstr "" +msgstr "Nahuatl; Sierra Negra" #. name for nsv msgid "Nisu; Southwestern" -msgstr "" +msgstr "Nisu; Barat Laut" #. name for nsw msgid "Navut" -msgstr "" +msgstr "Navut" #. name for nsx msgid "Nsongo" -msgstr "" +msgstr "Nsongo" #. name for nsy msgid "Nasal" -msgstr "" +msgstr "Nasal" #. name for nsz msgid "Nisenan" -msgstr "" +msgstr "Nisenan" #. name for nte msgid "Nathembo" -msgstr "" +msgstr "Nathembo" #. name for nti msgid "Natioro" -msgstr "" +msgstr "Natioro" #. name for ntj msgid "Ngaanyatjarra" -msgstr "" +msgstr "Ngaanyatjarra" #. name for ntk msgid "Ikoma-Nata-Isenye" -msgstr "" +msgstr "Ikoma-Nata-Isenye" #. name for ntm msgid "Nateni" -msgstr "" +msgstr "Nateni" #. name for nto msgid "Ntomba" -msgstr "" +msgstr "Ntomba" #. name for ntp msgid "Tepehuan; Northern" -msgstr "" +msgstr "Tepehuan; Utara" #. name for ntr msgid "Delo" -msgstr "" +msgstr "Delo" #. name for nts msgid "Natagaimas" -msgstr "" +msgstr "Natagaimas" #. name for ntu msgid "Natügu" -msgstr "" +msgstr "Natügu" #. name for ntw msgid "Nottoway" -msgstr "" +msgstr "Nottoway" #. name for nty msgid "Mantsi" -msgstr "" +msgstr "Mantsi" #. name for ntz msgid "Natanzi" -msgstr "" +msgstr "Natanzi" #. name for nua msgid "Yuaga" -msgstr "" +msgstr "Yuaga" #. name for nuc msgid "Nukuini" -msgstr "" +msgstr "Nukuini" #. name for nud msgid "Ngala" -msgstr "" +msgstr "Ngala" #. name for nue msgid "Ngundu" -msgstr "" +msgstr "Ngundu" #. name for nuf msgid "Nusu" -msgstr "" +msgstr "Nusu" #. name for nug msgid "Nungali" -msgstr "" +msgstr "Nungali" #. name for nuh msgid "Ndunda" -msgstr "" +msgstr "Ndunda" #. name for nui msgid "Ngumbi" -msgstr "" +msgstr "Ngumbi" #. name for nuj msgid "Nyole" -msgstr "" +msgstr "Nyole" #. name for nuk msgid "Nuu-chah-nulth" -msgstr "" +msgstr "Nuu-chah-nulth" #. name for nul msgid "Nusa Laut" -msgstr "" +msgstr "Nusa Laut" #. name for num msgid "Niuafo'ou" -msgstr "" +msgstr "Niuafo'ou" #. name for nun msgid "Anong" -msgstr "" +msgstr "Anong" #. name for nuo msgid "Nguôn" -msgstr "" +msgstr "Nguôn" #. name for nup msgid "Nupe-Nupe-Tako" -msgstr "" +msgstr "Nupe-Nupe-Tako" #. name for nuq msgid "Nukumanu" -msgstr "" +msgstr "Nukumanu" #. name for nur msgid "Nukuria" -msgstr "" +msgstr "Nukuria" #. name for nus msgid "Nuer" -msgstr "" +msgstr "Nuer" #. name for nut msgid "Nung (Viet Nam)" -msgstr "" +msgstr "Nung (Viet Nam)" #. name for nuu msgid "Ngbundu" -msgstr "" +msgstr "Ngbundu" #. name for nuv msgid "Nuni; Northern" -msgstr "" +msgstr "Nuni; Utara" #. name for nuw msgid "Nguluwan" -msgstr "" +msgstr "Nguluwan" #. name for nux msgid "Mehek" -msgstr "" +msgstr "Mehek" #. name for nuy msgid "Nunggubuyu" -msgstr "" +msgstr "Nunggubuyu" #. name for nuz msgid "Nahuatl; Tlamacazapa" -msgstr "" +msgstr "Nahuatl; Tlamacazapa" #. name for nvh msgid "Nasarian" -msgstr "" +msgstr "Nasarian" #. name for nvm msgid "Namiae" -msgstr "" +msgstr "Namiae" #. name for nwa msgid "Nawathinehena" -msgstr "" +msgstr "Nawathinehena" #. name for nwb msgid "Nyabwa" -msgstr "" +msgstr "Nyabwa" #. name for nwc msgid "Newari; Old" -msgstr "" +msgstr "Newari; Lama" #. name for nwe msgid "Ngwe" -msgstr "" +msgstr "Ngwe" #. name for nwi msgid "Tanna; Southwest" -msgstr "" +msgstr "Tanna; Barat Daya" #. name for nwm msgid "Nyamusa-Molo" -msgstr "" +msgstr "Nyamusa-Molo" #. name for nwr msgid "Nawaru" -msgstr "" +msgstr "Nawaru" #. name for nwx msgid "Newar; Middle" -msgstr "" +msgstr "Newar; Pertengahan" #. name for nwy msgid "Nottoway-Meherrin" -msgstr "" +msgstr "Nottoway-Meherrin" #. name for nxa msgid "Nauete" -msgstr "" +msgstr "Nauete" #. name for nxd msgid "Ngando (Democratic Republic of Congo)" -msgstr "" +msgstr "Ngando (Republik Democratik Congo)" #. name for nxe msgid "Nage" -msgstr "" +msgstr "Nage" #. name for nxg msgid "Ngad'a" -msgstr "" +msgstr "Ngad'a" #. name for nxi msgid "Nindi" -msgstr "" +msgstr "Nindi" #. name for nxl msgid "Nuaulu; South" -msgstr "" +msgstr "Nuaulu; Selatan" #. name for nxm msgid "Numidian" -msgstr "" +msgstr "Numidian" #. name for nxn msgid "Ngawun" -msgstr "" +msgstr "Ngawun" #. name for nxq msgid "Naxi" -msgstr "" +msgstr "Naxi" #. name for nxr msgid "Ninggerum" -msgstr "" +msgstr "Ninggerum" #. name for nxu msgid "Narau" -msgstr "" +msgstr "Narau" #. name for nxx msgid "Nafri" -msgstr "" +msgstr "Nafri" #. name for nya msgid "Nyanja" -msgstr "" +msgstr "Nyanja" #. name for nyb msgid "Nyangbo" -msgstr "" +msgstr "Nyangbo" #. name for nyc msgid "Nyanga-li" -msgstr "" +msgstr "Nyanga-li" #. name for nyd msgid "Nyore" -msgstr "" +msgstr "Nyore" #. name for nye msgid "Nyengo" -msgstr "" +msgstr "Nyengo" #. name for nyf msgid "Giryama" -msgstr "" +msgstr "Giryama" #. name for nyg msgid "Nyindu" -msgstr "" +msgstr "Nyindu" #. name for nyh msgid "Nyigina" -msgstr "" +msgstr "Nyigina" #. name for nyi msgid "Ama (Sudan)" -msgstr "" +msgstr "Ama (Sudan)" #. name for nyj msgid "Nyanga" -msgstr "" +msgstr "Nyanga" #. name for nyk msgid "Nyaneka" -msgstr "" +msgstr "Nyaneka" #. name for nyl msgid "Nyeu" -msgstr "" +msgstr "Nyeu" #. name for nym msgid "Nyamwezi" -msgstr "" +msgstr "Nyamwezi" #. name for nyn msgid "Nyankole" -msgstr "" +msgstr "Nyankole" #. name for nyo msgid "Nyoro" -msgstr "" +msgstr "Nyoro" #. name for nyp msgid "Nyang'i" -msgstr "" +msgstr "Nyang'i" #. name for nyq msgid "Nayini" -msgstr "" +msgstr "Nayini" #. name for nyr msgid "Nyiha (Malawi)" -msgstr "" +msgstr "Nyiha (Malawi)" #. name for nys msgid "Nyunga" -msgstr "" +msgstr "Nyunga" #. name for nyt msgid "Nyawaygi" -msgstr "" +msgstr "Nyawaygi" #. name for nyu msgid "Nyungwe" -msgstr "" +msgstr "Nyungwe" #. name for nyv msgid "Nyulnyul" -msgstr "" +msgstr "Nyulnyul" #. name for nyw msgid "Nyaw" -msgstr "" +msgstr "Nyaw" #. name for nyx msgid "Nganyaywana" -msgstr "" +msgstr "Nganyaywana" #. name for nyy msgid "Nyakyusa-Ngonde" -msgstr "" +msgstr "Nyakyusa-Ngonde" #. name for nza msgid "Mbembe; Tigon" -msgstr "" +msgstr "Mbembe; Tigon" #. name for nzb msgid "Njebi" -msgstr "" +msgstr "Njebi" #. name for nzi msgid "Nzima" -msgstr "" +msgstr "Nzima" #. name for nzk msgid "Nzakara" -msgstr "" +msgstr "Nzakara" #. name for nzm msgid "Naga; Zeme" -msgstr "" +msgstr "Naga; Zeme" #. name for nzs msgid "New Zealand Sign Language" -msgstr "" +msgstr "Bahasa Isyarat New Zealand" #. name for nzu msgid "Teke-Nzikou" -msgstr "" +msgstr "Teke-Nzikou" #. name for nzy msgid "Nzakambay" -msgstr "" +msgstr "Nzakambay" #. name for nzz msgid "Dogon; Nanga Dama" -msgstr "" +msgstr "Dogon; Nanga Dama" #. name for oaa msgid "Orok" -msgstr "" +msgstr "Orok" #. name for oac msgid "Oroch" -msgstr "" +msgstr "Oroch" #. name for oar msgid "Aramaic; Old (up to 700 BCE)" -msgstr "" +msgstr "Aramaik; Purba (sehingga 700 Seb.M)" #. name for oav msgid "Avar; Old" -msgstr "" +msgstr "Avar; Old" #. name for obi msgid "Obispeño" -msgstr "" +msgstr "Obispeño" #. name for obk msgid "Bontok; Southern" -msgstr "" +msgstr "Bontok; Selatan" #. name for obl msgid "Oblo" -msgstr "" +msgstr "Oblo" #. name for obm msgid "Moabite" -msgstr "" +msgstr "Moabite" #. name for obo msgid "Manobo; Obo" -msgstr "" +msgstr "Manobo; Obo" #. name for obr msgid "Burmese; Old" -msgstr "" +msgstr "Burma; Purba" #. name for obt msgid "Breton; Old" -msgstr "" +msgstr "Breton; Purba" #. name for obu msgid "Obulom" -msgstr "" +msgstr "Obulom" #. name for oca msgid "Ocaina" -msgstr "" +msgstr "Ocaina" #. name for och msgid "Chinese; Old" -msgstr "" +msgstr "Cina; Purba" #. name for oci msgid "Occitan (post 1500)" -msgstr "" +msgstr "Occitan (sebelum 1500)" #. name for oco msgid "Cornish; Old" -msgstr "" +msgstr "Cornish; Purba" #. name for ocu msgid "Matlatzinca; Atzingo" -msgstr "" +msgstr "Matlatzinca; Atzingo" #. name for oda msgid "Odut" -msgstr "" +msgstr "Odut" #. name for odk msgid "Od" -msgstr "" +msgstr "Od" #. name for odt msgid "Dutch; Old" -msgstr "" +msgstr "Belanda; Purba" #. name for odu msgid "Odual" -msgstr "" +msgstr "Odual" #. name for ofo msgid "Ofo" -msgstr "" +msgstr "Ofo" #. name for ofs msgid "Frisian; Old" -msgstr "" +msgstr "Frisian; Purba" #. name for ofu msgid "Efutop" -msgstr "" +msgstr "Efutop" #. name for ogb msgid "Ogbia" -msgstr "" +msgstr "Ogbia" #. name for ogc msgid "Ogbah" -msgstr "" +msgstr "Ogbah" #. name for oge msgid "Georgian; Old" -msgstr "" +msgstr "Georgia; Purba" #. name for ogg msgid "Ogbogolo" -msgstr "" +msgstr "Ogbogolo" #. name for ogo msgid "Khana" -msgstr "" +msgstr "Khana" #. name for ogu msgid "Ogbronuagum" -msgstr "" +msgstr "Ogbronuagum" #. name for oht msgid "Hittite; Old" -msgstr "" +msgstr "Hitit; Purba" #. name for ohu msgid "Hungarian; Old" -msgstr "" +msgstr "Hungari; Purba" #. name for oia msgid "Oirata" -msgstr "" +msgstr "Oirata" #. name for oin msgid "One; Inebu" -msgstr "" +msgstr "One; Inebu" #. name for ojb msgid "Ojibwa; Northwestern" -msgstr "" +msgstr "Ojibwa; Barat Laut" #. name for ojc msgid "Ojibwa; Central" -msgstr "" +msgstr "Ojibwa; Tengah" #. name for ojg msgid "Ojibwa; Eastern" -msgstr "" +msgstr "Ojibwa; Timur" #. name for oji msgid "Ojibwa" -msgstr "" +msgstr "Ojibwa" #. name for ojp msgid "Japanese; Old" -msgstr "" +msgstr "Jepun; Purba" #. name for ojs msgid "Ojibwa; Severn" -msgstr "" +msgstr "Ojibwa; Severn" #. name for ojv msgid "Ontong Java" -msgstr "" +msgstr "Ontong Java" #. name for ojw msgid "Ojibwa; Western" -msgstr "" +msgstr "Ojibwa; Barat" #. name for oka msgid "Okanagan" -msgstr "" +msgstr "Okanagan" #. name for okb msgid "Okobo" -msgstr "" +msgstr "Okobo" #. name for okd msgid "Okodia" -msgstr "" +msgstr "Okodia" #. name for oke msgid "Okpe (Southwestern Edo)" -msgstr "" +msgstr "Okpe (Edo Barat Daya)" #. name for okh msgid "Koresh-e Rostam" -msgstr "" +msgstr "Koresh-e Rostam" #. name for oki msgid "Okiek" -msgstr "" +msgstr "Okiek" #. name for okj msgid "Oko-Juwoi" -msgstr "" +msgstr "Oko-Juwoi" #. name for okk msgid "One; Kwamtim" -msgstr "" +msgstr "One; Kwamtim" #. name for okl msgid "Kentish Sign Language; Old" -msgstr "" +msgstr "Bahasa Isyarat Kentish, Purba" #. name for okm msgid "Korean; Middle (10th-16th cent.)" -msgstr "" +msgstr "Korean; Pertengahan (abad 10-16)" #. name for okn msgid "Oki-No-Erabu" -msgstr "" +msgstr "Oki-No-Erabu" #. name for oko msgid "Korean; Old (3rd-9th cent.)" -msgstr "" +msgstr "Korea; Purba (abad 3-9)" #. name for okr msgid "Kirike" -msgstr "" +msgstr "Kirike" #. name for oks msgid "Oko-Eni-Osayen" -msgstr "" +msgstr "Oko-Eni-Osayen" #. name for oku msgid "Oku" -msgstr "" +msgstr "Oku" #. name for okv msgid "Orokaiva" -msgstr "" +msgstr "Orokaiva" #. name for okx msgid "Okpe (Northwestern Edo)" -msgstr "" +msgstr "Okpe (Edo Barat Laut)" #. name for ola msgid "Walungge" -msgstr "" +msgstr "Walungge" #. name for old msgid "Mochi" -msgstr "" +msgstr "Mochi" #. name for ole msgid "Olekha" -msgstr "" +msgstr "Olekha" #. name for olm msgid "Oloma" -msgstr "" +msgstr "Oloma" #. name for olo msgid "Livvi" -msgstr "" +msgstr "Livvi" #. name for olr msgid "Olrat" -msgstr "" +msgstr "Olrat" #. name for oma msgid "Omaha-Ponca" -msgstr "" +msgstr "Omaha-Ponca" #. name for omb msgid "Ambae; East" -msgstr "" +msgstr "Ambae; Timur" #. name for omc msgid "Mochica" -msgstr "" +msgstr "Mochica" #. name for ome msgid "Omejes" -msgstr "" +msgstr "Omejes" #. name for omg msgid "Omagua" -msgstr "" +msgstr "Omagua" #. name for omi msgid "Omi" -msgstr "" +msgstr "Omi" #. name for omk msgid "Omok" -msgstr "" +msgstr "Omok" #. name for oml msgid "Ombo" -msgstr "" +msgstr "Ombo" #. name for omn msgid "Minoan" -msgstr "" +msgstr "Minoa" #. name for omo msgid "Utarmbung" -msgstr "" +msgstr "Utarmbung" #. name for omp msgid "Manipuri; Old" -msgstr "" +msgstr "Manipuri; Purba" #. name for omr msgid "Marathi; Old" -msgstr "" +msgstr "Marathi; Purba" #. name for omt msgid "Omotik" -msgstr "" +msgstr "Omotik" #. name for omu msgid "Omurano" -msgstr "" +msgstr "Omurano" #. name for omw msgid "Tairora; South" -msgstr "" +msgstr "Tairora; Selatan" #. name for omx msgid "Mon; Old" -msgstr "" +msgstr "Mon; Purba" #. name for ona msgid "Ona" -msgstr "" +msgstr "Ona" #. name for onb msgid "Lingao" -msgstr "" +msgstr "Lingao" #. name for one msgid "Oneida" -msgstr "" +msgstr "Oneida" #. name for ong msgid "Olo" -msgstr "" +msgstr "Olo" #. name for oni msgid "Onin" -msgstr "" +msgstr "Onin" #. name for onj msgid "Onjob" -msgstr "" +msgstr "Onjob" #. name for onk msgid "One; Kabore" -msgstr "" +msgstr "One; Kabore" #. name for onn msgid "Onobasulu" -msgstr "" +msgstr "Onobasulu" #. name for ono msgid "Onondaga" -msgstr "" +msgstr "Onondaga" #. name for onp msgid "Sartang" -msgstr "" +msgstr "Sartang" #. name for onr msgid "One; Northern" -msgstr "" +msgstr "One; Utara" #. name for ons msgid "Ono" -msgstr "" +msgstr "Ono" #. name for ont msgid "Ontenu" -msgstr "" +msgstr "Ontenu" #. name for onu msgid "Unua" -msgstr "" +msgstr "Unua" #. name for onw msgid "Nubian; Old" -msgstr "" +msgstr "Nubia; Purba" #. name for onx msgid "Onin Based Pidgin" -msgstr "" +msgstr "Onin Based Pidgin" #. name for ood msgid "Tohono O'odham" -msgstr "" +msgstr "Tohono O'odham" #. name for oog msgid "Ong" -msgstr "" +msgstr "Ong" #. name for oon msgid "Önge" -msgstr "" +msgstr "Önge" #. name for oor msgid "Oorlams" -msgstr "" +msgstr "Oorlams" #. name for oos msgid "Ossetic; Old" -msgstr "" +msgstr "Ossetik; Purba" #. name for opa msgid "Okpamheri" -msgstr "" +msgstr "Okpamheri" #. name for opk msgid "Kopkaka" -msgstr "" +msgstr "Kopkaka" #. name for opm msgid "Oksapmin" -msgstr "" +msgstr "Oksapmin" #. name for opo msgid "Opao" -msgstr "" +msgstr "Opao" #. name for opt msgid "Opata" -msgstr "" +msgstr "Opata" #. name for opy msgid "Ofayé" -msgstr "" +msgstr "Ofayé" #. name for ora msgid "Oroha" -msgstr "" +msgstr "Oroha" #. name for orc msgid "Orma" -msgstr "" +msgstr "Orma" #. name for ore msgid "Orejón" -msgstr "" +msgstr "Orejón" #. name for org msgid "Oring" -msgstr "" +msgstr "Oring" #. name for orh msgid "Oroqen" -msgstr "" +msgstr "Oroqen" #. name for ori msgid "Oriya" -msgstr "" +msgstr "Oriya" #. name for orm msgid "Oromo" -msgstr "" +msgstr "Oromo" #. name for orn msgid "Orang Kanaq" -msgstr "" +msgstr "Orang Kanaq" #. name for oro msgid "Orokolo" -msgstr "" +msgstr "Orokolo" #. name for orr msgid "Oruma" -msgstr "" +msgstr "Oruma" #. name for ors msgid "Orang Seletar" -msgstr "" +msgstr "Orang Seletar" #. name for ort msgid "Oriya; Adivasi" -msgstr "" +msgstr "Oriya; Adivasi" #. name for oru msgid "Ormuri" -msgstr "" +msgstr "Ormuri" #. name for orv msgid "Russian; Old" -msgstr "" +msgstr "Rusia; Purba" #. name for orw msgid "Oro Win" -msgstr "" +msgstr "Oro Win" #. name for orx msgid "Oro" -msgstr "" +msgstr "Oro" #. name for orz msgid "Ormu" -msgstr "" +msgstr "Ormu" #. name for osa msgid "Osage" -msgstr "" +msgstr "Osage" #. name for osc msgid "Oscan" -msgstr "" +msgstr "Oscan" #. name for osi msgid "Osing" -msgstr "" +msgstr "Osing" #. name for oso msgid "Ososo" -msgstr "" +msgstr "Ososo" #. name for osp msgid "Spanish; Old" -msgstr "" +msgstr "Sepanyol; Purba" #. name for oss msgid "Ossetian" -msgstr "" +msgstr "Ossetia" #. name for ost msgid "Osatu" -msgstr "" +msgstr "Osatu" #. name for osu msgid "One; Southern" -msgstr "" +msgstr "One; Selatan" #. name for osx msgid "Saxon; Old" -msgstr "" +msgstr "Saxon; Purba" #. name for ota msgid "Turkish; Ottoman (1500-1928)" -msgstr "" +msgstr "Turki; Uthmaniah (1500-1928)" #. name for otb msgid "Tibetan; Old" -msgstr "" +msgstr "Tibet; Purba" #. name for otd msgid "Ot Danum" -msgstr "" +msgstr "Ot Danum" #. name for ote msgid "Otomi; Mezquital" -msgstr "" +msgstr "Otomi; Mezquital" #. name for oti msgid "Oti" -msgstr "" +msgstr "Oti" #. name for otk msgid "Turkish; Old" -msgstr "" +msgstr "Turki; Purba" #. name for otl msgid "Otomi; Tilapa" -msgstr "" +msgstr "Otomi; Tilapa" #. name for otm msgid "Otomi; Eastern Highland" -msgstr "" +msgstr "Otomi; Tanah Tinggi Timur" #. name for otn msgid "Otomi; Tenango" -msgstr "" +msgstr "Otomi; Tenango" #. name for otq msgid "Otomi; Querétaro" -msgstr "" +msgstr "Otomi; Querétaro" #. name for otr msgid "Otoro" -msgstr "" +msgstr "Otoro" #. name for ots msgid "Otomi; Estado de México" -msgstr "" +msgstr "Otomi; Estado de México" #. name for ott msgid "Otomi; Temoaya" -msgstr "" +msgstr "Otomi; Temoaya" #. name for otu msgid "Otuke" -msgstr "" +msgstr "Otuke" #. name for otw msgid "Ottawa" -msgstr "" +msgstr "Ottawa" #. name for otx msgid "Otomi; Texcatepec" -msgstr "" +msgstr "Otomi; Texcatepec" #. name for oty msgid "Tamil; Old" -msgstr "" +msgstr "Tamil; Purba" #. name for otz msgid "Otomi; Ixtenco" -msgstr "" +msgstr "Otomi; Ixtenco" #. name for oua msgid "Tagargrent" -msgstr "" +msgstr "Tagargrent" #. name for oub msgid "Glio-Oubi" -msgstr "" +msgstr "Glio-Oubi" #. name for oue msgid "Oune" -msgstr "" +msgstr "Oune" #. name for oui msgid "Uighur; Old" -msgstr "" +msgstr "Uighur; Purba" #. name for oum msgid "Ouma" -msgstr "" +msgstr "Ouma" #. name for oun msgid "!O!ung" -msgstr "" +msgstr "!O!ung" #. name for owi msgid "Owiniga" -msgstr "" +msgstr "Owiniga" #. name for owl msgid "Welsh; Old" -msgstr "" +msgstr "Welsh; Purba" #. name for oyb msgid "Oy" -msgstr "" +msgstr "Oy" #. name for oyd msgid "Oyda" -msgstr "" +msgstr "Oyda" #. name for oym msgid "Wayampi" -msgstr "" +msgstr "Wayampi" #. name for oyy msgid "Oya'oya" -msgstr "" +msgstr "Oya'oya" #. name for ozm msgid "Koonzime" -msgstr "" +msgstr "Koonzime" #. name for pab msgid "Parecís" -msgstr "" +msgstr "Parecís" #. name for pac msgid "Pacoh" -msgstr "" +msgstr "Pacoh" #. name for pad msgid "Paumarí" -msgstr "" +msgstr "Paumarí" #. name for pae msgid "Pagibete" -msgstr "" +msgstr "Pagibete" #. name for paf msgid "Paranawát" -msgstr "" +msgstr "Paranawát" #. name for pag msgid "Pangasinan" -msgstr "" +msgstr "Pangasinan" #. name for pah msgid "Tenharim" -msgstr "" +msgstr "Tenharim" #. name for pai msgid "Pe" -msgstr "" +msgstr "Pe" #. name for pak msgid "Parakanã" -msgstr "" +msgstr "Parakanã" #. name for pal msgid "Pahlavi" -msgstr "" +msgstr "Pahlavi" #. name for pam msgid "Pampanga" -msgstr "" +msgstr "Pampanga" #. name for pan msgid "Panjabi" -msgstr "" +msgstr "Panjabi" #. name for pao msgid "Paiute; Northern" -msgstr "" +msgstr "Paiute; Utara" #. name for pap msgid "Papiamento" -msgstr "" +msgstr "Papiamento" #. name for paq msgid "Parya" -msgstr "" +msgstr "Parya" #. name for par msgid "Panamint" -msgstr "" +msgstr "Panamint" #. name for pas msgid "Papasena" -msgstr "" +msgstr "Papasena" #. name for pat msgid "Papitalai" -msgstr "" +msgstr "Papitalai" #. name for pau msgid "Palauan" -msgstr "" +msgstr "Palau" #. name for pav msgid "Pakaásnovos" -msgstr "" +msgstr "Pakaásnovos" #. name for paw msgid "Pawnee" -msgstr "" +msgstr "Pawnee" #. name for pax msgid "Pankararé" -msgstr "" +msgstr "Pankararé" #. name for pay msgid "Pech" -msgstr "" +msgstr "Pech" #. name for paz msgid "Pankararú" -msgstr "" +msgstr "Pankararú" #. name for pbb msgid "Páez" -msgstr "" +msgstr "Páez" #. name for pbc msgid "Patamona" -msgstr "" +msgstr "Patamona" #. name for pbe msgid "Popoloca; Mezontla" -msgstr "" +msgstr "Popoloca; Mezontla" #. name for pbf msgid "Popoloca; Coyotepec" -msgstr "" +msgstr "Popoloca; Coyotepec" #. name for pbg msgid "Paraujano" -msgstr "" +msgstr "Paraujano" #. name for pbh msgid "E'ñapa Woromaipu" -msgstr "" +msgstr "E'ñapa Woromaipu" #. name for pbi msgid "Parkwa" -msgstr "" +msgstr "Parkwa" #. name for pbl msgid "Mak (Nigeria)" -msgstr "" +msgstr "Mak (Nigeria)" #. name for pbn msgid "Kpasam" -msgstr "" +msgstr "Kpasam" #. name for pbo msgid "Papel" -msgstr "" +msgstr "Papel" #. name for pbp msgid "Badyara" -msgstr "" +msgstr "Badyara" #. name for pbr msgid "Pangwa" -msgstr "" +msgstr "Pangwa" #. name for pbs msgid "Pame; Central" -msgstr "" +msgstr "Pame; Tengah" #. name for pbt msgid "Pashto; Southern" -msgstr "" +msgstr "Pashto; Selatan" #. name for pbu msgid "Pashto; Northern" -msgstr "" +msgstr "Pashto; Utara" #. name for pbv msgid "Pnar" -msgstr "" +msgstr "Pnar" #. name for pby msgid "Pyu" -msgstr "" +msgstr "Pyu" #. name for pbz msgid "Palu" -msgstr "" +msgstr "Palu" #. name for pca msgid "Popoloca; Santa Inés Ahuatempan" -msgstr "" +msgstr "Popoloca; Santa Inés Ahuatempan" #. name for pcb msgid "Pear" -msgstr "" +msgstr "Pear" #. name for pcc msgid "Bouyei" -msgstr "" +msgstr "Bouyei" #. name for pcd msgid "Picard" -msgstr "" +msgstr "Picard" #. name for pce msgid "Palaung; Ruching" -msgstr "" +msgstr "Palaung; Ruching" #. name for pcf msgid "Paliyan" -msgstr "" +msgstr "Paliyan" #. name for pcg msgid "Paniya" -msgstr "" +msgstr "Paniya" #. name for pch msgid "Pardhan" -msgstr "" +msgstr "Pardhan" #. name for pci msgid "Duruwa" -msgstr "" +msgstr "Duruwa" #. name for pcj msgid "Parenga" -msgstr "" +msgstr "Parenga" #. name for pck msgid "Chin; Paite" -msgstr "" +msgstr "Chin; Paite" #. name for pcl msgid "Pardhi" -msgstr "" +msgstr "Pardhi" #. name for pcm msgid "Pidgin; Nigerian" -msgstr "" +msgstr "Pidgin; Nigeria" #. name for pcn msgid "Piti" -msgstr "" +msgstr "Piti" #. name for pcp msgid "Pacahuara" -msgstr "" +msgstr "Pacahuara" #. name for pcr msgid "Panang" -msgstr "" +msgstr "Panang" #. name for pcw msgid "Pyapun" -msgstr "" +msgstr "Pyapun" #. name for pda msgid "Anam" -msgstr "" +msgstr "Anam" #. name for pdc msgid "German; Pennsylvania" -msgstr "" +msgstr "Jerman; Pennsylvania" #. name for pdi msgid "Pa Di" -msgstr "" +msgstr "Pa Di" #. name for pdn msgid "Podena" -msgstr "" +msgstr "Podena" #. name for pdo msgid "Padoe" -msgstr "" +msgstr "Padoe" #. name for pdt msgid "Plautdietsch" -msgstr "" +msgstr "Plautdietsch" #. name for pdu msgid "Kayan" -msgstr "" +msgstr "Kayan" #. name for pea msgid "Indonesian; Peranakan" -msgstr "" +msgstr "Indonesian; Peranakan" #. name for peb msgid "Pomo; Eastern" -msgstr "" +msgstr "Pomo; Timur" #. name for ped msgid "Mala (Papua New Guinea)" -msgstr "" +msgstr "Mala (Papua New Guinea)" #. name for pee msgid "Taje" -msgstr "" +msgstr "Taje" #. name for pef msgid "Pomo; Northeastern" -msgstr "" +msgstr "Pomo; Timur Laut" #. name for peg msgid "Pengo" -msgstr "" +msgstr "Pengo" #. name for peh msgid "Bonan" -msgstr "" +msgstr "Bonan" #. name for pei msgid "Chichimeca-Jonaz" -msgstr "" +msgstr "Chichimeca-Jonaz" #. name for pej msgid "Pomo; Northern" -msgstr "" +msgstr "Pomo; Utara" #. name for pek msgid "Penchal" -msgstr "" +msgstr "Penchal" #. name for pel msgid "Pekal" -msgstr "" +msgstr "Pekal" #. name for pem msgid "Phende" -msgstr "" +msgstr "Phende" #. name for peo msgid "Persian; Old (ca. 600-400 B.C.)" -msgstr "" +msgstr "Parsi; Purba (kira-kira 600-400 Seb.M.)" #. name for pep msgid "Kunja" -msgstr "" +msgstr "Kunja" #. name for peq msgid "Pomo; Southern" -msgstr "" +msgstr "Pomo; Selatan" #. name for pes msgid "Persian; Iranian" -msgstr "" +msgstr "Parsi; Iran" #. name for pev msgid "Pémono" -msgstr "" +msgstr "Pémono" #. name for pex msgid "Petats" -msgstr "" +msgstr "Petats" #. name for pey msgid "Petjo" -msgstr "" +msgstr "Petjo" #. name for pez msgid "Penan; Eastern" -msgstr "" +msgstr "Penan; Timur" #. name for pfa msgid "Pááfang" -msgstr "" +msgstr "Pááfang" #. name for pfe msgid "Peere" -msgstr "" +msgstr "Peere" #. name for pfl msgid "Pfaelzisch" -msgstr "" +msgstr "Pfaelzisch" #. name for pga msgid "Creole Arabic; Sudanese" -msgstr "" +msgstr "Arab Creole; Sudan" #. name for pgg msgid "Pangwali" -msgstr "" +msgstr "Pangwali" #. name for pgi msgid "Pagi" -msgstr "" +msgstr "Pagi" #. name for pgk msgid "Rerep" -msgstr "" +msgstr "Rerep" #. name for pgl msgid "Irish; Primitive" -msgstr "" +msgstr "Irish; Primitif" #. name for pgn msgid "Paelignian" -msgstr "" +msgstr "Paelignian" #. name for pgs msgid "Pangseng" -msgstr "" +msgstr "Pangseng" #. name for pgu msgid "Pagu" -msgstr "" +msgstr "Pagu" #. name for pgy msgid "Pongyong" -msgstr "" +msgstr "Pongyong" #. name for pha msgid "Pa-Hng" -msgstr "" +msgstr "Pa-Hng" #. name for phd msgid "Phudagi" -msgstr "" +msgstr "Phudagi" #. name for phg msgid "Phuong" -msgstr "" +msgstr "Phuong" #. name for phh msgid "Phukha" -msgstr "" +msgstr "Phukha" #. name for phk msgid "Phake" -msgstr "" +msgstr "Phake" #. name for phl msgid "Phalura" -msgstr "" +msgstr "Phalura" #. name for phm msgid "Phimbi" -msgstr "" +msgstr "Phimbi" #. name for phn msgid "Phoenician" -msgstr "" +msgstr "Phoenicia" #. name for pho msgid "Phunoi" -msgstr "" +msgstr "Phunoi" #. name for phq msgid "Phana'" -msgstr "" +msgstr "Phana'" #. name for phr msgid "Pahari-Potwari" -msgstr "" +msgstr "Pahari-Potwari" #. name for pht msgid "Phu Thai" -msgstr "" +msgstr "Phu Thai" #. name for phu msgid "Phuan" -msgstr "" +msgstr "Phuan" #. name for phv msgid "Pahlavani" -msgstr "" +msgstr "Pahlavani" #. name for phw msgid "Phangduwali" -msgstr "" +msgstr "Phangduwali" #. name for pia msgid "Pima Bajo" -msgstr "" +msgstr "Pima Bajo" #. name for pib msgid "Yine" -msgstr "" +msgstr "Yine" #. name for pic msgid "Pinji" -msgstr "" +msgstr "Pinji" #. name for pid msgid "Piaroa" -msgstr "" +msgstr "Piaroa" #. name for pie msgid "Piro" -msgstr "" +msgstr "Piro" #. name for pif msgid "Pingelapese" -msgstr "" +msgstr "Pingelapese" #. name for pig msgid "Pisabo" -msgstr "" +msgstr "Pisabo" #. name for pih msgid "Pitcairn-Norfolk" -msgstr "" +msgstr "Pitcairn-Norfolk" #. name for pii msgid "Pini" -msgstr "" +msgstr "Pini" #. name for pij msgid "Pijao" -msgstr "" +msgstr "Pijao" #. name for pil msgid "Yom" -msgstr "" +msgstr "Yom" #. name for pim msgid "Powhatan" -msgstr "" +msgstr "Powhatan" #. name for pin msgid "Piame" -msgstr "" +msgstr "Piame" #. name for pio msgid "Piapoco" -msgstr "" +msgstr "Piapoco" #. name for pip msgid "Pero" -msgstr "" +msgstr "Pero" #. name for pir msgid "Piratapuyo" -msgstr "" +msgstr "Piratapuyo" #. name for pis msgid "Pijin" -msgstr "" +msgstr "Pijin" #. name for pit msgid "Pitta Pitta" -msgstr "" +msgstr "Pitta Pitta" #. name for piu msgid "Pintupi-Luritja" -msgstr "" +msgstr "Pintupi-Luritja" #. name for piv msgid "Pileni" -msgstr "" +msgstr "Pileni" #. name for piw msgid "Pimbwe" -msgstr "" +msgstr "Pimbwe" #. name for pix msgid "Piu" -msgstr "" +msgstr "Piu" #. name for piy msgid "Piya-Kwonci" -msgstr "" +msgstr "Piya-Kwonci" #. name for piz msgid "Pije" -msgstr "" +msgstr "Pije" #. name for pjt msgid "Pitjantjatjara" -msgstr "" +msgstr "Pitjantjatjara" #. name for pka msgid "Prākrit; Ardhamāgadhī" -msgstr "" +msgstr "Prākrit; Ardhamāgadhī" #. name for pkb msgid "Pokomo" -msgstr "" +msgstr "Pokomo" #. name for pkc msgid "Paekche" -msgstr "" +msgstr "Paekche" #. name for pkg msgid "Pak-Tong" -msgstr "" +msgstr "Pak-Tong" #. name for pkh msgid "Pankhu" -msgstr "" +msgstr "Pankhu" #. name for pkn msgid "Pakanha" -msgstr "" +msgstr "Pakanha" #. name for pko msgid "Pökoot" -msgstr "" +msgstr "Pökoot" #. name for pkp msgid "Pukapuka" -msgstr "" +msgstr "Pukapuka" #. name for pkr msgid "Kurumba; Attapady" -msgstr "" +msgstr "Kurumba; Attapady" #. name for pks msgid "Pakistan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Pakistan" #. name for pkt msgid "Maleng" -msgstr "" +msgstr "Maleng" #. name for pku msgid "Paku" -msgstr "" +msgstr "Paku" #. name for pla msgid "Miani" -msgstr "" +msgstr "Miani" #. name for plb msgid "Polonombauk" -msgstr "" +msgstr "Polonombauk" #. name for plc msgid "Palawano; Central" -msgstr "" +msgstr "Palawano; Tengah" #. name for pld msgid "Polari" -msgstr "" +msgstr "Polari" #. name for ple msgid "Palu'e" -msgstr "" +msgstr "Palu'e" #. name for plg msgid "Pilagá" -msgstr "" +msgstr "Pilagá" #. name for plh msgid "Paulohi" -msgstr "" +msgstr "Paulohi" #. name for pli msgid "Pali" -msgstr "" +msgstr "Pali" #. name for plj msgid "Polci" -msgstr "" +msgstr "Polci" #. name for plk msgid "Shina; Kohistani" -msgstr "" +msgstr "Shina; Kohistani" #. name for pll msgid "Palaung; Shwe" -msgstr "" +msgstr "Palaung; Shwe" #. name for pln msgid "Palenquero" -msgstr "" +msgstr "Palenquero" #. name for plo msgid "Popoluca; Oluta" -msgstr "" +msgstr "Popoluca; Oluta" #. name for plp msgid "Palpa" -msgstr "" +msgstr "Palpa" #. name for plq msgid "Palaic" -msgstr "" +msgstr "Palaic" #. name for plr msgid "Senoufo; Palaka" -msgstr "" +msgstr "Senoufo; Palaka" #. name for pls msgid "Popoloca; San Marcos Tlalcoyalco" -msgstr "" +msgstr "Popoloca; San Marcos Tlalcoyalco" #. name for plt msgid "Malagasy; Plateau" -msgstr "" +msgstr "Malagasy; Plateau" #. name for plu msgid "Palikúr" -msgstr "" +msgstr "Palikúr" #. name for plv msgid "Palawano; Southwest" -msgstr "" +msgstr "Palawano; Barat Daya" #. name for plw msgid "Palawano; Brooke's Point" -msgstr "" +msgstr "Palawano; Titik Brooke" #. name for ply msgid "Bolyu" -msgstr "" +msgstr "Bolyu" #. name for plz msgid "Paluan" -msgstr "" +msgstr "Paluan" #. name for pma msgid "Paama" -msgstr "" +msgstr "Paama" #. name for pmb msgid "Pambia" -msgstr "" +msgstr "Pambia" #. name for pmc msgid "Palumata" -msgstr "" +msgstr "Palumata" #. name for pme msgid "Pwaamei" -msgstr "" +msgstr "Pwaamei" #. name for pmf msgid "Pamona" -msgstr "" +msgstr "Pamona" #. name for pmh msgid "Prākrit; Māhārāṣṭri" -msgstr "" +msgstr "Prākrit; Māhārāṣṭri" #. name for pmi msgid "Pumi; Northern" -msgstr "" +msgstr "Pumi; Utara" #. name for pmj msgid "Pumi; Southern" -msgstr "" +msgstr "Pumi; Selatan" #. name for pmk msgid "Pamlico" -msgstr "" +msgstr "Pamlico" #. name for pml msgid "Lingua Franca" -msgstr "" +msgstr "Lingua Franca" #. name for pmm msgid "Pomo" -msgstr "" +msgstr "Pomo" #. name for pmn msgid "Pam" -msgstr "" +msgstr "Pam" #. name for pmo msgid "Pom" -msgstr "" +msgstr "Pom" #. name for pmq msgid "Pame; Northern" -msgstr "" +msgstr "Pame; Utara" #. name for pmr msgid "Paynamar" -msgstr "" +msgstr "Paynamar" #. name for pms msgid "Piemontese" -msgstr "" +msgstr "Piemont" #. name for pmt msgid "Tuamotuan" -msgstr "" +msgstr "Tuamotu" #. name for pmu msgid "Panjabi; Mirpur" -msgstr "" +msgstr "Panjabi; Mirpur" #. name for pmw msgid "Miwok; Plains" -msgstr "" +msgstr "Miwok; Plains" #. name for pmx msgid "Naga; Poumei" -msgstr "" +msgstr "Naga; Poumei" #. name for pmy msgid "Malay; Papuan" -msgstr "" +msgstr "Melayu; Papua" #. name for pmz msgid "Pame; Southern" -msgstr "" +msgstr "Pame; Selatan" #. name for pna msgid "Punan Bah-Biau" -msgstr "" +msgstr "Punan Bah-Biau" #. name for pnb msgid "Panjabi; Western" -msgstr "" +msgstr "Punjabi; Barat" #. name for pnc msgid "Pannei" -msgstr "" +msgstr "Pannei" #. name for pne msgid "Penan; Western" -msgstr "" +msgstr "Penan; Barat" #. name for png msgid "Pongu" -msgstr "" +msgstr "Pongu" #. name for pnh msgid "Penrhyn" -msgstr "" +msgstr "Penrhyn" #. name for pni msgid "Aoheng" -msgstr "" +msgstr "Aoheng" #. name for pnm msgid "Punan Batu 1" -msgstr "" +msgstr "Punan Batu 1" #. name for pnn msgid "Pinai-Hagahai" -msgstr "" +msgstr "Pinai-Hagahai" #. name for pno msgid "Panobo" -msgstr "" +msgstr "Panobo" #. name for pnp msgid "Pancana" -msgstr "" +msgstr "Pancana" #. name for pnq msgid "Pana (Burkina Faso)" -msgstr "" +msgstr "Pana (Burkina Faso)" #. name for pnr msgid "Panim" -msgstr "" +msgstr "Panim" #. name for pns msgid "Ponosakan" -msgstr "" +msgstr "Ponosakan" #. name for pnt msgid "Pontic" -msgstr "" +msgstr "Pontic" #. name for pnu msgid "Bunu; Jiongnai" -msgstr "" +msgstr "Bunu; Jiongnai" #. name for pnv msgid "Pinigura" -msgstr "" +msgstr "Pinigura" #. name for pnw msgid "Panytyima" -msgstr "" +msgstr "Panytyima" #. name for pnx msgid "Phong-Kniang" -msgstr "" +msgstr "Phong-Kniang" #. name for pny msgid "Pinyin" -msgstr "" +msgstr "Pinyin" #. name for pnz msgid "Pana (Central African Republic)" -msgstr "" +msgstr "Pana (Republik Afrika Tengah)" #. name for poc msgid "Poqomam" -msgstr "" +msgstr "Poqomam" #. name for pod msgid "Ponares" -msgstr "" +msgstr "Ponares" #. name for poe msgid "Popoloca; San Juan Atzingo" -msgstr "" +msgstr "Popoloca; San Juan Atzingo" #. name for pof msgid "Poke" -msgstr "" +msgstr "Poke" #. name for pog msgid "Potiguára" -msgstr "" +msgstr "Potiguára" #. name for poh msgid "Poqomchi'" -msgstr "" +msgstr "Poqomchi'" #. name for poi msgid "Popoluca; Highland" -msgstr "" +msgstr "Popoluca; Tanah Tinggi" #. name for pok msgid "Pokangá" -msgstr "" +msgstr "Pokangá" #. name for pol msgid "Polish" @@ -21070,23 +21070,23 @@ msgstr "Polish" #. name for pom msgid "Pomo; Southeastern" -msgstr "" +msgstr "Pomo; Tenggara" #. name for pon msgid "Pohnpeian" -msgstr "" +msgstr "Pohnpeian" #. name for poo msgid "Pomo; Central" -msgstr "" +msgstr "Pomo; Tengah" #. name for pop msgid "Pwapwa" -msgstr "" +msgstr "Pwapwa" #. name for poq msgid "Popoluca; Texistepec" -msgstr "" +msgstr "Popoluca; Texistepec" #. name for por msgid "Portuguese" @@ -21094,1135 +21094,1135 @@ msgstr "Portugis" #. name for pos msgid "Popoluca; Sayula" -msgstr "" +msgstr "Popoluca; Sayula" #. name for pot msgid "Potawatomi" -msgstr "" +msgstr "Potawatomi" #. name for pov msgid "Crioulo; Upper Guinea" -msgstr "" +msgstr "Crioulo; Guinea Atas" #. name for pow msgid "Popoloca; San Felipe Otlaltepec" -msgstr "" +msgstr "Popoloca; San Felipe Otlaltepec" #. name for pox msgid "Polabian" -msgstr "" +msgstr "Polabian" #. name for poy msgid "Pogolo" -msgstr "" +msgstr "Pogolo" #. name for ppa msgid "Pao" -msgstr "" +msgstr "Pao" #. name for ppe msgid "Papi" -msgstr "" +msgstr "Papi" #. name for ppi msgid "Paipai" -msgstr "" +msgstr "Paipai" #. name for ppk msgid "Uma" -msgstr "" +msgstr "Uma" #. name for ppl msgid "Pipil" -msgstr "" +msgstr "Pipil" #. name for ppm msgid "Papuma" -msgstr "" +msgstr "Papuma" #. name for ppn msgid "Papapana" -msgstr "" +msgstr "Papapana" #. name for ppo msgid "Folopa" -msgstr "" +msgstr "Folopa" #. name for ppp msgid "Pelende" -msgstr "" +msgstr "Pelende" #. name for ppq msgid "Pei" -msgstr "" +msgstr "Pei" #. name for ppr msgid "Piru" -msgstr "" +msgstr "Piru" #. name for pps msgid "Popoloca; San Luís Temalacayuca" -msgstr "" +msgstr "Popoloca; San Luís Temalacayuca" #. name for ppt msgid "Pare" -msgstr "" +msgstr "Pare" #. name for ppu msgid "Papora" -msgstr "" +msgstr "Papora" #. name for pqa msgid "Pa'a" -msgstr "" +msgstr "Pa'a" #. name for pqm msgid "Malecite-Passamaquoddy" -msgstr "" +msgstr "Malecite-Passamaquoddy" #. name for prb msgid "Lua'" -msgstr "" +msgstr "Lua'" #. name for prc msgid "Parachi" -msgstr "" +msgstr "Parachi" #. name for prd msgid "Parsi-Dari" -msgstr "" +msgstr "Parsi-Dari" #. name for pre msgid "Principense" -msgstr "" +msgstr "Principense" #. name for prf msgid "Paranan" -msgstr "" +msgstr "Paranan" #. name for prg msgid "Prussian" -msgstr "" +msgstr "Prussia" #. name for prh msgid "Porohanon" -msgstr "" +msgstr "Porohanon" #. name for pri msgid "Paicî" -msgstr "" +msgstr "Paicî" #. name for prk msgid "Parauk" -msgstr "" +msgstr "Parauk" #. name for prl msgid "Peruvian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Peru" #. name for prm msgid "Kibiri" -msgstr "" +msgstr "Kibiri" #. name for prn msgid "Prasuni" -msgstr "" +msgstr "Prasuni" #. name for pro msgid "Provençal; Old (to 1500)" -msgstr "" +msgstr "Provençal; Purba (sehingga 1500)" #. name for prp msgid "Parsi" -msgstr "" +msgstr "Parsi" #. name for prq msgid "Ashéninka Perené" -msgstr "" +msgstr "Ashéninka Perené" #. name for prr msgid "Puri" -msgstr "" +msgstr "Puri" #. name for prs msgid "Persian; Afghan" -msgstr "" +msgstr "Parsi; Afghan" #. name for prt msgid "Phai" -msgstr "" +msgstr "Phai" #. name for pru msgid "Puragi" -msgstr "" +msgstr "Puragi" #. name for prw msgid "Parawen" -msgstr "" +msgstr "Parawen" #. name for prx msgid "Purik" -msgstr "" +msgstr "Purik" #. name for pry msgid "Pray 3" -msgstr "" +msgstr "Pray 3" #. name for prz msgid "Providencia Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Providencia" #. name for psa msgid "Awyu; Asue" -msgstr "" +msgstr "Awyu; Asue" #. name for psc msgid "Persian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Parsi" #. name for psd msgid "Plains Indian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Indian Tanah Rata" #. name for pse msgid "Malay; Central" -msgstr "" +msgstr "Melayu; Pusat" #. name for psg msgid "Penang Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Penang" #. name for psh msgid "Pashayi; Southwest" -msgstr "" +msgstr "Pashayi; Timur Laut" #. name for psi msgid "Pashayi; Southeast" -msgstr "" +msgstr "Pashayi; Tenggara" #. name for psl msgid "Puerto Rican Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Puerto Rico" #. name for psm msgid "Pauserna" -msgstr "" +msgstr "Pauserna" #. name for psn msgid "Panasuan" -msgstr "" +msgstr "Panasu" #. name for pso msgid "Polish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Poland" #. name for psp msgid "Philippine Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Filipina" #. name for psq msgid "Pasi" -msgstr "" +msgstr "Pasi" #. name for psr msgid "Portuguese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Portugis" #. name for pss msgid "Kaulong" -msgstr "" +msgstr "Kaulong" #. name for pst msgid "Pashto; Central" -msgstr "" +msgstr "Pashto; Pusat" #. name for psu msgid "Prākrit; Sauraseni" -msgstr "" +msgstr "Prākrit; Sauraseni" #. name for psw msgid "Port Sandwich" -msgstr "" +msgstr "Port Sandwich" #. name for psy msgid "Piscataway" -msgstr "" +msgstr "Piscataway" #. name for pta msgid "Pai Tavytera" -msgstr "" +msgstr "Pai Tavytera" #. name for pth msgid "Pataxó Hã-Ha-Hãe" -msgstr "" +msgstr "Pataxó Hã-Ha-Hãe" #. name for pti msgid "Pintiini" -msgstr "" +msgstr "Pintiini" #. name for ptn msgid "Patani" -msgstr "" +msgstr "Patani" #. name for pto msgid "Zo'é" -msgstr "" +msgstr "Zo'é" #. name for ptp msgid "Patep" -msgstr "" +msgstr "Patep" #. name for ptr msgid "Piamatsina" -msgstr "" +msgstr "Piamatsina" #. name for ptt msgid "Enrekang" -msgstr "" +msgstr "Enrekang" #. name for ptu msgid "Bambam" -msgstr "" +msgstr "Bambam" #. name for ptv msgid "Port Vato" -msgstr "" +msgstr "Port Vato" #. name for ptw msgid "Pentlatch" -msgstr "" +msgstr "Pentlatch" #. name for pty msgid "Pathiya" -msgstr "" +msgstr "Pathiya" #. name for pua msgid "Purepecha; Western Highland" -msgstr "" +msgstr "Purepecha; Tanah Tinggi Barat" #. name for pub msgid "Purum" -msgstr "" +msgstr "Purum" #. name for puc msgid "Punan Merap" -msgstr "" +msgstr "Punan Merap" #. name for pud msgid "Punan Aput" -msgstr "" +msgstr "Punan Aput" #. name for pue msgid "Puelche" -msgstr "" +msgstr "Puelche" #. name for puf msgid "Punan Merah" -msgstr "" +msgstr "Punan Merah" #. name for pug msgid "Phuie" -msgstr "" +msgstr "Phuie" #. name for pui msgid "Puinave" -msgstr "" +msgstr "Puinave" #. name for puj msgid "Punan Tubu" -msgstr "" +msgstr "Punan Tubu" #. name for puk msgid "Pu Ko" -msgstr "" +msgstr "Pu Ko" #. name for pum msgid "Puma" -msgstr "" +msgstr "Puma" #. name for puo msgid "Puoc" -msgstr "" +msgstr "Puoc" #. name for pup msgid "Pulabu" -msgstr "" +msgstr "Pulabu" #. name for puq msgid "Puquina" -msgstr "" +msgstr "Puquina" #. name for pur msgid "Puruborá" -msgstr "" +msgstr "Puruborá" #. name for pus msgid "Pushto" -msgstr "" +msgstr "Pushto" #. name for put msgid "Putoh" -msgstr "" +msgstr "Putoh" #. name for puu msgid "Punu" -msgstr "" +msgstr "Punu" #. name for puw msgid "Puluwatese" -msgstr "" +msgstr "Puluwat" #. name for pux msgid "Puare" -msgstr "" +msgstr "Puare" #. name for puy msgid "Purisimeño" -msgstr "" +msgstr "Purisimeño" #. name for puz msgid "Naga; Purum" -msgstr "" +msgstr "Naga; Purum" #. name for pwa msgid "Pawaia" -msgstr "" +msgstr "Pawaia" #. name for pwb msgid "Panawa" -msgstr "" +msgstr "Panawa" #. name for pwg msgid "Gapapaiwa" -msgstr "" +msgstr "Gapapaiwa" #. name for pwm msgid "Molbog" -msgstr "" +msgstr "Molbog" #. name for pwn msgid "Paiwan" -msgstr "" +msgstr "Paiwan" #. name for pwo msgid "Karen; Pwo Western" -msgstr "" +msgstr "Karen; Pwo Barat" #. name for pwr msgid "Powari" -msgstr "" +msgstr "Powari" #. name for pww msgid "Karen; Pwo Northern" -msgstr "" +msgstr "Karen; Pwo Utara" #. name for pxm msgid "Mixe; Quetzaltepec" -msgstr "" +msgstr "Mixe; Quetzaltepec" #. name for pye msgid "Krumen; Pye" -msgstr "" +msgstr "Krumen; Pye" #. name for pym msgid "Fyam" -msgstr "" +msgstr "Fyam" #. name for pyn msgid "Poyanáwa" -msgstr "" +msgstr "Poyanáwa" #. name for pys msgid "Paraguayan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Paraguay" #. name for pyu msgid "Puyuma" -msgstr "" +msgstr "Puyuma" #. name for pyx msgid "Pyu (Myanmar)" -msgstr "" +msgstr "Pyu (Myanmar)" #. name for pyy msgid "Pyen" -msgstr "" +msgstr "Pyen" #. name for pzn msgid "Naga; Para" -msgstr "" +msgstr "Naga; Para" #. name for qua msgid "Quapaw" -msgstr "" +msgstr "Quapaw" #. name for qub msgid "Quechua; Huallaga Huánuco" -msgstr "" +msgstr "Quechua; Huallaga Huánuco" #. name for quc msgid "K'iche'" -msgstr "" +msgstr "K'iche'" #. name for qud msgid "Quichua; Calderón Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Calderón" #. name for que msgid "Quechua" -msgstr "" +msgstr "Quechua" #. name for quf msgid "Quechua; Lambayeque" -msgstr "" +msgstr "Quechua; Lambayeque" #. name for qug msgid "Quichua; Chimborazo Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Chimborazo" #. name for quh msgid "Quechua; South Bolivian" -msgstr "" +msgstr "Quechua; Bolivia Selatan" #. name for qui msgid "Quileute" -msgstr "" +msgstr "Quileute" #. name for quk msgid "Quechua; Chachapoyas" -msgstr "" +msgstr "Quechua; Chachapoyas" #. name for qul msgid "Quechua; North Bolivian" -msgstr "" +msgstr "Quechua; Bolivia Utara" #. name for qum msgid "Sipacapense" -msgstr "" +msgstr "Sipacapense" #. name for qun msgid "Quinault" -msgstr "" +msgstr "Quinault" #. name for qup msgid "Quechua; Southern Pastaza" -msgstr "" +msgstr "Quechua; Pastaza Selatan" #. name for quq msgid "Quinqui" -msgstr "" +msgstr "Quinqui" #. name for qur msgid "Quechua; Yanahuanca Pasco" -msgstr "" +msgstr "Quechua; Yanahuanca Pasco" #. name for qus msgid "Quichua; Santiago del Estero" -msgstr "" +msgstr "Quichua; Santiago del Estero" #. name for quv msgid "Sacapulteco" -msgstr "" +msgstr "Sacapulteco" #. name for quw msgid "Quichua; Tena Lowland" -msgstr "" +msgstr "Quichua; Tanah Rendah Tena" #. name for qux msgid "Quechua; Yauyos" -msgstr "" +msgstr "Quechua; Yauyos" #. name for quy msgid "Quechua; Ayacucho" -msgstr "" +msgstr "Quechua; Ayacucho" #. name for quz msgid "Quechua; Cusco" -msgstr "" +msgstr "Quechua; Cusco" #. name for qva msgid "Quechua; Ambo-Pasco" -msgstr "" +msgstr "Quechua; Ambo-Pasco" #. name for qvc msgid "Quechua; Cajamarca" -msgstr "" +msgstr "Quechua; Cajamarca" #. name for qve msgid "Quechua; Eastern Apurímac" -msgstr "" +msgstr "Quechua; Apurímac Timur" #. name for qvh msgid "Quechua; Huamalíes-Dos de Mayo Huánuco" -msgstr "" +msgstr "Quechua; Huamalíes-Dos de Mayo Huánuco" #. name for qvi msgid "Quichua; Imbabura Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Imbabura" #. name for qvj msgid "Quichua; Loja Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Loja" #. name for qvl msgid "Quechua; Cajatambo North Lima" -msgstr "" +msgstr "Quechua; Cajatambo North Lima" #. name for qvm msgid "Quechua; Margos-Yarowilca-Lauricocha" -msgstr "" +msgstr "Quechua; Margos-Yarowilca-Lauricocha" #. name for qvn msgid "Quechua; North Junín" -msgstr "" +msgstr "Quechua; Junín Utara" #. name for qvo msgid "Quechua; Napo Lowland" -msgstr "" +msgstr "Quechua; Tanah Rendah Napo" #. name for qvp msgid "Quechua; Pacaraos" -msgstr "" +msgstr "Quechua; Pacaraos" #. name for qvs msgid "Quechua; San Martín" -msgstr "" +msgstr "Quechua; San Martín" #. name for qvw msgid "Quechua; Huaylla Wanca" -msgstr "" +msgstr "Quechua; Huaylla Wanca" #. name for qvy msgid "Queyu" -msgstr "" +msgstr "Queyu" #. name for qvz msgid "Quichua; Northern Pastaza" -msgstr "" +msgstr "Quechua; Pastaza Utara" #. name for qwa msgid "Quechua; Corongo Ancash" -msgstr "" +msgstr "Quechua; Corongo Ancash" #. name for qwc msgid "Quechua; Classical" -msgstr "" +msgstr "Quechua; Klasik" #. name for qwh msgid "Quechua; Huaylas Ancash" -msgstr "" +msgstr "Quechua; Huaylas Ancash" #. name for qwm msgid "Kuman (Russia)" -msgstr "" +msgstr "Kuman (Rusia)" #. name for qws msgid "Quechua; Sihuas Ancash" -msgstr "" +msgstr "Quechua; Sihuas Ancash" #. name for qwt msgid "Kwalhioqua-Tlatskanai" -msgstr "" +msgstr "Kwalhioqua-Tlatskanai" #. name for qxa msgid "Quechua; Chiquián Ancash" -msgstr "" +msgstr "Quechua; Chiquián Ancash" #. name for qxc msgid "Quechua; Chincha" -msgstr "" +msgstr "Quechua; Chincha" #. name for qxh msgid "Quechua; Panao Huánuco" -msgstr "" +msgstr "Quechua; Panao Huánuco" #. name for qxl msgid "Quichua; Salasaca Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Salasaca" #. name for qxn msgid "Quechua; Northern Conchucos Ancash" -msgstr "" +msgstr "Quechua; Conchucos Ancash Utara" #. name for qxo msgid "Quechua; Southern Conchucos Ancash" -msgstr "" +msgstr "Quechua; Conchucos Ancash Selatan" #. name for qxp msgid "Quechua; Puno" -msgstr "" +msgstr "Quechua; Puno" #. name for qxq msgid "Qashqa'i" -msgstr "" +msgstr "Qashqa'i" #. name for qxr msgid "Quichua; Cañar Highland" -msgstr "" +msgstr "Quichua; Tanah Tinggi Cañar" #. name for qxs msgid "Qiang; Southern" -msgstr "" +msgstr "Qiang; Selatan" #. name for qxt msgid "Quechua; Santa Ana de Tusi Pasco" -msgstr "" +msgstr "Quechua; Santa Ana de Tusi Pasco" #. name for qxu msgid "Quechua; Arequipa-La Unión" -msgstr "" +msgstr "Quechua; Arequipa-La Unión" #. name for qxw msgid "Quechua; Jauja Wanca" -msgstr "" +msgstr "Quechua; Jauja Wanca" #. name for qya msgid "Quenya" -msgstr "" +msgstr "Quenya" #. name for qyp msgid "Quiripi" -msgstr "" +msgstr "Quiripi" #. name for raa msgid "Dungmali" -msgstr "" +msgstr "Dungmali" #. name for rab msgid "Camling" -msgstr "" +msgstr "Camling" #. name for rac msgid "Rasawa" -msgstr "" +msgstr "Rasawa" #. name for rad msgid "Rade" -msgstr "" +msgstr "Rade" #. name for raf msgid "Meohang; Western" -msgstr "" +msgstr "Meohang; Barat" #. name for rag msgid "Logooli" -msgstr "" +msgstr "Logooli" #. name for rah msgid "Rabha" -msgstr "" +msgstr "Rabha" #. name for rai msgid "Ramoaaina" -msgstr "" +msgstr "Ramoaaina" #. name for raj msgid "Rajasthani" -msgstr "" +msgstr "Rajasthani" #. name for rak msgid "Tulu-Bohuai" -msgstr "" +msgstr "Tulu-Bohuai" #. name for ral msgid "Ralte" -msgstr "" +msgstr "Ralte" #. name for ram msgid "Canela" -msgstr "" +msgstr "Canela" #. name for ran msgid "Riantana" -msgstr "" +msgstr "Riantana" #. name for rao msgid "Rao" -msgstr "" +msgstr "Rao" #. name for rap msgid "Rapanui" -msgstr "" +msgstr "Rapanui" #. name for raq msgid "Saam" -msgstr "" +msgstr "Saam" #. name for rar msgid "Maori; Cook Islands" -msgstr "" +msgstr "Maori; Kepulauan Cook" #. name for ras msgid "Tegali" -msgstr "" +msgstr "Tegali" #. name for rat msgid "Razajerdi" -msgstr "" +msgstr "Razajerdi" #. name for rau msgid "Raute" -msgstr "" +msgstr "Raute" #. name for rav msgid "Sampang" -msgstr "" +msgstr "Sampang" #. name for raw msgid "Rawang" -msgstr "" +msgstr "Rawang" #. name for rax msgid "Rang" -msgstr "" +msgstr "Rang" #. name for ray msgid "Rapa" -msgstr "" +msgstr "Rapa" #. name for raz msgid "Rahambuu" -msgstr "" +msgstr "Rahambuu" #. name for rbb msgid "Palaung; Rumai" -msgstr "" +msgstr "Palaung; Rumai" #. name for rbk msgid "Bontok; Northern" -msgstr "" +msgstr "Bontok; Utara" #. name for rbl msgid "Bikol; Miraya" -msgstr "" +msgstr "Bikol; Miraya" #. name for rcf msgid "Creole French; Réunion" -msgstr "" +msgstr "Perancis Creole; Réunion" #. name for rdb msgid "Rudbari" -msgstr "" +msgstr "Rudbari" #. name for rea msgid "Rerau" -msgstr "" +msgstr "Rerau" #. name for reb msgid "Rembong" -msgstr "" +msgstr "Rembong" #. name for ree msgid "Kayan; Rejang" -msgstr "" +msgstr "Kayan; Rejang" #. name for reg msgid "Kara (Tanzania)" -msgstr "" +msgstr "Kara (Tanzania)" #. name for rei msgid "Reli" -msgstr "" +msgstr "Reli" #. name for rej msgid "Rejang" -msgstr "" +msgstr "Rejang" #. name for rel msgid "Rendille" -msgstr "" +msgstr "Rendille" #. name for rem msgid "Remo" -msgstr "" +msgstr "Remo" #. name for ren msgid "Rengao" -msgstr "" +msgstr "Rengao" #. name for rer msgid "Rer Bare" -msgstr "" +msgstr "Rer Bare" #. name for res msgid "Reshe" -msgstr "" +msgstr "Reshe" #. name for ret msgid "Retta" -msgstr "" +msgstr "Retta" #. name for rey msgid "Reyesano" -msgstr "" +msgstr "Reyesano" #. name for rga msgid "Roria" -msgstr "" +msgstr "Roria" #. name for rge msgid "Romano-Greek" -msgstr "" +msgstr "Romano-Greek" #. name for rgk msgid "Rangkas" -msgstr "" +msgstr "Rangkas" #. name for rgn msgid "Romagnol" -msgstr "" +msgstr "Romagnol" #. name for rgr msgid "Resígaro" -msgstr "" +msgstr "Resígaro" #. name for rgs msgid "Roglai; Southern" -msgstr "" +msgstr "Roglai; Selatan" #. name for rgu msgid "Ringgou" -msgstr "" +msgstr "Ringgou" #. name for rhg msgid "Rohingya" -msgstr "" +msgstr "Rohingya" #. name for rhp msgid "Yahang" -msgstr "" +msgstr "Yahang" #. name for ria msgid "Riang (India)" -msgstr "" +msgstr "Riang (India)" #. name for rie msgid "Rien" -msgstr "" +msgstr "Rien" #. name for rif msgid "Tarifit" -msgstr "" +msgstr "Tarifit" #. name for ril msgid "Riang (Myanmar)" -msgstr "" +msgstr "Riang (Myanmar)" #. name for rim msgid "Nyaturu" -msgstr "" +msgstr "Nyaturu" #. name for rin msgid "Nungu" -msgstr "" +msgstr "Nungu" #. name for rir msgid "Ribun" -msgstr "" +msgstr "Ribun" #. name for rit msgid "Ritarungo" -msgstr "" +msgstr "Ritarungo" #. name for riu msgid "Riung" -msgstr "" +msgstr "Riung" #. name for rjg msgid "Rajong" -msgstr "" +msgstr "Rajong" #. name for rji msgid "Raji" -msgstr "" +msgstr "Raji" #. name for rjs msgid "Rajbanshi" -msgstr "" +msgstr "Rajbanshi" #. name for rka msgid "Kraol" -msgstr "" +msgstr "Kraol" #. name for rkb msgid "Rikbaktsa" -msgstr "" +msgstr "Rikbaktsa" #. name for rkh msgid "Rakahanga-Manihiki" -msgstr "" +msgstr "Rakahanga-Manihiki" #. name for rki msgid "Rakhine" -msgstr "" +msgstr "Rakhine" #. name for rkm msgid "Marka" -msgstr "" +msgstr "Marka" #. name for rkt msgid "Rangpuri" -msgstr "" +msgstr "Rangpuri" #. name for rma msgid "Rama" -msgstr "" +msgstr "Rama" #. name for rmb msgid "Rembarunga" -msgstr "" +msgstr "Rembarunga" #. name for rmc msgid "Romani; Carpathian" -msgstr "" +msgstr "Romani; Carpathian" #. name for rmd msgid "Danish; Traveller" -msgstr "" +msgstr "Danish; Traveller" #. name for rme msgid "Angloromani" -msgstr "" +msgstr "Angloromani" #. name for rmf msgid "Romani; Kalo Finnish" -msgstr "" +msgstr "Romani; Kalo Finnish" #. name for rmg msgid "Norwegian; Traveller" -msgstr "" +msgstr "Norway; Traveller" #. name for rmh msgid "Murkim" -msgstr "" +msgstr "Murkim" #. name for rmi msgid "Lomavren" -msgstr "" +msgstr "Lomavren" #. name for rmk msgid "Romkun" -msgstr "" +msgstr "Romkun" #. name for rml msgid "Romani; Baltic" -msgstr "" +msgstr "Romani; Baltic" #. name for rmm msgid "Roma" -msgstr "" +msgstr "Roma" #. name for rmn msgid "Romani; Balkan" -msgstr "" +msgstr "Romani; Balkan" #. name for rmo msgid "Romani; Sinte" -msgstr "" +msgstr "Romani; Sinte" #. name for rmp msgid "Rempi" -msgstr "" +msgstr "Rempi" #. name for rmq msgid "Caló" -msgstr "" +msgstr "Caló" #. name for rms msgid "Romanian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Romania" #. name for rmt msgid "Domari" -msgstr "" +msgstr "Domari" #. name for rmu msgid "Romani; Tavringer" -msgstr "" +msgstr "Romani; Tavringer" #. name for rmv msgid "Romanova" -msgstr "" +msgstr "Romanova" #. name for rmw msgid "Romani; Welsh" -msgstr "" +msgstr "Romani; Welsh" #. name for rmx msgid "Romam" -msgstr "" +msgstr "Romam" #. name for rmy msgid "Romani; Vlax" -msgstr "" +msgstr "Romani; Vlax" #. name for rmz msgid "Marma" -msgstr "" +msgstr "Marma" #. name for rna msgid "Runa" -msgstr "" +msgstr "Runa" #. name for rnd msgid "Ruund" -msgstr "" +msgstr "Ruund" #. name for rng msgid "Ronga" -msgstr "" +msgstr "Ronga" #. name for rnl msgid "Ranglong" -msgstr "" +msgstr "Ranglong" #. name for rnn msgid "Roon" -msgstr "" +msgstr "Roon" #. name for rnp msgid "Rongpo" -msgstr "" +msgstr "Rongpo" #. name for rnw msgid "Rungwa" -msgstr "" +msgstr "Rungwa" #. name for rob msgid "Tae'" -msgstr "" +msgstr "Tae'" #. name for roc msgid "Roglai; Cacgia" -msgstr "" +msgstr "Roglai; Cacgia" #. name for rod msgid "Rogo" -msgstr "" +msgstr "Rogo" #. name for roe msgid "Ronji" -msgstr "" +msgstr "Ronji" #. name for rof msgid "Rombo" -msgstr "" +msgstr "Rombo" #. name for rog msgid "Roglai; Northern" -msgstr "" +msgstr "Roglai; Utara" #. name for roh msgid "Romansh" -msgstr "" +msgstr "Romansh" #. name for rol msgid "Romblomanon" -msgstr "" +msgstr "Romblomanon" #. name for rom msgid "Romany" -msgstr "" +msgstr "Romany" # ui/galeon.glade.h:272 #. name for ron @@ -22231,111 +22231,111 @@ msgstr "Romanian" #. name for roo msgid "Rotokas" -msgstr "" +msgstr "Rotokas" #. name for rop msgid "Kriol" -msgstr "" +msgstr "Kriol" #. name for ror msgid "Rongga" -msgstr "" +msgstr "Rongga" #. name for rou msgid "Runga" -msgstr "" +msgstr "Runga" #. name for row msgid "Dela-Oenale" -msgstr "" +msgstr "Dela-Oenale" #. name for rpn msgid "Repanbitip" -msgstr "" +msgstr "Repanbitip" #. name for rpt msgid "Rapting" -msgstr "" +msgstr "Rapting" #. name for rri msgid "Ririo" -msgstr "" +msgstr "Ririo" #. name for rro msgid "Waima" -msgstr "" +msgstr "Waima" #. name for rsb msgid "Romano-Serbian" -msgstr "" +msgstr "Roman-Serbia" #. name for rsi msgid "Rennellese Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Rennellese" #. name for rsl msgid "Russian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Rusia" #. name for rth msgid "Ratahan" -msgstr "" +msgstr "Ratahan" #. name for rtm msgid "Rotuman" -msgstr "" +msgstr "Rotuman" #. name for rtw msgid "Rathawi" -msgstr "" +msgstr "Rathawi" #. name for rub msgid "Gungu" -msgstr "" +msgstr "Gungu" #. name for ruc msgid "Ruuli" -msgstr "" +msgstr "Ruuli" #. name for rue msgid "Rusyn" -msgstr "" +msgstr "Rusyn" #. name for ruf msgid "Luguru" -msgstr "" +msgstr "Luguru" #. name for rug msgid "Roviana" -msgstr "" +msgstr "Roviana" #. name for ruh msgid "Ruga" -msgstr "" +msgstr "Ruga" #. name for rui msgid "Rufiji" -msgstr "" +msgstr "Rufiji" #. name for ruk msgid "Che" -msgstr "" +msgstr "Che" #. name for run msgid "Rundi" -msgstr "" +msgstr "Rundi" #. name for ruo msgid "Romanian; Istro" -msgstr "" +msgstr "Romania; Istro" #. name for rup msgid "Romanian; Macedo-" -msgstr "" +msgstr "Romania; Macedo-" #. name for ruq msgid "Romanian; Megleno" -msgstr "" +msgstr "Romania; Megleno" # ui/galeon.glade.h:273 #. name for rus @@ -22344,983 +22344,983 @@ msgstr "Russian" #. name for rut msgid "Rutul" -msgstr "" +msgstr "Rutul" #. name for ruu msgid "Lobu; Lanas" -msgstr "" +msgstr "Lobu; Lanas" #. name for ruy msgid "Mala (Nigeria)" -msgstr "" +msgstr "Mala (Nigeria)" #. name for ruz msgid "Ruma" -msgstr "" +msgstr "Ruma" #. name for rwa msgid "Rawo" -msgstr "" +msgstr "Rawo" #. name for rwk msgid "Rwa" -msgstr "" +msgstr "Rwa" #. name for rwm msgid "Amba (Uganda)" -msgstr "" +msgstr "Amba (Uganda)" #. name for rwo msgid "Rawa" -msgstr "" +msgstr "Rawa" #. name for rwr msgid "Marwari (India)" -msgstr "" +msgstr "Marwari (India)" #. name for ryn msgid "Amami-Oshima; Northern" -msgstr "" +msgstr "Amami-Oshima; Northern" #. name for rys msgid "Yaeyama" -msgstr "" +msgstr "Yaeyama" #. name for ryu msgid "Okinawan; Central" -msgstr "" +msgstr "Okinawa; Tengah" #. name for saa msgid "Saba" -msgstr "" +msgstr "Saba" #. name for sab msgid "Buglere" -msgstr "" +msgstr "Buglere" #. name for sac msgid "Meskwaki" -msgstr "" +msgstr "Meskwaki" #. name for sad msgid "Sandawe" -msgstr "" +msgstr "Sandawe" #. name for sae msgid "Sabanê" -msgstr "" +msgstr "Sabanê" #. name for saf msgid "Safaliba" -msgstr "" +msgstr "Safaliba" #. name for sag msgid "Sango" -msgstr "" +msgstr "Sango" #. name for sah msgid "Yakut" -msgstr "" +msgstr "Yakut" #. name for saj msgid "Sahu" -msgstr "" +msgstr "Sahu" #. name for sak msgid "Sake" -msgstr "" +msgstr "Sake" #. name for sam msgid "Aramaic; Samaritan" -msgstr "" +msgstr "Aramik; Samaritan" #. name for san msgid "Sanskrit" -msgstr "" +msgstr "Sanskrit" #. name for sao msgid "Sause" -msgstr "" +msgstr "Sause" #. name for sap msgid "Sanapaná" -msgstr "" +msgstr "Sanapaná" #. name for saq msgid "Samburu" -msgstr "" +msgstr "Samburu" #. name for sar msgid "Saraveca" -msgstr "" +msgstr "Saraveca" #. name for sas msgid "Sasak" -msgstr "" +msgstr "Sasak" #. name for sat msgid "Santali" -msgstr "" +msgstr "Santali" #. name for sau msgid "Saleman" -msgstr "" +msgstr "Saleman" #. name for sav msgid "Saafi-Saafi" -msgstr "" +msgstr "Saafi-Saafi" #. name for saw msgid "Sawi" -msgstr "" +msgstr "Sawi" #. name for sax msgid "Sa" -msgstr "" +msgstr "Sa" #. name for say msgid "Saya" -msgstr "" +msgstr "Saya" #. name for saz msgid "Saurashtra" -msgstr "" +msgstr "Saurashtra" #. name for sba msgid "Ngambay" -msgstr "" +msgstr "Ngambay" #. name for sbb msgid "Simbo" -msgstr "" +msgstr "Simbo" #. name for sbc msgid "Kele (Papua New Guinea)" -msgstr "" +msgstr "Kele (Papua New Guinea)" #. name for sbd msgid "Samo; Southern" -msgstr "" +msgstr "Sama; Selatan" #. name for sbe msgid "Saliba" -msgstr "" +msgstr "Saliba" #. name for sbf msgid "Shabo" -msgstr "" +msgstr "Shabo" #. name for sbg msgid "Seget" -msgstr "" +msgstr "Seget" #. name for sbh msgid "Sori-Harengan" -msgstr "" +msgstr "Sori-Harengan" #. name for sbi msgid "Seti" -msgstr "" +msgstr "Seti" #. name for sbj msgid "Surbakhal" -msgstr "" +msgstr "Surbakhal" #. name for sbk msgid "Safwa" -msgstr "" +msgstr "Safwa" #. name for sbl msgid "Sambal; Botolan" -msgstr "" +msgstr "Sambal; Botolan" #. name for sbm msgid "Sagala" -msgstr "" +msgstr "Sagala" #. name for sbn msgid "Bhil; Sindhi" -msgstr "" +msgstr "Bhil; Sindhi" #. name for sbo msgid "Sabüm" -msgstr "" +msgstr "Sabüm" #. name for sbp msgid "Sangu (Tanzania)" -msgstr "" +msgstr "Sangu (Tanzania)" #. name for sbq msgid "Sileibi" -msgstr "" +msgstr "Sileibi" #. name for sbr msgid "Sembakung Murut" -msgstr "" +msgstr "Sembakung Murut" #. name for sbs msgid "Subiya" -msgstr "" +msgstr "Subiya" #. name for sbt msgid "Kimki" -msgstr "" +msgstr "Kimki" #. name for sbu msgid "Bhoti; Stod" -msgstr "" +msgstr "Bhoti; Stod" #. name for sbv msgid "Sabine" -msgstr "" +msgstr "Sabine" #. name for sbw msgid "Simba" -msgstr "" +msgstr "Simba" #. name for sbx msgid "Seberuang" -msgstr "" +msgstr "Seberuang" #. name for sby msgid "Soli" -msgstr "" +msgstr "Soli" #. name for sbz msgid "Sara Kaba" -msgstr "" +msgstr "Sara Kaba" #. name for sca msgid "Sansu" -msgstr "" +msgstr "Sansu" #. name for scb msgid "Chut" -msgstr "" +msgstr "Chut" #. name for sce msgid "Dongxiang" -msgstr "" +msgstr "Dongxiang" #. name for scf msgid "Creole French; San Miguel" -msgstr "" +msgstr "Perancis Creole; San Miguel" #. name for scg msgid "Sanggau" -msgstr "" +msgstr "Sanggau" #. name for sch msgid "Sakachep" -msgstr "" +msgstr "Sakachep" #. name for sci msgid "Creole Malay; Sri Lankan" -msgstr "" +msgstr "Melayu Creole; Sri Lanka" #. name for sck msgid "Sadri" -msgstr "" +msgstr "Sadri" #. name for scl msgid "Shina" -msgstr "" +msgstr "Shina" #. name for scn msgid "Sicilian" -msgstr "" +msgstr "Sicily" #. name for sco msgid "Scots" -msgstr "" +msgstr "Scots" #. name for scp msgid "Helambu Sherpa" -msgstr "" +msgstr "Helambu Sherpa" #. name for scq msgid "Sa'och" -msgstr "" +msgstr "Sa'och" #. name for scs msgid "Slavey; North" -msgstr "" +msgstr "Slavey; Utara" #. name for scu msgid "Shumcho" -msgstr "" +msgstr "Shumcho" #. name for scv msgid "Sheni" -msgstr "" +msgstr "Sheni" #. name for scw msgid "Sha" -msgstr "" +msgstr "Sha" #. name for scx msgid "Sicel" -msgstr "" +msgstr "Sicel" #. name for sda msgid "Toraja-Sa'dan" -msgstr "" +msgstr "Toraja-Sa'dan" #. name for sdb msgid "Shabak" -msgstr "" +msgstr "Shabak" #. name for sdc msgid "Sardinian; Sassarese" -msgstr "" +msgstr "Sardini; Sassarese" #. name for sde msgid "Surubu" -msgstr "" +msgstr "Surubu" #. name for sdf msgid "Sarli" -msgstr "" +msgstr "Sarli" #. name for sdg msgid "Savi" -msgstr "" +msgstr "Savi" #. name for sdh msgid "Kurdish; Southern" -msgstr "" +msgstr "Kurdis; Selatan" #. name for sdj msgid "Suundi" -msgstr "" +msgstr "Suundi" #. name for sdk msgid "Sos Kundi" -msgstr "" +msgstr "Sos Kundi" #. name for sdl msgid "Saudi Arabian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Arab Saudi" #. name for sdm msgid "Semandang" -msgstr "" +msgstr "Semandang" #. name for sdn msgid "Sardinian; Gallurese" -msgstr "" +msgstr "Sardini; Gallurese" #. name for sdo msgid "Bidayuh; Bukar-Sadung" -msgstr "" +msgstr "Bidayuh; Bukar-Sadung" #. name for sdp msgid "Sherdukpen" -msgstr "" +msgstr "Sherdukpen" #. name for sdr msgid "Sadri; Oraon" -msgstr "" +msgstr "Sadri; Oraon" #. name for sds msgid "Sened" -msgstr "" +msgstr "Sened" #. name for sdt msgid "Shuadit" -msgstr "" +msgstr "Shuadit" #. name for sdu msgid "Sarudu" -msgstr "" +msgstr "Sarudu" #. name for sdx msgid "Melanau; Sibu" -msgstr "" +msgstr "Melanau; Sibu" #. name for sdz msgid "Sallands" -msgstr "" +msgstr "Sallands" #. name for sea msgid "Semai" -msgstr "" +msgstr "Semai" #. name for seb msgid "Senoufo; Shempire" -msgstr "" +msgstr "Senoufo; Shempire" #. name for sec msgid "Sechelt" -msgstr "" +msgstr "Sechelt" #. name for sed msgid "Sedang" -msgstr "" +msgstr "Sedang" #. name for see msgid "Seneca" -msgstr "" +msgstr "Seneca" #. name for sef msgid "Senoufo; Cebaara" -msgstr "" +msgstr "Senoufo; Cebaara" #. name for seg msgid "Segeju" -msgstr "" +msgstr "Segeju" #. name for seh msgid "Sena" -msgstr "" +msgstr "Sena" #. name for sei msgid "Seri" -msgstr "" +msgstr "Seri" #. name for sej msgid "Sene" -msgstr "" +msgstr "Sene" #. name for sek msgid "Sekani" -msgstr "" +msgstr "Sekani" #. name for sel msgid "Selkup" -msgstr "" +msgstr "Selkup" #. name for sen msgid "Sénoufo; Nanerigé" -msgstr "" +msgstr "Sénoufo; Nanerigé" #. name for seo msgid "Suarmin" -msgstr "" +msgstr "Suarmin" #. name for sep msgid "Sénoufo; Sìcìté" -msgstr "" +msgstr "Sénoufo; Sìcìté" #. name for seq msgid "Sénoufo; Senara" -msgstr "" +msgstr "Sénoufo; Senara" #. name for ser msgid "Serrano" -msgstr "" +msgstr "Serrano" #. name for ses msgid "Songhai; Koyraboro Senni" -msgstr "" +msgstr "Songhai; Koyraboro Senni" #. name for set msgid "Sentani" -msgstr "" +msgstr "Sentani" #. name for seu msgid "Serui-Laut" -msgstr "" +msgstr "Serui-Laut" #. name for sev msgid "Senoufo; Nyarafolo" -msgstr "" +msgstr "Senoufo; Nyarafolo" #. name for sew msgid "Sewa Bay" -msgstr "" +msgstr "Sewa Bay" #. name for sey msgid "Secoya" -msgstr "" +msgstr "Secoya" #. name for sez msgid "Chin; Senthang" -msgstr "" +msgstr "Chin; Senthang" #. name for sfb msgid "Langue des signes de Belgique Francophone" -msgstr "" +msgstr "Langue des signes de Belgique Francophone" #. name for sfm msgid "Miao; Small Flowery" -msgstr "" +msgstr "Miao; Flowery Kecil" #. name for sfs msgid "South African Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Afrika Selatan" #. name for sfw msgid "Sehwi" -msgstr "" +msgstr "Sehwi" #. name for sga msgid "Irish; Old (to 900)" -msgstr "" +msgstr "Ireland; Purba (sehingga 900)" #. name for sgb msgid "Ayta; Mag-antsi" -msgstr "" +msgstr "Ayta; Mag-antsi" #. name for sgc msgid "Kipsigis" -msgstr "" +msgstr "Kipsigis" #. name for sgd msgid "Surigaonon" -msgstr "" +msgstr "Surigaonon" #. name for sge msgid "Segai" -msgstr "" +msgstr "Segai" #. name for sgg msgid "Swiss-German Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Jerman-Swiss" #. name for sgh msgid "Shughni" -msgstr "" +msgstr "Shughni" #. name for sgi msgid "Suga" -msgstr "" +msgstr "Suga" #. name for sgk msgid "Sangkong" -msgstr "" +msgstr "Sangkong" #. name for sgm msgid "Singa" -msgstr "" +msgstr "Singa" #. name for sgo msgid "Songa" -msgstr "" +msgstr "Songa" #. name for sgp msgid "Singpho" -msgstr "" +msgstr "Singpho" #. name for sgr msgid "Sangisari" -msgstr "" +msgstr "Sangisari" #. name for sgs msgid "Samogitian" -msgstr "" +msgstr "Samogitian" #. name for sgt msgid "Brokpake" -msgstr "" +msgstr "Brokpake" #. name for sgu msgid "Salas" -msgstr "" +msgstr "Salas" #. name for sgw msgid "Sebat Bet Gurage" -msgstr "" +msgstr "Sebat Bet Gurage" #. name for sgx msgid "Sierra Leone Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Sierra Leone" #. name for sgy msgid "Sanglechi" -msgstr "" +msgstr "Sanglechi" #. name for sgz msgid "Sursurunga" -msgstr "" +msgstr "Sursurunga" #. name for sha msgid "Shall-Zwall" -msgstr "" +msgstr "Shall-Zwall" #. name for shb msgid "Ninam" -msgstr "" +msgstr "Ninam" #. name for shc msgid "Sonde" -msgstr "" +msgstr "Sonde" #. name for shd msgid "Kundal Shahi" -msgstr "" +msgstr "Kundal Shahi" #. name for she msgid "Sheko" -msgstr "" +msgstr "Sheko" #. name for shg msgid "Shua" -msgstr "" +msgstr "Shua" #. name for shh msgid "Shoshoni" -msgstr "" +msgstr "Shoshoni" #. name for shi msgid "Tachelhit" -msgstr "" +msgstr "Tachelhit" #. name for shj msgid "Shatt" -msgstr "" +msgstr "Shatt" #. name for shk msgid "Shilluk" -msgstr "" +msgstr "Shilluk" #. name for shl msgid "Shendu" -msgstr "" +msgstr "Shendu" #. name for shm msgid "Shahrudi" -msgstr "" +msgstr "Shahrudi" #. name for shn msgid "Shan" -msgstr "" +msgstr "Shan" #. name for sho msgid "Shanga" -msgstr "" +msgstr "Shanga" #. name for shp msgid "Shipibo-Conibo" -msgstr "" +msgstr "Shipibo-Conibo" #. name for shq msgid "Sala" -msgstr "" +msgstr "Sala" #. name for shr msgid "Shi" -msgstr "" +msgstr "Shi" #. name for shs msgid "Shuswap" -msgstr "" +msgstr "Shuswap" #. name for sht msgid "Shasta" -msgstr "" +msgstr "Shasta" #. name for shu msgid "Arabic; Chadian" -msgstr "" +msgstr "Arab; Chad" #. name for shv msgid "Shehri" -msgstr "" +msgstr "Shehri" #. name for shw msgid "Shwai" -msgstr "" +msgstr "Shwai" #. name for shx msgid "She" -msgstr "" +msgstr "She" #. name for shy msgid "Tachawit" -msgstr "" +msgstr "Tachawit" #. name for shz msgid "Senoufo; Syenara" -msgstr "" +msgstr "Senoufo; Syenara" #. name for sia msgid "Sami; Akkala" -msgstr "" +msgstr "Sami; Akkala" #. name for sib msgid "Sebop" -msgstr "" +msgstr "Sebop" #. name for sid msgid "Sidamo" -msgstr "" +msgstr "Sidamo" #. name for sie msgid "Simaa" -msgstr "" +msgstr "Simaa" #. name for sif msgid "Siamou" -msgstr "" +msgstr "Siamou" #. name for sig msgid "Paasaal" -msgstr "" +msgstr "Paasaal" #. name for sih msgid "Zire" -msgstr "" +msgstr "Zire" #. name for sii msgid "Shom Peng" -msgstr "" +msgstr "Shom Peng" #. name for sij msgid "Numbami" -msgstr "" +msgstr "Numbami" #. name for sik msgid "Sikiana" -msgstr "" +msgstr "Sikiana" #. name for sil msgid "Sisaala; Tumulung" -msgstr "" +msgstr "Sisaala; Tumulung" #. name for sim msgid "Mende (Papua New Guinea)" -msgstr "" +msgstr "Mende (Papua New Guinea)" #. name for sin msgid "Sinhala" -msgstr "" +msgstr "Sinhala" #. name for sip msgid "Sikkimese" -msgstr "" +msgstr "Sikkim" #. name for siq msgid "Sonia" -msgstr "" +msgstr "Sonia" #. name for sir msgid "Siri" -msgstr "" +msgstr "Siri" #. name for sis msgid "Siuslaw" -msgstr "" +msgstr "Siuslaw" #. name for siu msgid "Sinagen" -msgstr "" +msgstr "Sinagen" #. name for siv msgid "Sumariup" -msgstr "" +msgstr "Sumariup" #. name for siw msgid "Siwai" -msgstr "" +msgstr "Siwai" #. name for six msgid "Sumau" -msgstr "" +msgstr "Sumau" #. name for siy msgid "Sivandi" -msgstr "" +msgstr "Sivandi" #. name for siz msgid "Siwi" -msgstr "" +msgstr "Siwi" #. name for sja msgid "Epena" -msgstr "" +msgstr "Epena" #. name for sjb msgid "Sajau Basap" -msgstr "" +msgstr "Sajau Basap" #. name for sjd msgid "Sami; Kildin" -msgstr "" +msgstr "Sami; Kildin" #. name for sje msgid "Sami; Pite" -msgstr "" +msgstr "Sami; Pite" #. name for sjg msgid "Assangori" -msgstr "" +msgstr "Assangori" #. name for sjk msgid "Sami; Kemi" -msgstr "" +msgstr "Sami; Kemi" #. name for sjl msgid "Sajalong" -msgstr "" +msgstr "Sajalong" #. name for sjm msgid "Mapun" -msgstr "" +msgstr "Mapun" #. name for sjn msgid "Sindarin" -msgstr "" +msgstr "Sindarin" #. name for sjo msgid "Xibe" -msgstr "" +msgstr "Xibe" #. name for sjp msgid "Surjapuri" -msgstr "" +msgstr "Surjapuri" #. name for sjr msgid "Siar-Lak" -msgstr "" +msgstr "Siar-Lak" #. name for sjs msgid "Senhaja De Srair" -msgstr "" +msgstr "Senhaja De Srair" #. name for sjt msgid "Sami; Ter" -msgstr "" +msgstr "Sami; Ter" #. name for sju msgid "Sami; Ume" -msgstr "" +msgstr "Sami; Ume" #. name for sjw msgid "Shawnee" -msgstr "" +msgstr "Shawnee" #. name for ska msgid "Skagit" -msgstr "" +msgstr "Skagit" #. name for skb msgid "Saek" -msgstr "" +msgstr "Saek" #. name for skc msgid "Sauk" -msgstr "" +msgstr "Sauk" #. name for skd msgid "Miwok; Southern Sierra" -msgstr "" +msgstr "Miwok; Sierra Selatan" #. name for ske msgid "Seke (Vanuatu)" -msgstr "" +msgstr "Seke (Vanuatu)" #. name for skf msgid "Sakirabiá" -msgstr "" +msgstr "Sakirabiá" #. name for skg msgid "Malagasy; Sakalava" -msgstr "" +msgstr "Malagasy; Sakalava" #. name for skh msgid "Sikule" -msgstr "" +msgstr "Sikule" #. name for ski msgid "Sika" -msgstr "" +msgstr "Sika" #. name for skj msgid "Seke (Nepal)" -msgstr "" +msgstr "Seke (Nepal)" #. name for skk msgid "Sok" -msgstr "" +msgstr "Sok" #. name for skm msgid "Sakam" -msgstr "" +msgstr "Sakam" #. name for skn msgid "Subanon; Kolibugan" -msgstr "" +msgstr "Subanon; Kolibugan" #. name for sko msgid "Seko Tengah" -msgstr "" +msgstr "Seko Tengah" #. name for skp msgid "Sekapan" -msgstr "" +msgstr "Sekapan" #. name for skq msgid "Sininkere" -msgstr "" +msgstr "Sininkere" #. name for skr msgid "Seraiki" -msgstr "" +msgstr "Seraiki" #. name for sks msgid "Maia" -msgstr "" +msgstr "Maia" #. name for skt msgid "Sakata" -msgstr "" +msgstr "Sakata" #. name for sku msgid "Sakao" -msgstr "" +msgstr "Sakao" #. name for skv msgid "Skou" -msgstr "" +msgstr "Skou" #. name for skw msgid "Creole Dutch; Skepi" -msgstr "" +msgstr "Creole Dutch; Skepi" #. name for skx msgid "Seko Padang" -msgstr "" +msgstr "Seko Padang" #. name for sky msgid "Sikaiana" -msgstr "" +msgstr "Sikaiana" #. name for skz msgid "Sekar" -msgstr "" +msgstr "Sekar" #. name for slc msgid "Sáliba" -msgstr "" +msgstr "Sáliba" #. name for sld msgid "Sissala" -msgstr "" +msgstr "Sissala" #. name for sle msgid "Sholaga" -msgstr "" +msgstr "Sholaga" #. name for slf msgid "Swiss-Italian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Itali-Swiss" #. name for slg msgid "Selungai Murut" -msgstr "" +msgstr "Selungai Murut" #. name for slh msgid "Salish; Southern Puget Sound" -msgstr "" +msgstr "Salish; Puget Sound Selatan" #. name for sli msgid "Silesian; Lower" -msgstr "" +msgstr "Silesian; Bawah" #. name for slj msgid "Salumá" -msgstr "" +msgstr "Salumá" #. name for slk msgid "Slovak" @@ -23328,39 +23328,39 @@ msgstr "Slovak" #. name for sll msgid "Salt-Yui" -msgstr "" +msgstr "Salt-Yui" #. name for slm msgid "Sama; Pangutaran" -msgstr "" +msgstr "Sama; Pangutaran" #. name for sln msgid "Salinan" -msgstr "" +msgstr "Salinan" #. name for slp msgid "Lamaholot" -msgstr "" +msgstr "Lamaholot" #. name for slq msgid "Salchuq" -msgstr "" +msgstr "Salchuq" #. name for slr msgid "Salar" -msgstr "" +msgstr "Salar" #. name for sls msgid "Singapore Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Singapura" #. name for slt msgid "Sila" -msgstr "" +msgstr "Sila" #. name for slu msgid "Selaru" -msgstr "" +msgstr "Selaru" #. name for slv msgid "Slovenian" @@ -23368,315 +23368,315 @@ msgstr "Slovenian" #. name for slw msgid "Sialum" -msgstr "" +msgstr "Sialum" #. name for slx msgid "Salampasu" -msgstr "" +msgstr "Salampasu" #. name for sly msgid "Selayar" -msgstr "" +msgstr "Selayar" #. name for slz msgid "Ma'ya" -msgstr "" +msgstr "Ma'ya" #. name for sma msgid "Sami; Southern" -msgstr "" +msgstr "Sami; Selatan" #. name for smb msgid "Simbari" -msgstr "" +msgstr "Simbari" #. name for smc msgid "Som" -msgstr "" +msgstr "Som" #. name for smd msgid "Sama" -msgstr "" +msgstr "Sama" #. name for sme msgid "Sami; Northern" -msgstr "" +msgstr "Sami; Utara" #. name for smf msgid "Auwe" -msgstr "" +msgstr "Auwe" #. name for smg msgid "Simbali" -msgstr "" +msgstr "Simbali" #. name for smh msgid "Samei" -msgstr "" +msgstr "Samei" #. name for smj msgid "Lule Sami" -msgstr "" +msgstr "Lule Sami" #. name for smk msgid "Bolinao" -msgstr "" +msgstr "Bolinao" #. name for sml msgid "Sama; Central" -msgstr "" +msgstr "Sama; Tengah" #. name for smm msgid "Musasa" -msgstr "" +msgstr "Musasa" #. name for smn msgid "Sami; Inari" -msgstr "" +msgstr "Sami; Inari" #. name for smo msgid "Samoan" -msgstr "" +msgstr "Samoan" #. name for smp msgid "Samaritan" -msgstr "" +msgstr "Samaritan" #. name for smq msgid "Samo" -msgstr "" +msgstr "Samo" #. name for smr msgid "Simeulue" -msgstr "" +msgstr "Simeulue" #. name for sms msgid "Sami; Skolt" -msgstr "" +msgstr "Sami; Skolt" #. name for smt msgid "Simte" -msgstr "" +msgstr "Simte" #. name for smu msgid "Somray" -msgstr "" +msgstr "Somray" #. name for smv msgid "Samvedi" -msgstr "" +msgstr "Samvedi" #. name for smw msgid "Sumbawa" -msgstr "" +msgstr "Sumbawa" #. name for smx msgid "Samba" -msgstr "" +msgstr "Samba" #. name for smy msgid "Semnani" -msgstr "" +msgstr "Semnani" #. name for smz msgid "Simeku" -msgstr "" +msgstr "Simeku" #. name for sna msgid "Shona" -msgstr "" +msgstr "Shona" #. name for snb msgid "Sebuyau" -msgstr "" +msgstr "Sebuyau" #. name for snc msgid "Sinaugoro" -msgstr "" +msgstr "Sinaugoro" #. name for snd msgid "Sindhi" -msgstr "" +msgstr "Sindhi" #. name for sne msgid "Bidayuh; Bau" -msgstr "" +msgstr "Bidayuh; Bau" #. name for snf msgid "Noon" -msgstr "" +msgstr "Noon" #. name for sng msgid "Sanga (Democratic Republic of Congo)" -msgstr "" +msgstr "Sanga (Republik Democratik Congo)" #. name for snh msgid "Shinabo" -msgstr "" +msgstr "Shinabo" #. name for sni msgid "Sensi" -msgstr "" +msgstr "Sensi" #. name for snj msgid "Sango; Riverain" -msgstr "" +msgstr "Sango; Riverain" #. name for snk msgid "Soninke" -msgstr "" +msgstr "Soninke" #. name for snl msgid "Sangil" -msgstr "" +msgstr "Sangil" #. name for snm msgid "Ma'di; Southern" -msgstr "" +msgstr "Ma'di; Selatan" #. name for snn msgid "Siona" -msgstr "" +msgstr "Siona" #. name for sno msgid "Snohomish" -msgstr "" +msgstr "Snohomish" #. name for snp msgid "Siane" -msgstr "" +msgstr "Siane" #. name for snq msgid "Sangu (Gabon)" -msgstr "" +msgstr "Sangu (Gabon)" #. name for snr msgid "Sihan" -msgstr "" +msgstr "Sihan" #. name for sns msgid "South West Bay" -msgstr "" +msgstr "South West Bay" #. name for snu msgid "Senggi" -msgstr "" +msgstr "Senggi" #. name for snv msgid "Sa'ban" -msgstr "" +msgstr "Sa'ban" #. name for snw msgid "Selee" -msgstr "" +msgstr "Selee" #. name for snx msgid "Sam" -msgstr "" +msgstr "Sam" #. name for sny msgid "Saniyo-Hiyewe" -msgstr "" +msgstr "Saniyo-Hiyewe" #. name for snz msgid "Sinsauru" -msgstr "" +msgstr "Sinsauru" #. name for soa msgid "Thai Song" -msgstr "" +msgstr "Thai Song" #. name for sob msgid "Sobei" -msgstr "" +msgstr "Sobei" #. name for soc msgid "So (Democratic Republic of Congo)" -msgstr "" +msgstr "So (Republik Democratik Congo)" #. name for sod msgid "Songoora" -msgstr "" +msgstr "Songoora" #. name for soe msgid "Songomeno" -msgstr "" +msgstr "Songomeno" #. name for sog msgid "Sogdian" -msgstr "" +msgstr "Sogdian" #. name for soh msgid "Aka" -msgstr "" +msgstr "Aka" #. name for soi msgid "Sonha" -msgstr "" +msgstr "Sonha" #. name for soj msgid "Soi" -msgstr "" +msgstr "Soi" #. name for sok msgid "Sokoro" -msgstr "" +msgstr "Sokoro" #. name for sol msgid "Solos" -msgstr "" +msgstr "Solos" #. name for som msgid "Somali" -msgstr "" +msgstr "Somali" #. name for soo msgid "Songo" -msgstr "" +msgstr "Songo" #. name for sop msgid "Songe" -msgstr "" +msgstr "Songe" #. name for soq msgid "Kanasi" -msgstr "" +msgstr "Kanasi" #. name for sor msgid "Somrai" -msgstr "" +msgstr "Somrai" #. name for sos msgid "Seeku" -msgstr "" +msgstr "Seeku" #. name for sot msgid "Sotho; Southern" -msgstr "" +msgstr "Sotho; Selatan" #. name for sou msgid "Thai; Southern" -msgstr "" +msgstr "Siam; Selatan" #. name for sov msgid "Sonsorol" -msgstr "" +msgstr "Sonsorol" #. name for sow msgid "Sowanda" -msgstr "" +msgstr "Sowanda" #. name for sox msgid "So (Cameroon)" -msgstr "" +msgstr "So (Cameroon)" #. name for soy msgid "Miyobe" -msgstr "" +msgstr "Miyobe" #. name for soz msgid "Temi" -msgstr "" +msgstr "Temi" #. name for spa msgid "Spanish" @@ -23684,83 +23684,83 @@ msgstr "Spanish" #. name for spb msgid "Sepa (Indonesia)" -msgstr "" +msgstr "Sepa (Indonesia)" #. name for spc msgid "Sapé" -msgstr "" +msgstr "Sapé" #. name for spd msgid "Saep" -msgstr "" +msgstr "Saep" #. name for spe msgid "Sepa (Papua New Guinea)" -msgstr "" +msgstr "Sepa (Papua New Guinea)" #. name for spg msgid "Sian" -msgstr "" +msgstr "Sian" #. name for spi msgid "Saponi" -msgstr "" +msgstr "Saponi" #. name for spk msgid "Sengo" -msgstr "" +msgstr "Sengo" #. name for spl msgid "Selepet" -msgstr "" +msgstr "Selepet" #. name for spm msgid "Sepen" -msgstr "" +msgstr "Sepen" #. name for spo msgid "Spokane" -msgstr "" +msgstr "Spokane" #. name for spp msgid "Senoufo; Supyire" -msgstr "" +msgstr "Senoufo; Supyire" #. name for spq msgid "Spanish; Loreto-Ucayali" -msgstr "" +msgstr "Spanish; Loreto-Ucayali" #. name for spr msgid "Saparua" -msgstr "" +msgstr "Saparua" #. name for sps msgid "Saposa" -msgstr "" +msgstr "Saposa" #. name for spt msgid "Bhoti; Spiti" -msgstr "" +msgstr "Bhoti; Spiti" #. name for spu msgid "Sapuan" -msgstr "" +msgstr "Sapuan" #. name for spx msgid "Picene; South" -msgstr "" +msgstr "Picene; Selatan" #. name for spy msgid "Sabaot" -msgstr "" +msgstr "Sabaot" #. name for sqa msgid "Shama-Sambuga" -msgstr "" +msgstr "Shama-Sambuga" #. name for sqh msgid "Shau" -msgstr "" +msgstr "Shau" #. name for sqi msgid "Albanian" @@ -23768,91 +23768,91 @@ msgstr "Albanian" #. name for sqm msgid "Suma" -msgstr "" +msgstr "Suma" #. name for sqn msgid "Susquehannock" -msgstr "" +msgstr "Susquehannock" #. name for sqo msgid "Sorkhei" -msgstr "" +msgstr "Sorkhei" #. name for sqq msgid "Sou" -msgstr "" +msgstr "Sou" #. name for sqr msgid "Arabic; Siculo" -msgstr "" +msgstr "Arab; Siculo" #. name for sqs msgid "Sri Lankan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Sri Lanka" #. name for sqt msgid "Soqotri" -msgstr "" +msgstr "Soqotri" #. name for squ msgid "Squamish" -msgstr "" +msgstr "Squamish" #. name for sra msgid "Saruga" -msgstr "" +msgstr "Saruga" #. name for srb msgid "Sora" -msgstr "" +msgstr "Sora" #. name for src msgid "Sardinian; Logudorese" -msgstr "" +msgstr "Sardini; Logudor" #. name for srd msgid "Sardinian" -msgstr "" +msgstr "Sardini" #. name for sre msgid "Sara" -msgstr "" +msgstr "Sara" #. name for srf msgid "Nafi" -msgstr "" +msgstr "Nafi" #. name for srg msgid "Sulod" -msgstr "" +msgstr "Sulod" #. name for srh msgid "Sarikoli" -msgstr "" +msgstr "Sarikoli" #. name for sri msgid "Siriano" -msgstr "" +msgstr "Siriano" #. name for srk msgid "Serudung Murut" -msgstr "" +msgstr "Serudung Murut" #. name for srl msgid "Isirawa" -msgstr "" +msgstr "Isirawa" #. name for srm msgid "Saramaccan" -msgstr "" +msgstr "Saramaccan" #. name for srn msgid "Sranan Tongo" -msgstr "" +msgstr "Sranan Tongo" #. name for sro msgid "Sardinian; Campidanese" -msgstr "" +msgstr "Sardini; Campidan" #. name for srp msgid "Serbian" @@ -23860,347 +23860,347 @@ msgstr "Serbian" #. name for srq msgid "Sirionó" -msgstr "" +msgstr "Sirionó" #. name for srr msgid "Serer" -msgstr "" +msgstr "Serer" #. name for srs msgid "Sarsi" -msgstr "" +msgstr "Sarsi" #. name for srt msgid "Sauri" -msgstr "" +msgstr "Sauri" #. name for sru msgid "Suruí" -msgstr "" +msgstr "Suruí" #. name for srv msgid "Sorsoganon; Southern" -msgstr "" +msgstr "Sorsoganon; Selatan" #. name for srw msgid "Serua" -msgstr "" +msgstr "Serua" #. name for srx msgid "Sirmauri" -msgstr "" +msgstr "Sirmauri" #. name for sry msgid "Sera" -msgstr "" +msgstr "Sera" #. name for srz msgid "Shahmirzadi" -msgstr "" +msgstr "Shahmirzadi" #. name for ssb msgid "Sama; Southern" -msgstr "" +msgstr "Sama; Selatan" #. name for ssc msgid "Suba-Simbiti" -msgstr "" +msgstr "Suba-Simbiti" #. name for ssd msgid "Siroi" -msgstr "" +msgstr "Siroi" #. name for sse msgid "Sama; Bangingih" -msgstr "" +msgstr "Sama; Bangingih" #. name for ssf msgid "Thao" -msgstr "" +msgstr "Thao" #. name for ssg msgid "Seimat" -msgstr "" +msgstr "Seimat" #. name for ssh msgid "Arabic; Shihhi" -msgstr "" +msgstr "Arab; Shihhi" #. name for ssi msgid "Sansi" -msgstr "" +msgstr "Sansi" #. name for ssj msgid "Sausi" -msgstr "" +msgstr "Sausi" #. name for ssk msgid "Sunam" -msgstr "" +msgstr "Sunam" #. name for ssl msgid "Sisaala; Western" -msgstr "" +msgstr "Sisaala; Barat" #. name for ssm msgid "Semnam" -msgstr "" +msgstr "Semnam" #. name for ssn msgid "Waata" -msgstr "" +msgstr "Waata" #. name for sso msgid "Sissano" -msgstr "" +msgstr "Sissano" #. name for ssp msgid "Spanish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Sepanyol" #. name for ssq msgid "So'a" -msgstr "" +msgstr "So'a" #. name for ssr msgid "Swiss-French Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Perancis-Swiss" #. name for sss msgid "Sô" -msgstr "" +msgstr "Sô" #. name for sst msgid "Sinasina" -msgstr "" +msgstr "Sinasina" #. name for ssu msgid "Susuami" -msgstr "" +msgstr "Susuami" #. name for ssv msgid "Shark Bay" -msgstr "" +msgstr "Shark Bay" #. name for ssw msgid "Swati" -msgstr "" +msgstr "Swati" #. name for ssx msgid "Samberigi" -msgstr "" +msgstr "Samberigi" #. name for ssy msgid "Saho" -msgstr "" +msgstr "Saho" #. name for ssz msgid "Sengseng" -msgstr "" +msgstr "Sengseng" #. name for sta msgid "Settla" -msgstr "" +msgstr "Settla" #. name for stb msgid "Subanen; Northern" -msgstr "" +msgstr "Subanen; Utara" #. name for std msgid "Sentinel" -msgstr "" +msgstr "Sentinel" #. name for ste msgid "Liana-Seti" -msgstr "" +msgstr "Liana-Seti" #. name for stf msgid "Seta" -msgstr "" +msgstr "Seta" #. name for stg msgid "Trieng" -msgstr "" +msgstr "Trieng" #. name for sth msgid "Shelta" -msgstr "" +msgstr "Shelta" #. name for sti msgid "Stieng; Bulo" -msgstr "" +msgstr "Stieng; Bulo" #. name for stj msgid "Samo; Matya" -msgstr "" +msgstr "Samo; Matya" #. name for stk msgid "Arammba" -msgstr "" +msgstr "Arammba" #. name for stl msgid "Stellingwerfs" -msgstr "" +msgstr "Stellingwerfs" #. name for stm msgid "Setaman" -msgstr "" +msgstr "Setaman" #. name for stn msgid "Owa" -msgstr "" +msgstr "Owa" #. name for sto msgid "Stoney" -msgstr "" +msgstr "Stoney" #. name for stp msgid "Tepehuan; Southeastern" -msgstr "" +msgstr "Tepehuan; Tenggara" #. name for stq msgid "Saterfriesisch" -msgstr "" +msgstr "Saterfriesisch" #. name for str msgid "Salish; Straits" -msgstr "" +msgstr "Salish; Straits" #. name for sts msgid "Shumashti" -msgstr "" +msgstr "Shumashti" #. name for stt msgid "Stieng; Budeh" -msgstr "" +msgstr "Stieng; Budeh" #. name for stu msgid "Samtao" -msgstr "" +msgstr "Samtao" #. name for stv msgid "Silt'e" -msgstr "" +msgstr "Silt'e" #. name for stw msgid "Satawalese" -msgstr "" +msgstr "Satawalese" #. name for sua msgid "Sulka" -msgstr "" +msgstr "Sulka" #. name for sub msgid "Suku" -msgstr "" +msgstr "Suku" #. name for suc msgid "Subanon; Western" -msgstr "" +msgstr "Subanon; Barat" #. name for sue msgid "Suena" -msgstr "" +msgstr "Suena" #. name for sug msgid "Suganga" -msgstr "" +msgstr "Suganga" #. name for sui msgid "Suki" -msgstr "" +msgstr "Suki" #. name for suj msgid "Shubi" -msgstr "" +msgstr "Shubi" #. name for suk msgid "Sukuma" -msgstr "" +msgstr "Sukuma" #. name for sun msgid "Sundanese" -msgstr "" +msgstr "Sunda" #. name for suq msgid "Suri" -msgstr "" +msgstr "Suri" #. name for sur msgid "Mwaghavul" -msgstr "" +msgstr "Mwaghavul" #. name for sus msgid "Susu" -msgstr "" +msgstr "Susu" #. name for sut msgid "Subtiaba" -msgstr "" +msgstr "Subtiaba" #. name for suv msgid "Sulung" -msgstr "" +msgstr "Sulung" #. name for suw msgid "Sumbwa" -msgstr "" +msgstr "Sumbwa" #. name for sux msgid "Sumerian" -msgstr "" +msgstr "Sumerian" #. name for suy msgid "Suyá" -msgstr "" +msgstr "Suyá" #. name for suz msgid "Sunwar" -msgstr "" +msgstr "Sunwar" #. name for sva msgid "Svan" -msgstr "" +msgstr "Svan" #. name for svb msgid "Ulau-Suain" -msgstr "" +msgstr "Ulau-Suain" #. name for svc msgid "Creole English; Vincentian" -msgstr "" +msgstr "Inggeris Creole; Vincent" #. name for sve msgid "Serili" -msgstr "" +msgstr "Serili" #. name for svk msgid "Slovakian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Slovak" #. name for svr msgid "Savara" -msgstr "" +msgstr "Savara" #. name for svs msgid "Savosavo" -msgstr "" +msgstr "Savosavo" #. name for svx msgid "Skalvian" -msgstr "" +msgstr "Skalvia" #. name for swa msgid "Swahili (macrolanguage)" -msgstr "" +msgstr "Swahili (bahasa makro)" #. name for swb msgid "Comorian; Maore" -msgstr "" +msgstr "Comorian; Maore" #. name for swc msgid "Swahili; Congo" -msgstr "" +msgstr "Swahili; Congo" #. name for swe msgid "Swedish" @@ -24208,819 +24208,819 @@ msgstr "Swedish" #. name for swf msgid "Sere" -msgstr "" +msgstr "Sere" #. name for swg msgid "Swabian" -msgstr "" +msgstr "Swabi" #. name for swh msgid "Swahili (individual language)" -msgstr "" +msgstr "Swahili (bahasa individu)" #. name for swi msgid "Sui" -msgstr "" +msgstr "Sui" #. name for swj msgid "Sira" -msgstr "" +msgstr "Sira" #. name for swk msgid "Sena; Malawi" -msgstr "" +msgstr "Sena; Malawi" #. name for swl msgid "Swedish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Sweden" #. name for swm msgid "Samosa" -msgstr "" +msgstr "Samosa" #. name for swn msgid "Sawknah" -msgstr "" +msgstr "Sawknah" #. name for swo msgid "Shanenawa" -msgstr "" +msgstr "Shanenawa" #. name for swp msgid "Suau" -msgstr "" +msgstr "Suau" #. name for swq msgid "Sharwa" -msgstr "" +msgstr "Sharwa" #. name for swr msgid "Saweru" -msgstr "" +msgstr "Saweru" #. name for sws msgid "Seluwasan" -msgstr "" +msgstr "Seluwasan" #. name for swt msgid "Sawila" -msgstr "" +msgstr "Sawila" #. name for swu msgid "Suwawa" -msgstr "" +msgstr "Suwawa" #. name for swv msgid "Shekhawati" -msgstr "" +msgstr "Shekhawati" #. name for sww msgid "Sowa" -msgstr "" +msgstr "Sowa" #. name for swx msgid "Suruahá" -msgstr "" +msgstr "Suruahá" #. name for swy msgid "Sarua" -msgstr "" +msgstr "Sarua" #. name for sxb msgid "Suba" -msgstr "" +msgstr "Suba" #. name for sxc msgid "Sicanian" -msgstr "" +msgstr "Sicanian" #. name for sxe msgid "Sighu" -msgstr "" +msgstr "Sighu" #. name for sxg msgid "Shixing" -msgstr "" +msgstr "Shixing" #. name for sxk msgid "Kalapuya; Southern" -msgstr "" +msgstr "Kalapuya; Selatan" #. name for sxl msgid "Selian" -msgstr "" +msgstr "Selian" #. name for sxm msgid "Samre" -msgstr "" +msgstr "Samre" #. name for sxn msgid "Sangir" -msgstr "" +msgstr "Sangir" #. name for sxo msgid "Sorothaptic" -msgstr "" +msgstr "Sorothaptic" #. name for sxr msgid "Saaroa" -msgstr "" +msgstr "Saaroa" #. name for sxs msgid "Sasaru" -msgstr "" +msgstr "Sasaru" #. name for sxu msgid "Saxon; Upper" -msgstr "" +msgstr "Saxon; Atas" #. name for sxw msgid "Gbe; Saxwe" -msgstr "" +msgstr "Gbe; Saxwe" #. name for sya msgid "Siang" -msgstr "" +msgstr "Siang" #. name for syb msgid "Subanen; Central" -msgstr "" +msgstr "Subanen; Tengah" #. name for syc msgid "Syriac; Classical" -msgstr "" +msgstr "Syriak; Klasik" #. name for syi msgid "Seki" -msgstr "" +msgstr "Seki" #. name for syk msgid "Sukur" -msgstr "" +msgstr "Sukur" #. name for syl msgid "Sylheti" -msgstr "" +msgstr "Sylheti" #. name for sym msgid "Samo; Maya" -msgstr "" +msgstr "Samo; Maya" #. name for syn msgid "Senaya" -msgstr "" +msgstr "Senaya" #. name for syo msgid "Suoy" -msgstr "" +msgstr "Suoy" #. name for syr msgid "Syriac" -msgstr "" +msgstr "Syriac" #. name for sys msgid "Sinyar" -msgstr "" +msgstr "Sinyar" #. name for syw msgid "Kagate" -msgstr "" +msgstr "Kagate" #. name for syy msgid "Al-Sayyid Bedouin Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Badwi Al-Sayyid" #. name for sza msgid "Semelai" -msgstr "" +msgstr "Semelai" #. name for szb msgid "Ngalum" -msgstr "" +msgstr "Ngalum" #. name for szc msgid "Semaq Beri" -msgstr "" +msgstr "Semaq Beri" #. name for szd msgid "Seru" -msgstr "" +msgstr "Seru" #. name for sze msgid "Seze" -msgstr "" +msgstr "Seze" #. name for szg msgid "Sengele" -msgstr "" +msgstr "Sengele" #. name for szl msgid "Silesian" -msgstr "" +msgstr "Silesian" #. name for szn msgid "Sula" -msgstr "" +msgstr "Sula" #. name for szp msgid "Suabo" -msgstr "" +msgstr "Suabo" #. name for szv msgid "Isu (Fako Division)" -msgstr "" +msgstr "Isu (Fako Division)" #. name for szw msgid "Sawai" -msgstr "" +msgstr "Sawai" #. name for taa msgid "Tanana; Lower" -msgstr "" +msgstr "Tanana; Bawah" #. name for tab msgid "Tabassaran" -msgstr "" +msgstr "Tabassaran" #. name for tac msgid "Tarahumara; Lowland" -msgstr "" +msgstr "Tarahumara; Tanah Rendah" #. name for tad msgid "Tause" -msgstr "" +msgstr "Tause" #. name for tae msgid "Tariana" -msgstr "" +msgstr "Tariana" #. name for taf msgid "Tapirapé" -msgstr "" +msgstr "Tapirapé" #. name for tag msgid "Tagoi" -msgstr "" +msgstr "Tagoi" #. name for tah msgid "Tahitian" -msgstr "" +msgstr "Tahiti" #. name for taj msgid "Tamang; Eastern" -msgstr "" +msgstr "Tamang; Timur" #. name for tak msgid "Tala" -msgstr "" +msgstr "Tala" #. name for tal msgid "Tal" -msgstr "" +msgstr "Tal" #. name for tam msgid "Tamil" -msgstr "" +msgstr "Tamil" #. name for tan msgid "Tangale" -msgstr "" +msgstr "Tangale" #. name for tao msgid "Yami" -msgstr "" +msgstr "Yami" #. name for tap msgid "Taabwa" -msgstr "" +msgstr "Taabwa" #. name for taq msgid "Tamasheq" -msgstr "" +msgstr "Tamasheq" #. name for tar msgid "Tarahumara; Central" -msgstr "" +msgstr "Tarahumara; Tengah" #. name for tas msgid "Tay Boi" -msgstr "" +msgstr "Tay Boi" #. name for tat msgid "Tatar" -msgstr "" +msgstr "Tatar" #. name for tau msgid "Tanana; Upper" -msgstr "" +msgstr "Tanana; Atas" #. name for tav msgid "Tatuyo" -msgstr "" +msgstr "Tatuyo" #. name for taw msgid "Tai" -msgstr "" +msgstr "Tai" #. name for tax msgid "Tamki" -msgstr "" +msgstr "Tamki" #. name for tay msgid "Atayal" -msgstr "" +msgstr "Atayal" #. name for taz msgid "Tocho" -msgstr "" +msgstr "Tocho" #. name for tba msgid "Aikanã" -msgstr "" +msgstr "Aikanã" #. name for tbb msgid "Tapeba" -msgstr "" +msgstr "Tapeba" #. name for tbc msgid "Takia" -msgstr "" +msgstr "Takia" #. name for tbd msgid "Kaki Ae" -msgstr "" +msgstr "Kaki Ae" #. name for tbe msgid "Tanimbili" -msgstr "" +msgstr "Tanimbili" #. name for tbf msgid "Mandara" -msgstr "" +msgstr "Mandara" #. name for tbg msgid "Tairora; North" -msgstr "" +msgstr "Tairora; Utara" #. name for tbh msgid "Thurawal" -msgstr "" +msgstr "Thurawal" #. name for tbi msgid "Gaam" -msgstr "" +msgstr "Gaam" #. name for tbj msgid "Tiang" -msgstr "" +msgstr "Tiang" #. name for tbk msgid "Tagbanwa; Calamian" -msgstr "" +msgstr "Tagbanwa; Calami" #. name for tbl msgid "Tboli" -msgstr "" +msgstr "Tboli" #. name for tbm msgid "Tagbu" -msgstr "" +msgstr "Tagbu" #. name for tbn msgid "Tunebo; Barro Negro" -msgstr "" +msgstr "Tunebo; Barro Negro" #. name for tbo msgid "Tawala" -msgstr "" +msgstr "Tawala" #. name for tbp msgid "Taworta" -msgstr "" +msgstr "Taworta" #. name for tbr msgid "Tumtum" -msgstr "" +msgstr "Tumtum" #. name for tbs msgid "Tanguat" -msgstr "" +msgstr "Tanguat" #. name for tbt msgid "Tembo (Kitembo)" -msgstr "" +msgstr "Tembo (Kitembo)" #. name for tbu msgid "Tubar" -msgstr "" +msgstr "Tubar" #. name for tbv msgid "Tobo" -msgstr "" +msgstr "Tobo" #. name for tbw msgid "Tagbanwa" -msgstr "" +msgstr "Tagbanwa" #. name for tbx msgid "Kapin" -msgstr "" +msgstr "Kapin" #. name for tby msgid "Tabaru" -msgstr "" +msgstr "Tabaru" #. name for tbz msgid "Ditammari" -msgstr "" +msgstr "Ditammari" #. name for tca msgid "Ticuna" -msgstr "" +msgstr "Ticuna" #. name for tcb msgid "Tanacross" -msgstr "" +msgstr "Tanacross" #. name for tcc msgid "Datooga" -msgstr "" +msgstr "Datooga" #. name for tcd msgid "Tafi" -msgstr "" +msgstr "Tafi" #. name for tce msgid "Tutchone; Southern" -msgstr "" +msgstr "Tutchone; Selatan" #. name for tcf msgid "Tlapanec; Malinaltepec" -msgstr "" +msgstr "Tlapanec; Malinaltepec" #. name for tcg msgid "Tamagario" -msgstr "" +msgstr "Tamagario" #. name for tch msgid "Creole English; Turks And Caicos" -msgstr "" +msgstr "Inggeris Creole; Turki Dan Caicos" #. name for tci msgid "Wára" -msgstr "" +msgstr "Wára" #. name for tck msgid "Tchitchege" -msgstr "" +msgstr "Tchitchege" #. name for tcl msgid "Taman (Myanmar)" -msgstr "" +msgstr "Taman (Myanmar)" #. name for tcm msgid "Tanahmerah" -msgstr "" +msgstr "Tanahmerah" #. name for tcn msgid "Tichurong" -msgstr "" +msgstr "Tichurong" #. name for tco msgid "Taungyo" -msgstr "" +msgstr "Taungyo" #. name for tcp msgid "Chin; Tawr" -msgstr "" +msgstr "Chin; Tawr" #. name for tcq msgid "Kaiy" -msgstr "" +msgstr "Kaiy" #. name for tcs msgid "Creole; Torres Strait" -msgstr "" +msgstr "Creole; Torres Strait" #. name for tct msgid "T'en" -msgstr "" +msgstr "T'en" #. name for tcu msgid "Tarahumara; Southeastern" -msgstr "" +msgstr "Tarahumara; Tenggara" #. name for tcw msgid "Totonac; Tecpatlán" -msgstr "" +msgstr "Totonac; Tecpatlán" #. name for tcx msgid "Toda" -msgstr "" +msgstr "Toda" #. name for tcy msgid "Tulu" -msgstr "" +msgstr "Tulu" #. name for tcz msgid "Chin; Thado" -msgstr "" +msgstr "Chin; Thado" #. name for tda msgid "Tagdal" -msgstr "" +msgstr "Tagdal" #. name for tdb msgid "Panchpargania" -msgstr "" +msgstr "Panchpargania" #. name for tdc msgid "Emberá-Tadó" -msgstr "" +msgstr "Emberá-Tadó" #. name for tdd msgid "Tai Nüa" -msgstr "" +msgstr "Tai Nüa" #. name for tde msgid "Dogon; Tiranige Diga" -msgstr "" +msgstr "Dogon; Tiranige Diga" #. name for tdf msgid "Talieng" -msgstr "" +msgstr "Talieng" #. name for tdg msgid "Tamang; Western" -msgstr "" +msgstr "Tamang; Barat" #. name for tdh msgid "Thulung" -msgstr "" +msgstr "Thulung" #. name for tdi msgid "Tomadino" -msgstr "" +msgstr "Tomadino" #. name for tdj msgid "Tajio" -msgstr "" +msgstr "Tajio" #. name for tdk msgid "Tambas" -msgstr "" +msgstr "Tambas" #. name for tdl msgid "Sur" -msgstr "" +msgstr "Sur" #. name for tdn msgid "Tondano" -msgstr "" +msgstr "Tondano" #. name for tdo msgid "Teme" -msgstr "" +msgstr "Teme" #. name for tdq msgid "Tita" -msgstr "" +msgstr "Tita" #. name for tdr msgid "Todrah" -msgstr "" +msgstr "Todrah" #. name for tds msgid "Doutai" -msgstr "" +msgstr "Doutai" #. name for tdt msgid "Tetun Dili" -msgstr "" +msgstr "Tetun Dili" #. name for tdu msgid "Dusun; Tempasuk" -msgstr "" +msgstr "Dusun; Tempasuk" #. name for tdv msgid "Toro" -msgstr "" +msgstr "Toro" #. name for tdx msgid "Malagasy; Tandroy-Mahafaly" -msgstr "" +msgstr "Malagasy; Tandroy-Mahafaly" #. name for tdy msgid "Tadyawan" -msgstr "" +msgstr "Tadyawan" #. name for tea msgid "Temiar" -msgstr "" +msgstr "Temiar" #. name for teb msgid "Tetete" -msgstr "" +msgstr "Tetete" #. name for tec msgid "Terik" -msgstr "" +msgstr "Terik" #. name for ted msgid "Krumen; Tepo" -msgstr "" +msgstr "Krumen; Tepo" #. name for tee msgid "Tepehua; Huehuetla" -msgstr "" +msgstr "Tepehua; Huehuetla" #. name for tef msgid "Teressa" -msgstr "" +msgstr "Teressa" #. name for teg msgid "Teke-Tege" -msgstr "" +msgstr "Teke-Tege" #. name for teh msgid "Tehuelche" -msgstr "" +msgstr "Tehuelche" #. name for tei msgid "Torricelli" -msgstr "" +msgstr "Torricelli" #. name for tek msgid "Teke; Ibali" -msgstr "" +msgstr "Teke; Ibali" #. name for tel msgid "Telugu" -msgstr "" +msgstr "Telugu" #. name for tem msgid "Timne" -msgstr "" +msgstr "Timne" #. name for ten msgid "Tama (Colombia)" -msgstr "" +msgstr "Tama (Colombia)" #. name for teo msgid "Teso" -msgstr "" +msgstr "Teso" #. name for tep msgid "Tepecano" -msgstr "" +msgstr "Tepecano" #. name for teq msgid "Temein" -msgstr "" +msgstr "Temein" #. name for ter msgid "Tereno" -msgstr "" +msgstr "Tereno" #. name for tes msgid "Tengger" -msgstr "" +msgstr "Tengger" #. name for tet msgid "Tetum" -msgstr "" +msgstr "Tetum" #. name for teu msgid "Soo" -msgstr "" +msgstr "Soo" #. name for tev msgid "Teor" -msgstr "" +msgstr "Teor" #. name for tew msgid "Tewa (USA)" -msgstr "" +msgstr "Tewa (USA)" #. name for tex msgid "Tennet" -msgstr "" +msgstr "Tennet" #. name for tey msgid "Tulishi" -msgstr "" +msgstr "Tulishi" #. name for tfi msgid "Gbe; Tofin" -msgstr "" +msgstr "Gbe; Tofin" #. name for tfn msgid "Tanaina" -msgstr "" +msgstr "Tanaina" #. name for tfo msgid "Tefaro" -msgstr "" +msgstr "Tefaro" #. name for tfr msgid "Teribe" -msgstr "" +msgstr "Teribe" #. name for tft msgid "Ternate" -msgstr "" +msgstr "Ternate" #. name for tga msgid "Sagalla" -msgstr "" +msgstr "Sagalla" #. name for tgb msgid "Tobilung" -msgstr "" +msgstr "Tobilung" #. name for tgc msgid "Tigak" -msgstr "" +msgstr "Tigak" #. name for tgd msgid "Ciwogai" -msgstr "" +msgstr "Ciwogai" #. name for tge msgid "Tamang; Eastern Gorkha" -msgstr "" +msgstr "Tamang; Gorkha Selatan" #. name for tgf msgid "Chalikha" -msgstr "" +msgstr "Chalikha" #. name for tgg msgid "Tangga" -msgstr "" +msgstr "Tangga" #. name for tgh msgid "Creole English; Tobagonian" -msgstr "" +msgstr "Inggeris Creole; Tobago" #. name for tgi msgid "Lawunuia" -msgstr "" +msgstr "Lawunuia" #. name for tgk msgid "Tajik" -msgstr "" +msgstr "Tajik" #. name for tgl msgid "Tagalog" -msgstr "" +msgstr "Tagalog" #. name for tgn msgid "Tandaganon" -msgstr "" +msgstr "Tandaganon" #. name for tgo msgid "Sudest" -msgstr "" +msgstr "Sudest" #. name for tgp msgid "Tangoa" -msgstr "" +msgstr "Tangoa" #. name for tgq msgid "Tring" -msgstr "" +msgstr "Tring" #. name for tgr msgid "Tareng" -msgstr "" +msgstr "Tareng" #. name for tgs msgid "Nume" -msgstr "" +msgstr "Nume" #. name for tgt msgid "Tagbanwa; Central" -msgstr "" +msgstr "Tagbanwa; Tengah" #. name for tgu msgid "Tanggu" -msgstr "" +msgstr "Tanggu" #. name for tgv msgid "Tingui-Boto" -msgstr "" +msgstr "Tingui-Boto" #. name for tgw msgid "Senoufo; Tagwana" -msgstr "" +msgstr "Senoufo; Tagwana" #. name for tgx msgid "Tagish" -msgstr "" +msgstr "Tagish" #. name for tgy msgid "Togoyo" -msgstr "" +msgstr "Togoyo" #. name for tha msgid "Thai" @@ -25028,1171 +25028,1171 @@ msgstr "Thai" #. name for thc msgid "Tai Hang Tong" -msgstr "" +msgstr "Tai Hang Tong" #. name for thd msgid "Thayore" -msgstr "" +msgstr "Thayore" #. name for the msgid "Tharu; Chitwania" -msgstr "" +msgstr "Tharu; Chitwania" #. name for thf msgid "Thangmi" -msgstr "" +msgstr "Thangmi" #. name for thh msgid "Tarahumara; Northern" -msgstr "" +msgstr "Tarahumara; Northern" #. name for thi msgid "Tai Long" -msgstr "" +msgstr "Tai Long" #. name for thk msgid "Tharaka" -msgstr "" +msgstr "Tharaka" #. name for thl msgid "Tharu; Dangaura" -msgstr "" +msgstr "Tharu; Dangaura" #. name for thm msgid "Aheu" -msgstr "" +msgstr "Aheu" #. name for thn msgid "Thachanadan" -msgstr "" +msgstr "Thachanadan" #. name for thp msgid "Thompson" -msgstr "" +msgstr "Thompson" #. name for thq msgid "Tharu; Kochila" -msgstr "" +msgstr "Tharu; Kochila" #. name for thr msgid "Tharu; Rana" -msgstr "" +msgstr "Tharu; Rana" #. name for ths msgid "Thakali" -msgstr "" +msgstr "Thakali" #. name for tht msgid "Tahltan" -msgstr "" +msgstr "Tahltan" #. name for thu msgid "Thuri" -msgstr "" +msgstr "Thuri" #. name for thv msgid "Tamahaq; Tahaggart" -msgstr "" +msgstr "Tamahaq; Tahaggart" #. name for thw msgid "Thudam" -msgstr "" +msgstr "Thudam" #. name for thx msgid "The" -msgstr "" +msgstr "The" #. name for thy msgid "Tha" -msgstr "" +msgstr "Tha" #. name for thz msgid "Tamajeq; Tayart" -msgstr "" +msgstr "Tamajeq; Tayart" #. name for tia msgid "Tamazight; Tidikelt" -msgstr "" +msgstr "Tamazight; Tidikelt" #. name for tic msgid "Tira" -msgstr "" +msgstr "Tira" #. name for tid msgid "Tidong" -msgstr "" +msgstr "Tidong" #. name for tif msgid "Tifal" -msgstr "" +msgstr "Tifal" #. name for tig msgid "Tigre" -msgstr "" +msgstr "Tigre" #. name for tih msgid "Murut; Timugon" -msgstr "" +msgstr "Murut; Timugon" #. name for tii msgid "Tiene" -msgstr "" +msgstr "Tiene" #. name for tij msgid "Tilung" -msgstr "" +msgstr "Tilung" #. name for tik msgid "Tikar" -msgstr "" +msgstr "Tikar" #. name for til msgid "Tillamook" -msgstr "" +msgstr "Tillamook" #. name for tim msgid "Timbe" -msgstr "" +msgstr "Timbe" #. name for tin msgid "Tindi" -msgstr "" +msgstr "Tindi" #. name for tio msgid "Teop" -msgstr "" +msgstr "Teop" #. name for tip msgid "Trimuris" -msgstr "" +msgstr "Trimuris" #. name for tiq msgid "Tiéfo" -msgstr "" +msgstr "Tiéfo" #. name for tir msgid "Tigrinya" -msgstr "" +msgstr "Tigrinya" #. name for tis msgid "Itneg; Masadiit" -msgstr "" +msgstr "Itneg; Masadiit" #. name for tit msgid "Tinigua" -msgstr "" +msgstr "Tinigua" #. name for tiu msgid "Adasen" -msgstr "" +msgstr "Adasen" #. name for tiv msgid "Tiv" -msgstr "" +msgstr "Tiv" #. name for tiw msgid "Tiwi" -msgstr "" +msgstr "Tiwi" #. name for tix msgid "Tiwa; Southern" -msgstr "" +msgstr "Tiwa; Selatan" #. name for tiy msgid "Tiruray" -msgstr "" +msgstr "Tiruray" #. name for tiz msgid "Tai Hongjin" -msgstr "" +msgstr "Tai Hongjin" #. name for tja msgid "Tajuasohn" -msgstr "" +msgstr "Tajuasohn" #. name for tjg msgid "Tunjung" -msgstr "" +msgstr "Tunjung" #. name for tji msgid "Tujia; Northern" -msgstr "" +msgstr "Tujia; Utara" #. name for tjm msgid "Timucua" -msgstr "" +msgstr "Timucua" #. name for tjn msgid "Tonjon" -msgstr "" +msgstr "Tonjon" #. name for tjo msgid "Tamazight; Temacine" -msgstr "" +msgstr "Tamazight; Temacine" #. name for tjs msgid "Tujia; Southern" -msgstr "" +msgstr "Tujia; Selatan" #. name for tju msgid "Tjurruru" -msgstr "" +msgstr "Tjurruru" #. name for tka msgid "Truká" -msgstr "" +msgstr "Truká" #. name for tkb msgid "Buksa" -msgstr "" +msgstr "Buksa" #. name for tkd msgid "Tukudede" -msgstr "" +msgstr "Tukudede" #. name for tke msgid "Takwane" -msgstr "" +msgstr "Takwane" #. name for tkf msgid "Tukumanféd" -msgstr "" +msgstr "Tukumanféd" #. name for tkg msgid "Malagasy; Tesaka" -msgstr "" +msgstr "Malagasy; Tesaka" #. name for tkl msgid "Tokelau" -msgstr "" +msgstr "Tokelau" #. name for tkm msgid "Takelma" -msgstr "" +msgstr "Takelma" #. name for tkn msgid "Toku-No-Shima" -msgstr "" +msgstr "Toku-No-Shima" #. name for tkp msgid "Tikopia" -msgstr "" +msgstr "Tikopia" #. name for tkq msgid "Tee" -msgstr "" +msgstr "Tee" #. name for tkr msgid "Tsakhur" -msgstr "" +msgstr "Tsakhur" #. name for tks msgid "Takestani" -msgstr "" +msgstr "Takestani" #. name for tkt msgid "Tharu; Kathoriya" -msgstr "" +msgstr "Tharu; Kathoriya" #. name for tku msgid "Totonac; Upper Necaxa" -msgstr "" +msgstr "Totonac; Necaxa Atas" #. name for tkw msgid "Teanu" -msgstr "" +msgstr "Teanu" #. name for tkx msgid "Tangko" -msgstr "" +msgstr "Tangko" #. name for tkz msgid "Takua" -msgstr "" +msgstr "Takua" #. name for tla msgid "Tepehuan; Southwestern" -msgstr "" +msgstr "Tepehuan; Barat Daya" #. name for tlb msgid "Tobelo" -msgstr "" +msgstr "Tobelo" #. name for tlc msgid "Totonac; Yecuatla" -msgstr "" +msgstr "Totonac; Yecuatla" #. name for tld msgid "Talaud" -msgstr "" +msgstr "Talaud" #. name for tlf msgid "Telefol" -msgstr "" +msgstr "Telefol" #. name for tlg msgid "Tofanma" -msgstr "" +msgstr "Tofanma" #. name for tlh msgid "Klingon" -msgstr "" +msgstr "Klingon" #. name for tli msgid "Tlingit" -msgstr "" +msgstr "Tlingit" #. name for tlj msgid "Talinga-Bwisi" -msgstr "" +msgstr "Talinga-Bwisi" #. name for tlk msgid "Taloki" -msgstr "" +msgstr "Taloki" #. name for tll msgid "Tetela" -msgstr "" +msgstr "Tetela" #. name for tlm msgid "Tolomako" -msgstr "" +msgstr "Tolomako" #. name for tln msgid "Talondo'" -msgstr "" +msgstr "Talondo'" #. name for tlo msgid "Talodi" -msgstr "" +msgstr "Talodi" #. name for tlp msgid "Totonac; Filomena Mata-Coahuitlán" -msgstr "" +msgstr "Totonac; Filomena Mata-Coahuitlán" #. name for tlq msgid "Tai Loi" -msgstr "" +msgstr "Tai Loi" #. name for tlr msgid "Talise" -msgstr "" +msgstr "Talise" #. name for tls msgid "Tambotalo" -msgstr "" +msgstr "Tambotalo" #. name for tlt msgid "Teluti" -msgstr "" +msgstr "Teluti" #. name for tlu msgid "Tulehu" -msgstr "" +msgstr "Tulehu" #. name for tlv msgid "Taliabu" -msgstr "" +msgstr "Taliabu" #. name for tlw msgid "Wemale; South" -msgstr "" +msgstr "Wemale; Selatan" #. name for tlx msgid "Khehek" -msgstr "" +msgstr "Khehek" #. name for tly msgid "Talysh" -msgstr "" +msgstr "Talysh" #. name for tma msgid "Tama (Chad)" -msgstr "" +msgstr "Tama (Chad)" #. name for tmb msgid "Katbol" -msgstr "" +msgstr "Katbol" #. name for tmc msgid "Tumak" -msgstr "" +msgstr "Tumak" #. name for tmd msgid "Haruai" -msgstr "" +msgstr "Haruai" #. name for tme msgid "Tremembé" -msgstr "" +msgstr "Tremembé" #. name for tmf msgid "Toba-Maskoy" -msgstr "" +msgstr "Toba-Maskoy" #. name for tmg msgid "Ternateño" -msgstr "" +msgstr "Ternateño" #. name for tmh msgid "Tamashek" -msgstr "" +msgstr "Tamashek" #. name for tmi msgid "Tutuba" -msgstr "" +msgstr "Tutuba" #. name for tmj msgid "Samarokena" -msgstr "" +msgstr "Samarokena" #. name for tmk msgid "Tamang; Northwestern" -msgstr "" +msgstr "Tamang; Barat Daya" #. name for tml msgid "Citak; Tamnim" -msgstr "" +msgstr "Citak; Tamnim" #. name for tmm msgid "Tai Thanh" -msgstr "" +msgstr "Tai Thanh" #. name for tmn msgid "Taman (Indonesia)" -msgstr "" +msgstr "Taman (Indonesia)" #. name for tmo msgid "Temoq" -msgstr "" +msgstr "Temoq" #. name for tmp msgid "Tai Mène" -msgstr "" +msgstr "Tai Mène" #. name for tmq msgid "Tumleo" -msgstr "" +msgstr "Tumleo" #. name for tmr msgid "Aramaic; Jewish Babylonian (ca. 200-1200 CE)" -msgstr "" +msgstr "Aramik; Yahudi Babilon (kira-kira 200-1200 Seb. M)" #. name for tms msgid "Tima" -msgstr "" +msgstr "Tima" #. name for tmt msgid "Tasmate" -msgstr "" +msgstr "Tasmate" #. name for tmu msgid "Iau" -msgstr "" +msgstr "Iau" #. name for tmv msgid "Tembo (Motembo)" -msgstr "" +msgstr "Tembo (Motembo)" #. name for tmw msgid "Temuan" -msgstr "" +msgstr "Temuan" #. name for tmy msgid "Tami" -msgstr "" +msgstr "Tami" #. name for tmz msgid "Tamanaku" -msgstr "" +msgstr "Tamanaku" #. name for tna msgid "Tacana" -msgstr "" +msgstr "Tacana" #. name for tnb msgid "Tunebo; Western" -msgstr "" +msgstr "Tunebo; Barat" #. name for tnc msgid "Tanimuca-Retuarã" -msgstr "" +msgstr "Tanimuca-Retuarã" #. name for tnd msgid "Tunebo; Angosturas" -msgstr "" +msgstr "Tunebo; Angosturas" #. name for tne msgid "Kallahan; Tinoc" -msgstr "" +msgstr "Kallahan; Tinoc" #. name for tng msgid "Tobanga" -msgstr "" +msgstr "Tobanga" #. name for tnh msgid "Maiani" -msgstr "" +msgstr "Maiani" #. name for tni msgid "Tandia" -msgstr "" +msgstr "Tandia" #. name for tnk msgid "Kwamera" -msgstr "" +msgstr "Kwamera" #. name for tnl msgid "Lenakel" -msgstr "" +msgstr "Lenakel" #. name for tnm msgid "Tabla" -msgstr "" +msgstr "Tabla" #. name for tnn msgid "Tanna; North" -msgstr "" +msgstr "Tanna; Utara" #. name for tno msgid "Toromono" -msgstr "" +msgstr "Toromono" #. name for tnp msgid "Whitesands" -msgstr "" +msgstr "Whitesands" #. name for tnq msgid "Taino" -msgstr "" +msgstr "Taino" #. name for tnr msgid "Bedik" -msgstr "" +msgstr "Bedik" #. name for tns msgid "Tenis" -msgstr "" +msgstr "Tenis" #. name for tnt msgid "Tontemboan" -msgstr "" +msgstr "Tontemboan" #. name for tnu msgid "Tay Khang" -msgstr "" +msgstr "Tay Khang" #. name for tnv msgid "Tangchangya" -msgstr "" +msgstr "Tangchangya" #. name for tnw msgid "Tonsawang" -msgstr "" +msgstr "Tonsawang" #. name for tnx msgid "Tanema" -msgstr "" +msgstr "Tanema" #. name for tny msgid "Tongwe" -msgstr "" +msgstr "Tongwe" #. name for tnz msgid "Tonga (Thailand)" -msgstr "" +msgstr "Tonga (Thailand)" #. name for tob msgid "Toba" -msgstr "" +msgstr "Toba" #. name for toc msgid "Totonac; Coyutla" -msgstr "" +msgstr "Totonac; Coyutla" #. name for tod msgid "Toma" -msgstr "" +msgstr "Toma" #. name for toe msgid "Tomedes" -msgstr "" +msgstr "Tomedes" #. name for tof msgid "Gizrra" -msgstr "" +msgstr "Gizrra" #. name for tog msgid "Tonga (Nyasa)" -msgstr "" +msgstr "Tonga (Nyasa)" #. name for toh msgid "Gitonga" -msgstr "" +msgstr "Gitonga" #. name for toi msgid "Tonga (Zambia)" -msgstr "" +msgstr "Tonga (Zambia)" #. name for toj msgid "Tojolabal" -msgstr "" +msgstr "Tojolabal" #. name for tol msgid "Tolowa" -msgstr "" +msgstr "Tolowa" #. name for tom msgid "Tombulu" -msgstr "" +msgstr "Tombulu" #. name for ton msgid "Tonga (Tonga Islands)" -msgstr "" +msgstr "Tonga (Kepulauan Tonga)" #. name for too msgid "Totonac; Xicotepec De Juárez" -msgstr "" +msgstr "Totonac; Xicotepec De Juárez" #. name for top msgid "Totonac; Papantla" -msgstr "" +msgstr "Totonac; Papantla" #. name for toq msgid "Toposa" -msgstr "" +msgstr "Toposa" #. name for tor msgid "Banda; Togbo-Vara" -msgstr "" +msgstr "Banda; Togbo-Vara" #. name for tos msgid "Totonac; Highland" -msgstr "" +msgstr "Totonac; Tanah Tinggi" #. name for tou msgid "Tho" -msgstr "" +msgstr "Tho" #. name for tov msgid "Taromi; Upper" -msgstr "" +msgstr "Taromi; Upper" #. name for tow msgid "Jemez" -msgstr "" +msgstr "Jemez" #. name for tox msgid "Tobian" -msgstr "" +msgstr "Tobian" #. name for toy msgid "Topoiyo" -msgstr "" +msgstr "Topoiyo" #. name for toz msgid "To" -msgstr "" +msgstr "To" #. name for tpa msgid "Taupota" -msgstr "" +msgstr "Taupota" #. name for tpc msgid "Tlapanec; Azoyú" -msgstr "" +msgstr "Tlapanec; Azoyú" #. name for tpe msgid "Tippera" -msgstr "" +msgstr "Tippera" #. name for tpf msgid "Tarpia" -msgstr "" +msgstr "Tarpia" #. name for tpg msgid "Kula" -msgstr "" +msgstr "Kula" #. name for tpi msgid "Tok Pisin" -msgstr "" +msgstr "Tok Pisin" #. name for tpj msgid "Tapieté" -msgstr "" +msgstr "Tapieté" #. name for tpk msgid "Tupinikin" -msgstr "" +msgstr "Tupinikin" #. name for tpl msgid "Tlapanec; Tlacoapa" -msgstr "" +msgstr "Tlapanec; Tlacoapa" #. name for tpm msgid "Tampulma" -msgstr "" +msgstr "Tampulma" #. name for tpn msgid "Tupinambá" -msgstr "" +msgstr "Tupinambá" #. name for tpo msgid "Tai Pao" -msgstr "" +msgstr "Tai Pao" #. name for tpp msgid "Tepehua; Pisaflores" -msgstr "" +msgstr "Tepehua; Pisaflores" #. name for tpq msgid "Tukpa" -msgstr "" +msgstr "Tukpa" #. name for tpr msgid "Tuparí" -msgstr "" +msgstr "Tuparí" #. name for tpt msgid "Tepehua; Tlachichilco" -msgstr "" +msgstr "Tepehua; Tlachichilco" #. name for tpu msgid "Tampuan" -msgstr "" +msgstr "Tampuan" #. name for tpv msgid "Tanapag" -msgstr "" +msgstr "Tanapag" #. name for tpw msgid "Tupí" -msgstr "" +msgstr "Tupí" #. name for tpx msgid "Tlapanec; Acatepec" -msgstr "" +msgstr "Tlapanec; Acatepec" #. name for tpy msgid "Trumai" -msgstr "" +msgstr "Trumai" #. name for tpz msgid "Tinputz" -msgstr "" +msgstr "Tinputz" #. name for tqb msgid "Tembé" -msgstr "" +msgstr "Tembé" #. name for tql msgid "Lehali" -msgstr "" +msgstr "Lehali" #. name for tqm msgid "Turumsa" -msgstr "" +msgstr "Turumsa" #. name for tqn msgid "Tenino" -msgstr "" +msgstr "Tenino" #. name for tqo msgid "Toaripi" -msgstr "" +msgstr "Toaripi" #. name for tqp msgid "Tomoip" -msgstr "" +msgstr "Tomoip" #. name for tqq msgid "Tunni" -msgstr "" +msgstr "Tunni" #. name for tqr msgid "Torona" -msgstr "" +msgstr "Torona" #. name for tqt msgid "Totonac; Western" -msgstr "" +msgstr "Totonac; Barat" #. name for tqu msgid "Touo" -msgstr "" +msgstr "Touo" #. name for tqw msgid "Tonkawa" -msgstr "" +msgstr "Tonkawa" #. name for tra msgid "Tirahi" -msgstr "" +msgstr "Tirahi" #. name for trb msgid "Terebu" -msgstr "" +msgstr "Terebu" #. name for trc msgid "Triqui; Copala" -msgstr "" +msgstr "Triqui; Copala" #. name for trd msgid "Turi" -msgstr "" +msgstr "Turi" #. name for tre msgid "Tarangan; East" -msgstr "" +msgstr "Tarangan; Timur" #. name for trf msgid "Creole English; Trinidadian" -msgstr "" +msgstr "Inggeris Creole; Trinidad" #. name for trg msgid "Lishán Didán" -msgstr "" +msgstr "Lishán Didán" #. name for trh msgid "Turaka" -msgstr "" +msgstr "Turaka" #. name for tri msgid "Trió" -msgstr "" +msgstr "Trió" #. name for trj msgid "Toram" -msgstr "" +msgstr "Toram" #. name for trl msgid "Scottish; Traveller" -msgstr "" +msgstr "Scottish; Traveller" #. name for trm msgid "Tregami" -msgstr "" +msgstr "Tregami" #. name for trn msgid "Trinitario" -msgstr "" +msgstr "Trinitario" #. name for tro msgid "Naga; Tarao" -msgstr "" +msgstr "Naga; Tarao" #. name for trp msgid "Kok Borok" -msgstr "" +msgstr "Kok Borok" #. name for trq msgid "Triqui; San Martín Itunyoso" -msgstr "" +msgstr "Triqui; San Martín Itunyoso" #. name for trr msgid "Taushiro" -msgstr "" +msgstr "Taushiro" #. name for trs msgid "Triqui; Chicahuaxtla" -msgstr "" +msgstr "Triqui; Chicahuaxtla" #. name for trt msgid "Tunggare" -msgstr "" +msgstr "Tunggare" #. name for tru msgid "Turoyo" -msgstr "" +msgstr "Turoyo" #. name for trv msgid "Taroko" -msgstr "" +msgstr "Taroko" #. name for trw msgid "Torwali" -msgstr "" +msgstr "Torwali" #. name for trx msgid "Bidayuh; Tringgus-Sembaan" -msgstr "" +msgstr "Bidayuh; Tringgus-Sembaan" #. name for try msgid "Turung" -msgstr "" +msgstr "Turung" #. name for trz msgid "Torá" -msgstr "" +msgstr "Torá" #. name for tsa msgid "Tsaangi" -msgstr "" +msgstr "Tsaangi" #. name for tsb msgid "Tsamai" -msgstr "" +msgstr "Tsamai" #. name for tsc msgid "Tswa" -msgstr "" +msgstr "Tswa" #. name for tsd msgid "Tsakonian" -msgstr "" +msgstr "Tsakoni" #. name for tse msgid "Tunisian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Tunisia" #. name for tsf msgid "Tamang; Southwestern" -msgstr "" +msgstr "Tamang; Barat Laut" #. name for tsg msgid "Tausug" -msgstr "" +msgstr "Tausug" #. name for tsh msgid "Tsuvan" -msgstr "" +msgstr "Tsuvan" #. name for tsi msgid "Tsimshian" -msgstr "" +msgstr "Tsimshian" #. name for tsj msgid "Tshangla" -msgstr "" +msgstr "Tshangla" #. name for tsk msgid "Tseku" -msgstr "" +msgstr "Tseku" #. name for tsl msgid "Ts'ün-Lao" -msgstr "" +msgstr "Ts'ün-Lao" #. name for tsm msgid "Turkish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Turki" #. name for tsn msgid "Tswana" -msgstr "" +msgstr "Tswana" #. name for tso msgid "Tsonga" -msgstr "" +msgstr "Tsonga" #. name for tsp msgid "Toussian; Northern" -msgstr "" +msgstr "Toussian; Utara" #. name for tsq msgid "Thai Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Siam" #. name for tsr msgid "Akei" -msgstr "" +msgstr "Akei" #. name for tss msgid "Taiwan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Taiwan" #. name for tst msgid "Songway Kiini; Tondi" -msgstr "" +msgstr "Songway Kiini; Tondi" #. name for tsu msgid "Tsou" -msgstr "" +msgstr "Tsou" #. name for tsv msgid "Tsogo" -msgstr "" +msgstr "Tsogo" #. name for tsw msgid "Tsishingini" -msgstr "" +msgstr "Tsishingini" #. name for tsx msgid "Mubami" -msgstr "" +msgstr "Mubami" #. name for tsy msgid "Tebul Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Tebul" #. name for tsz msgid "Purepecha" -msgstr "" +msgstr "Purepecha" #. name for tta msgid "Tutelo" -msgstr "" +msgstr "Tutelo" #. name for ttb msgid "Gaa" -msgstr "" +msgstr "Gaa" #. name for ttc msgid "Tektiteko" -msgstr "" +msgstr "Tektiteko" #. name for ttd msgid "Tauade" -msgstr "" +msgstr "Tauade" #. name for tte msgid "Bwanabwana" -msgstr "" +msgstr "Bwanabwana" #. name for ttf msgid "Tuotomb" -msgstr "" +msgstr "Tuotomb" #. name for ttg msgid "Tutong" -msgstr "" +msgstr "Tutong" #. name for tth msgid "Ta'oih; Upper" -msgstr "" +msgstr "Ta'oih; Atas" #. name for tti msgid "Tobati" -msgstr "" +msgstr "Tobati" #. name for ttj msgid "Tooro" -msgstr "" +msgstr "Tooro" #. name for ttk msgid "Totoro" -msgstr "" +msgstr "Totoro" #. name for ttl msgid "Totela" -msgstr "" +msgstr "Totela" #. name for ttm msgid "Tutchone; Northern" -msgstr "" +msgstr "Tutchone; Selatan" #. name for ttn msgid "Towei" -msgstr "" +msgstr "Towei" #. name for tto msgid "Ta'oih; Lower" -msgstr "" +msgstr "Ta'oih; Bawah" #. name for ttp msgid "Tombelala" -msgstr "" +msgstr "Tombelala" #. name for ttq msgid "Tamajaq; Tawallammat" -msgstr "" +msgstr "Tamajaq; Tawallammat" #. name for ttr msgid "Tera" -msgstr "" +msgstr "Tera" #. name for tts msgid "Thai; Northeastern" -msgstr "" +msgstr "Siam; Timur Laut" #. name for ttt msgid "Tat; Muslim" -msgstr "" +msgstr "Tat; Muslim" #. name for ttu msgid "Torau" -msgstr "" +msgstr "Torau" #. name for ttv msgid "Titan" -msgstr "" +msgstr "Titan" #. name for ttw msgid "Long Wat" -msgstr "" +msgstr "Long Wat" #. name for tty msgid "Sikaritai" -msgstr "" +msgstr "Sikaritai" #. name for ttz msgid "Tsum" -msgstr "" +msgstr "Tsum" #. name for tua msgid "Wiarumus" -msgstr "" +msgstr "Wiarumus" #. name for tub msgid "Tübatulabal" -msgstr "" +msgstr "Tübatulabal" #. name for tuc msgid "Mutu" -msgstr "" +msgstr "Mutu" #. name for tud msgid "Tuxá" -msgstr "" +msgstr "Tuxá" #. name for tue msgid "Tuyuca" -msgstr "" +msgstr "Tuyuca" #. name for tuf msgid "Tunebo; Central" -msgstr "" +msgstr "Tunebo; Tengah" #. name for tug msgid "Tunia" -msgstr "" +msgstr "Tunia" #. name for tuh msgid "Taulil" -msgstr "" +msgstr "Taulil" #. name for tui msgid "Tupuri" -msgstr "" +msgstr "Tupuri" #. name for tuj msgid "Tugutil" -msgstr "" +msgstr "Tugutil" #. name for tuk msgid "Turkmen" -msgstr "" +msgstr "Turkmen" #. name for tul msgid "Tula" -msgstr "" +msgstr "Tula" #. name for tum msgid "Tumbuka" -msgstr "" +msgstr "Tumbuka" #. name for tun msgid "Tunica" -msgstr "" +msgstr "Tunica" #. name for tuo msgid "Tucano" -msgstr "" +msgstr "Tucano" #. name for tuq msgid "Tedaga" -msgstr "" +msgstr "Tedaga" #. name for tur msgid "Turkish" @@ -26200,935 +26200,935 @@ msgstr "Turkish" #. name for tus msgid "Tuscarora" -msgstr "" +msgstr "Tuscarora" #. name for tuu msgid "Tututni" -msgstr "" +msgstr "Tututni" #. name for tuv msgid "Turkana" -msgstr "" +msgstr "Turkana" #. name for tux msgid "Tuxináwa" -msgstr "" +msgstr "Tuxináwa" #. name for tuy msgid "Tugen" -msgstr "" +msgstr "Tugen" #. name for tuz msgid "Turka" -msgstr "" +msgstr "Turka" #. name for tva msgid "Vaghua" -msgstr "" +msgstr "Vaghua" #. name for tvd msgid "Tsuvadi" -msgstr "" +msgstr "Tsuvadi" #. name for tve msgid "Te'un" -msgstr "" +msgstr "Te'un" #. name for tvk msgid "Ambrym; Southeast" -msgstr "" +msgstr "Ambrym; Tenggara" #. name for tvl msgid "Tuvalu" -msgstr "" +msgstr "Tuvalu" #. name for tvm msgid "Tela-Masbuar" -msgstr "" +msgstr "Tela-Masbuar" #. name for tvn msgid "Tavoyan" -msgstr "" +msgstr "Tavoyan" #. name for tvo msgid "Tidore" -msgstr "" +msgstr "Tidore" #. name for tvs msgid "Taveta" -msgstr "" +msgstr "Taveta" #. name for tvt msgid "Naga; Tutsa" -msgstr "" +msgstr "Naga; Tutsa" #. name for tvw msgid "Sedoa" -msgstr "" +msgstr "Sedoa" #. name for tvy msgid "Pidgin; Timor" -msgstr "" +msgstr "Pidgin; Timor" #. name for twa msgid "Twana" -msgstr "" +msgstr "Twana" #. name for twb msgid "Tawbuid; Western" -msgstr "" +msgstr "Tawbuid; Barat" #. name for twc msgid "Teshenawa" -msgstr "" +msgstr "Teshenawa" #. name for twd msgid "Twents" -msgstr "" +msgstr "Twents" #. name for twe msgid "Tewa (Indonesia)" -msgstr "" +msgstr "Tewa (Indonesia)" #. name for twf msgid "Tiwa; Northern" -msgstr "" +msgstr "Tiwa; Utara" #. name for twg msgid "Tereweng" -msgstr "" +msgstr "Tereweng" #. name for twh msgid "Tai Dón" -msgstr "" +msgstr "Tai Dón" #. name for twi msgid "Twi" -msgstr "" +msgstr "Twi" #. name for twl msgid "Tawara" -msgstr "" +msgstr "Tawara" #. name for twm msgid "Monpa; Tawang" -msgstr "" +msgstr "Monpa; Tawang" #. name for twn msgid "Twendi" -msgstr "" +msgstr "Twendi" #. name for two msgid "Tswapong" -msgstr "" +msgstr "Tswapong" #. name for twp msgid "Ere" -msgstr "" +msgstr "Ere" #. name for twq msgid "Tasawaq" -msgstr "" +msgstr "Tasawaq" #. name for twr msgid "Tarahumara; Southwestern" -msgstr "" +msgstr "Tarahumara; Barat Laut" #. name for twt msgid "Turiwára" -msgstr "" +msgstr "Turiwára" #. name for twu msgid "Termanu" -msgstr "" +msgstr "Termanu" #. name for tww msgid "Tuwari" -msgstr "" +msgstr "Tuwari" #. name for twx msgid "Tewe" -msgstr "" +msgstr "Tewe" #. name for twy msgid "Tawoyan" -msgstr "" +msgstr "Tawoyan" #. name for txa msgid "Tombonuo" -msgstr "" +msgstr "Tombonuo" #. name for txb msgid "Tokharian B" -msgstr "" +msgstr "Tokharian B" #. name for txc msgid "Tsetsaut" -msgstr "" +msgstr "Tsetsaut" #. name for txe msgid "Totoli" -msgstr "" +msgstr "Totoli" #. name for txg msgid "Tangut" -msgstr "" +msgstr "Tangut" #. name for txh msgid "Thracian" -msgstr "" +msgstr "Thracian" #. name for txi msgid "Ikpeng" -msgstr "" +msgstr "Ikpeng" #. name for txm msgid "Tomini" -msgstr "" +msgstr "Tomini" #. name for txn msgid "Tarangan; West" -msgstr "" +msgstr "Tarangan; Barat" #. name for txo msgid "Toto" -msgstr "" +msgstr "Toto" #. name for txq msgid "Tii" -msgstr "" +msgstr "Tii" #. name for txr msgid "Tartessian" -msgstr "" +msgstr "Tartessian" #. name for txs msgid "Tonsea" -msgstr "" +msgstr "Tonsea" #. name for txt msgid "Citak" -msgstr "" +msgstr "Citak" #. name for txu msgid "Kayapó" -msgstr "" +msgstr "Kayapó" #. name for txx msgid "Tatana" -msgstr "" +msgstr "Tatana" #. name for txy msgid "Malagasy; Tanosy" -msgstr "" +msgstr "Malagasy; Tanosy" #. name for tya msgid "Tauya" -msgstr "" +msgstr "Tauya" #. name for tye msgid "Kyenga" -msgstr "" +msgstr "Kyenga" #. name for tyh msgid "O'du" -msgstr "" +msgstr "O'du" #. name for tyi msgid "Teke-Tsaayi" -msgstr "" +msgstr "Teke-Tsaayi" #. name for tyj msgid "Tai Do" -msgstr "" +msgstr "Tai Do" #. name for tyl msgid "Thu Lao" -msgstr "" +msgstr "Thu Lao" #. name for tyn msgid "Kombai" -msgstr "" +msgstr "Kombai" #. name for typ msgid "Thaypan" -msgstr "" +msgstr "Thaypan" #. name for tyr msgid "Tai Daeng" -msgstr "" +msgstr "Tai Daeng" #. name for tys msgid "Tày Sa Pa" -msgstr "" +msgstr "Tày Sa Pa" #. name for tyt msgid "Tày Tac" -msgstr "" +msgstr "Tày Tac" #. name for tyu msgid "Kua" -msgstr "" +msgstr "Kua" #. name for tyv msgid "Tuvinian" -msgstr "" +msgstr "Tuvinian" #. name for tyx msgid "Teke-Tyee" -msgstr "" +msgstr "Teke-Tyee" #. name for tyz msgid "Tày" -msgstr "" +msgstr "Tày" #. name for tza msgid "Tanzanian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Tanzania" #. name for tzh msgid "Tzeltal" -msgstr "" +msgstr "Tzeltal" #. name for tzj msgid "Tz'utujil" -msgstr "" +msgstr "Tz'utujil" #. name for tzm msgid "Tamazight; Central Atlas" -msgstr "" +msgstr "Tamazight; Atlas Tengah" #. name for tzn msgid "Tugun" -msgstr "" +msgstr "Tugun" #. name for tzo msgid "Tzotzil" -msgstr "" +msgstr "Tzotzil" #. name for tzx msgid "Tabriak" -msgstr "" +msgstr "Tabriak" #. name for uam msgid "Uamué" -msgstr "" +msgstr "Uamué" #. name for uan msgid "Kuan" -msgstr "" +msgstr "Kuan" #. name for uar msgid "Tairuma" -msgstr "" +msgstr "Tairuma" #. name for uba msgid "Ubang" -msgstr "" +msgstr "Ubang" #. name for ubi msgid "Ubi" -msgstr "" +msgstr "Ubi" #. name for ubl msgid "Bikol; Buhi'non" -msgstr "" +msgstr "Bikol; Buhi'non" #. name for ubr msgid "Ubir" -msgstr "" +msgstr "Ubir" #. name for ubu msgid "Umbu-Ungu" -msgstr "" +msgstr "Umbu-Ungu" #. name for uby msgid "Ubykh" -msgstr "" +msgstr "Ubykh" #. name for uda msgid "Uda" -msgstr "" +msgstr "Uda" #. name for ude msgid "Udihe" -msgstr "" +msgstr "Udihe" #. name for udg msgid "Muduga" -msgstr "" +msgstr "Muduga" #. name for udi msgid "Udi" -msgstr "" +msgstr "Udi" #. name for udj msgid "Ujir" -msgstr "" +msgstr "Ujir" #. name for udl msgid "Wuzlam" -msgstr "" +msgstr "Wuzlam" #. name for udm msgid "Udmurt" -msgstr "" +msgstr "Udmurt" #. name for udu msgid "Uduk" -msgstr "" +msgstr "Uduk" #. name for ues msgid "Kioko" -msgstr "" +msgstr "Kioko" #. name for ufi msgid "Ufim" -msgstr "" +msgstr "Ufim" #. name for uga msgid "Ugaritic" -msgstr "" +msgstr "Ugaritic" #. name for ugb msgid "Kuku-Ugbanh" -msgstr "" +msgstr "Kuku-Ugbanh" #. name for uge msgid "Ughele" -msgstr "" +msgstr "Ughele" #. name for ugn msgid "Ugandan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Uganda" #. name for ugo msgid "Ugong" -msgstr "" +msgstr "Ugong" #. name for ugy msgid "Uruguayan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Uruguay" #. name for uha msgid "Uhami" -msgstr "" +msgstr "Uhami" #. name for uhn msgid "Damal" -msgstr "" +msgstr "Damal" #. name for uig msgid "Uighur" -msgstr "" +msgstr "Uighur" #. name for uis msgid "Uisai" -msgstr "" +msgstr "Uisai" #. name for uiv msgid "Iyive" -msgstr "" +msgstr "Iyive" #. name for uji msgid "Tanjijili" -msgstr "" +msgstr "Tanjijili" #. name for uka msgid "Kaburi" -msgstr "" +msgstr "Kaburi" #. name for ukg msgid "Ukuriguma" -msgstr "" +msgstr "Ukuriguma" #. name for ukh msgid "Ukhwejo" -msgstr "" +msgstr "Ukhwejo" #. name for ukl msgid "Ukrainian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Ukraine" #. name for ukp msgid "Ukpe-Bayobiri" -msgstr "" +msgstr "Ukpe-Bayobiri" #. name for ukq msgid "Ukwa" -msgstr "" +msgstr "Ukwa" #. name for ukr msgid "Ukrainian" -msgstr "" +msgstr "Ukraine" #. name for uks msgid "Urubú-Kaapor Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Urubú-Kaapor" #. name for uku msgid "Ukue" -msgstr "" +msgstr "Ukue" #. name for ukw msgid "Ukwuani-Aboh-Ndoni" -msgstr "" +msgstr "Ukwuani-Aboh-Ndoni" #. name for ula msgid "Fungwa" -msgstr "" +msgstr "Fungwa" #. name for ulb msgid "Ulukwumi" -msgstr "" +msgstr "Ulukwumi" #. name for ulc msgid "Ulch" -msgstr "" +msgstr "Ulch" #. name for ulf msgid "Usku" -msgstr "" +msgstr "Usku" #. name for uli msgid "Ulithian" -msgstr "" +msgstr "Ulithian" #. name for ulk msgid "Meriam" -msgstr "" +msgstr "Meriam" #. name for ull msgid "Ullatan" -msgstr "" +msgstr "Ullatan" #. name for ulm msgid "Ulumanda'" -msgstr "" +msgstr "Ulumanda'" #. name for uln msgid "Unserdeutsch" -msgstr "" +msgstr "Unserdeutsch" #. name for ulu msgid "Uma' Lung" -msgstr "" +msgstr "Uma' Lung" #. name for ulw msgid "Ulwa" -msgstr "" +msgstr "Ulwa" #. name for uma msgid "Umatilla" -msgstr "" +msgstr "Umatilla" #. name for umb msgid "Umbundu" -msgstr "" +msgstr "Umbundu" #. name for umc msgid "Marrucinian" -msgstr "" +msgstr "Marrucinia" #. name for umd msgid "Umbindhamu" -msgstr "" +msgstr "Umbindhamu" #. name for umg msgid "Umbuygamu" -msgstr "" +msgstr "Umbuygamu" #. name for umi msgid "Ukit" -msgstr "" +msgstr "Ukit" #. name for umm msgid "Umon" -msgstr "" +msgstr "Umon" #. name for umn msgid "Naga; Makyan" -msgstr "" +msgstr "Naga; Makyan" #. name for umo msgid "Umotína" -msgstr "" +msgstr "Umotína" #. name for ump msgid "Umpila" -msgstr "" +msgstr "Umpila" #. name for umr msgid "Umbugarla" -msgstr "" +msgstr "Umbugarla" #. name for ums msgid "Pendau" -msgstr "" +msgstr "Pendau" #. name for umu msgid "Munsee" -msgstr "" +msgstr "Munsee" #. name for una msgid "Watut; North" -msgstr "" +msgstr "Watut; Utara" #. name for und msgid "Undetermined" -msgstr "" +msgstr "Undetermined" #. name for une msgid "Uneme" -msgstr "" +msgstr "Uneme" #. name for ung msgid "Ngarinyin" -msgstr "" +msgstr "Ngarinyin" #. name for unk msgid "Enawené-Nawé" -msgstr "" +msgstr "Enawené-Nawé" #. name for unm msgid "Unami" -msgstr "" +msgstr "Unami" #. name for unp msgid "Worora" -msgstr "" +msgstr "Worora" #. name for unr msgid "Mundari" -msgstr "" +msgstr "Mundari" #. name for unx msgid "Munda" -msgstr "" +msgstr "Munda" #. name for unz msgid "Kaili; Unde" -msgstr "" +msgstr "Kaili; Unde" #. name for uok msgid "Uokha" -msgstr "" +msgstr "Uokha" #. name for upi msgid "Umeda" -msgstr "" +msgstr "Umeda" #. name for upv msgid "Uripiv-Wala-Rano-Atchin" -msgstr "" +msgstr "Uripiv-Wala-Rano-Atchin" #. name for ura msgid "Urarina" -msgstr "" +msgstr "Urarina" #. name for urb msgid "Urubú-Kaapor" -msgstr "" +msgstr "Urubú-Kaapor" #. name for urc msgid "Urningangg" -msgstr "" +msgstr "Urningangg" #. name for urd msgid "Urdu" -msgstr "" +msgstr "Urdu" #. name for ure msgid "Uru" -msgstr "" +msgstr "Uru" #. name for urf msgid "Uradhi" -msgstr "" +msgstr "Uradhi" #. name for urg msgid "Urigina" -msgstr "" +msgstr "Urigina" #. name for urh msgid "Urhobo" -msgstr "" +msgstr "Urhobo" #. name for uri msgid "Urim" -msgstr "" +msgstr "Urim" #. name for urk msgid "Urak Lawoi'" -msgstr "" +msgstr "Urak Lawoi'" #. name for url msgid "Urali" -msgstr "" +msgstr "Urali" #. name for urm msgid "Urapmin" -msgstr "" +msgstr "Urapmin" #. name for urn msgid "Uruangnirin" -msgstr "" +msgstr "Uruangnirin" #. name for uro msgid "Ura (Papua New Guinea)" -msgstr "" +msgstr "Ura (Papua New Guinea)" #. name for urp msgid "Uru-Pa-In" -msgstr "" +msgstr "Uru-Pa-In" #. name for urr msgid "Lehalurup" -msgstr "" +msgstr "Lehalurup" #. name for urt msgid "Urat" -msgstr "" +msgstr "Urat" #. name for uru msgid "Urumi" -msgstr "" +msgstr "Urumi" #. name for urv msgid "Uruava" -msgstr "" +msgstr "Uruava" #. name for urw msgid "Sop" -msgstr "" +msgstr "Sop" #. name for urx msgid "Urimo" -msgstr "" +msgstr "Urimo" #. name for ury msgid "Orya" -msgstr "" +msgstr "Orya" #. name for urz msgid "Uru-Eu-Wau-Wau" -msgstr "" +msgstr "Uru-Eu-Wau-Wau" #. name for usa msgid "Usarufa" -msgstr "" +msgstr "Usarufa" #. name for ush msgid "Ushojo" -msgstr "" +msgstr "Ushojo" #. name for usi msgid "Usui" -msgstr "" +msgstr "Usui" #. name for usk msgid "Usaghade" -msgstr "" +msgstr "Usaghade" #. name for usp msgid "Uspanteco" -msgstr "" +msgstr "Uspanteco" #. name for usu msgid "Uya" -msgstr "" +msgstr "Uya" #. name for uta msgid "Otank" -msgstr "" +msgstr "Otank" #. name for ute msgid "Ute-Southern Paiute" -msgstr "" +msgstr "Selatan-Ute Paiute" #. name for utp msgid "Amba (Solomon Islands)" -msgstr "" +msgstr "Amba (Kepulauan Solomon)" #. name for utr msgid "Etulo" -msgstr "" +msgstr "Etulo" #. name for utu msgid "Utu" -msgstr "" +msgstr "Utu" #. name for uum msgid "Urum" -msgstr "" +msgstr "Urum" #. name for uun msgid "Kulon-Pazeh" -msgstr "" +msgstr "Kulon-Pazeh" #. name for uur msgid "Ura (Vanuatu)" -msgstr "" +msgstr "Ura (Vanuatu)" #. name for uuu msgid "U" -msgstr "" +msgstr "U" #. name for uve msgid "Uvean; West" -msgstr "" +msgstr "Uvean; Barat" #. name for uvh msgid "Uri" -msgstr "" +msgstr "Uri" #. name for uvl msgid "Lote" -msgstr "" +msgstr "Lote" #. name for uwa msgid "Kuku-Uwanh" -msgstr "" +msgstr "Kuku-Uwanh" #. name for uya msgid "Doko-Uyanga" -msgstr "" +msgstr "Doko-Uyanga" #. name for uzb msgid "Uzbek" -msgstr "" +msgstr "Uzbek" #. name for uzn msgid "Uzbek; Northern" -msgstr "" +msgstr "Uzbek; Utara" #. name for uzs msgid "Uzbek; Southern" -msgstr "" +msgstr "Uzbek; Selatan" #. name for vaa msgid "Vaagri Booli" -msgstr "" +msgstr "Vaagri Booli" #. name for vae msgid "Vale" -msgstr "" +msgstr "Vale" #. name for vaf msgid "Vafsi" -msgstr "" +msgstr "Vafsi" #. name for vag msgid "Vagla" -msgstr "" +msgstr "Vagla" #. name for vah msgid "Varhadi-Nagpuri" -msgstr "" +msgstr "Varhadi-Nagpuri" #. name for vai msgid "Vai" -msgstr "" +msgstr "Vai" #. name for vaj msgid "Vasekela Bushman" -msgstr "" +msgstr "Vasekela Bushman" #. name for val msgid "Vehes" -msgstr "" +msgstr "Vehes" #. name for vam msgid "Vanimo" -msgstr "" +msgstr "Vanimo" #. name for van msgid "Valman" -msgstr "" +msgstr "Valman" #. name for vao msgid "Vao" -msgstr "" +msgstr "Vao" #. name for vap msgid "Vaiphei" -msgstr "" +msgstr "Vaiphei" #. name for var msgid "Huarijio" -msgstr "" +msgstr "Huarijio" #. name for vas msgid "Vasavi" -msgstr "" +msgstr "Vasavi" #. name for vau msgid "Vanuma" -msgstr "" +msgstr "Vanuma" #. name for vav msgid "Varli" -msgstr "" +msgstr "Varli" #. name for vay msgid "Wayu" -msgstr "" +msgstr "Wayu" #. name for vbb msgid "Babar; Southeast" -msgstr "" +msgstr "Babar; Tenggara" #. name for vbk msgid "Bontok; Southwestern" -msgstr "" +msgstr "Bontok; Barat Laut" #. name for vec msgid "Venetian" -msgstr "" +msgstr "Venetia" #. name for ved msgid "Veddah" -msgstr "" +msgstr "Veddah" #. name for vel msgid "Veluws" -msgstr "" +msgstr "Veluws" #. name for vem msgid "Vemgo-Mabas" -msgstr "" +msgstr "Vemgo-Mabas" #. name for ven msgid "Venda" -msgstr "" +msgstr "Venda" #. name for veo msgid "Ventureño" -msgstr "" +msgstr "Ventureño" #. name for vep msgid "Veps" -msgstr "" +msgstr "Veps" #. name for ver msgid "Mom Jango" -msgstr "" +msgstr "Mom Jango" #. name for vgr msgid "Vaghri" -msgstr "" +msgstr "Vaghri" #. name for vgt msgid "Vlaamse Gebarentaal" -msgstr "" +msgstr "Vlaamse Gebarentaal" #. name for vic msgid "Creole English; Virgin Islands" -msgstr "" +msgstr "Inggeris Creole; Kepulauan Virgin" #. name for vid msgid "Vidunda" -msgstr "" +msgstr "Vidunda" #. name for vie msgid "Vietnamese" @@ -27136,3199 +27136,3199 @@ msgstr "Vietnamese" #. name for vif msgid "Vili" -msgstr "" +msgstr "Vili" #. name for vig msgid "Viemo" -msgstr "" +msgstr "Viemo" #. name for vil msgid "Vilela" -msgstr "" +msgstr "Vilela" #. name for vin msgid "Vinza" -msgstr "" +msgstr "Vinza" #. name for vis msgid "Vishavan" -msgstr "" +msgstr "Vishavan" #. name for vit msgid "Viti" -msgstr "" +msgstr "Viti" #. name for viv msgid "Iduna" -msgstr "" +msgstr "Iduna" #. name for vka msgid "Kariyarra" -msgstr "" +msgstr "Kariyarra" #. name for vki msgid "Ija-Zuba" -msgstr "" +msgstr "Ija-Zuba" #. name for vkj msgid "Kujarge" -msgstr "" +msgstr "Kujarge" #. name for vkk msgid "Kaur" -msgstr "" +msgstr "Kaur" #. name for vkl msgid "Kulisusu" -msgstr "" +msgstr "Kulisusu" #. name for vkm msgid "Kamakan" -msgstr "" +msgstr "Kamakan" #. name for vko msgid "Kodeoha" -msgstr "" +msgstr "Kodeoha" #. name for vkp msgid "Creole Portuguese; Korlai" -msgstr "" +msgstr "Portugis Creole; Korlai" #. name for vkt msgid "Malay; Tenggarong Kutai" -msgstr "" +msgstr "Melayu; Tenggarong Kutai" #. name for vku msgid "Kurrama" -msgstr "" +msgstr "Kurrama" #. name for vlp msgid "Valpei" -msgstr "" +msgstr "Valpei" #. name for vls msgid "Vlaams" -msgstr "" +msgstr "Vlaams" #. name for vma msgid "Martuyhunira" -msgstr "" +msgstr "Martuyhunira" #. name for vmb msgid "Mbabaram" -msgstr "" +msgstr "Mbabaram" #. name for vmc msgid "Mixtec; Juxtlahuaca" -msgstr "" +msgstr "Mixtec; Juxtlahuaca" #. name for vmd msgid "Koraga; Mudu" -msgstr "" +msgstr "Koraga; Mudu" #. name for vme msgid "Masela; East" -msgstr "" +msgstr "Masela; Timur" #. name for vmf msgid "Mainfränkisch" -msgstr "" +msgstr "Mainfränkisch" #. name for vmg msgid "Minigir" -msgstr "" +msgstr "Minigir" #. name for vmh msgid "Maraghei" -msgstr "" +msgstr "Maraghei" #. name for vmi msgid "Miwa" -msgstr "" +msgstr "Miwa" #. name for vmj msgid "Mixtec; Ixtayutla" -msgstr "" +msgstr "Mixtec; Ixtayutla" #. name for vmk msgid "Makhuwa-Shirima" -msgstr "" +msgstr "Makhuwa-Shirima" #. name for vml msgid "Malgana" -msgstr "" +msgstr "Malgana" #. name for vmm msgid "Mixtec; Mitlatongo" -msgstr "" +msgstr "Mixtec; Mitlatongo" #. name for vmp msgid "Mazatec; Soyaltepec" -msgstr "" +msgstr "Mazatec; Soyaltepec" #. name for vmq msgid "Mixtec; Soyaltepec" -msgstr "" +msgstr "Mixtec; Soyaltepec" #. name for vmr msgid "Marenje" -msgstr "" +msgstr "Marenje" #. name for vms msgid "Moksela" -msgstr "" +msgstr "Moksela" #. name for vmu msgid "Muluridyi" -msgstr "" +msgstr "Muluridyi" #. name for vmv msgid "Maidu; Valley" -msgstr "" +msgstr "Maidu; Lembah" #. name for vmw msgid "Makhuwa" -msgstr "" +msgstr "Makhuwa" #. name for vmx msgid "Mixtec; Tamazola" -msgstr "" +msgstr "Mixtec; Tamazola" #. name for vmy msgid "Mazatec; Ayautla" -msgstr "" +msgstr "Mazatec; Ayautla" #. name for vmz msgid "Mazatec; Mazatlán" -msgstr "" +msgstr "Mazatec; Mazatlán" #. name for vnk msgid "Vano" -msgstr "" +msgstr "Vano" #. name for vnm msgid "Vinmavis" -msgstr "" +msgstr "Vinmavis" #. name for vnp msgid "Vunapu" -msgstr "" +msgstr "Vunapu" #. name for vol msgid "Volapük" -msgstr "" +msgstr "Volapük" #. name for vor msgid "Voro" -msgstr "" +msgstr "Voro" #. name for vot msgid "Votic" -msgstr "" +msgstr "Votic" #. name for vra msgid "Vera'a" -msgstr "" +msgstr "Vera'a" #. name for vro msgid "Võro" -msgstr "" +msgstr "Võro" #. name for vrs msgid "Varisi" -msgstr "" +msgstr "Varisi" #. name for vrt msgid "Burmbar" -msgstr "" +msgstr "Burmbar" #. name for vsi msgid "Moldova Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Moldova" #. name for vsl msgid "Venezuelan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Venezuela" #. name for vsv msgid "Valencian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Valencia" #. name for vto msgid "Vitou" -msgstr "" +msgstr "Vitou" #. name for vum msgid "Vumbu" -msgstr "" +msgstr "Vumbu" #. name for vun msgid "Vunjo" -msgstr "" +msgstr "Vunjo" #. name for vut msgid "Vute" -msgstr "" +msgstr "Vute" #. name for vwa msgid "Awa (China)" -msgstr "" +msgstr "Awa (Cina)" #. name for waa msgid "Walla Walla" -msgstr "" +msgstr "Walla Walla" #. name for wab msgid "Wab" -msgstr "" +msgstr "Wab" #. name for wac msgid "Wasco-Wishram" -msgstr "" +msgstr "Wasco-Wishram" #. name for wad msgid "Wandamen" -msgstr "" +msgstr "Wandamen" #. name for wae msgid "Walser" -msgstr "" +msgstr "Walser" #. name for waf msgid "Wakoná" -msgstr "" +msgstr "Wakoná" #. name for wag msgid "Wa'ema" -msgstr "" +msgstr "Wa'ema" #. name for wah msgid "Watubela" -msgstr "" +msgstr "Watubela" #. name for wai msgid "Wares" -msgstr "" +msgstr "Wares" #. name for waj msgid "Waffa" -msgstr "" +msgstr "Waffa" #. name for wal msgid "Wolaytta" -msgstr "" +msgstr "Wolaytta" #. name for wam msgid "Wampanoag" -msgstr "" +msgstr "Wampanoag" #. name for wan msgid "Wan" -msgstr "" +msgstr "Wan" #. name for wao msgid "Wappo" -msgstr "" +msgstr "Wappo" #. name for wap msgid "Wapishana" -msgstr "" +msgstr "Wapishana" #. name for waq msgid "Wageman" -msgstr "" +msgstr "Wageman" #. name for war msgid "Waray (Philippines)" -msgstr "" +msgstr "Waray (Filipina)" #. name for was msgid "Washo" -msgstr "" +msgstr "Washo" #. name for wat msgid "Kaninuwa" -msgstr "" +msgstr "Kaninuwa" #. name for wau msgid "Waurá" -msgstr "" +msgstr "Waurá" #. name for wav msgid "Waka" -msgstr "" +msgstr "Waka" #. name for waw msgid "Waiwai" -msgstr "" +msgstr "Waiwai" #. name for wax msgid "Watam" -msgstr "" +msgstr "Watam" #. name for way msgid "Wayana" -msgstr "" +msgstr "Wayana" #. name for waz msgid "Wampur" -msgstr "" +msgstr "Wampur" #. name for wba msgid "Warao" -msgstr "" +msgstr "Warao" #. name for wbb msgid "Wabo" -msgstr "" +msgstr "Wabo" #. name for wbe msgid "Waritai" -msgstr "" +msgstr "Waritai" #. name for wbf msgid "Wara" -msgstr "" +msgstr "Wara" #. name for wbh msgid "Wanda" -msgstr "" +msgstr "Wanda" #. name for wbi msgid "Vwanji" -msgstr "" +msgstr "Vwanji" #. name for wbj msgid "Alagwa" -msgstr "" +msgstr "Alagwa" #. name for wbk msgid "Waigali" -msgstr "" +msgstr "Waigali" #. name for wbl msgid "Wakhi" -msgstr "" +msgstr "Wakhi" #. name for wbm msgid "Wa" -msgstr "" +msgstr "Wa" #. name for wbp msgid "Warlpiri" -msgstr "" +msgstr "Warlpiri" #. name for wbq msgid "Waddar" -msgstr "" +msgstr "Waddar" #. name for wbr msgid "Wagdi" -msgstr "" +msgstr "Wagdi" #. name for wbt msgid "Wanman" -msgstr "" +msgstr "Wanman" #. name for wbv msgid "Wajarri" -msgstr "" +msgstr "Wajarri" #. name for wbw msgid "Woi" -msgstr "" +msgstr "Woi" #. name for wca msgid "Yanomámi" -msgstr "" +msgstr "Yanomámi" #. name for wci msgid "Gbe; Waci" -msgstr "" +msgstr "Gbe; Waci" #. name for wdd msgid "Wandji" -msgstr "" +msgstr "Wandji" #. name for wdg msgid "Wadaginam" -msgstr "" +msgstr "Wadaginam" #. name for wdj msgid "Wadjiginy" -msgstr "" +msgstr "Wadjiginy" #. name for wdu msgid "Wadjigu" -msgstr "" +msgstr "Wadjigu" #. name for wea msgid "Wewaw" -msgstr "" +msgstr "Wewaw" #. name for wec msgid "Wè Western" -msgstr "" +msgstr "Wè Barat" #. name for wed msgid "Wedau" -msgstr "" +msgstr "Wedau" #. name for weh msgid "Weh" -msgstr "" +msgstr "Weh" #. name for wei msgid "Kiunum" -msgstr "" +msgstr "Kiunum" #. name for wem msgid "Gbe; Weme" -msgstr "" +msgstr "Gbe; Weme" #. name for weo msgid "Wemale; North" -msgstr "" +msgstr "Wemale; Utara" #. name for wep msgid "Westphalien" -msgstr "" +msgstr "Westphal" #. name for wer msgid "Weri" -msgstr "" +msgstr "Weri" #. name for wes msgid "Pidgin; Cameroon" -msgstr "" +msgstr "Pidgin; Cameroon" #. name for wet msgid "Perai" -msgstr "" +msgstr "Perai" #. name for weu msgid "Welaung" -msgstr "" +msgstr "Welaung" #. name for wew msgid "Wejewa" -msgstr "" +msgstr "Wejewa" #. name for wfg msgid "Yafi" -msgstr "" +msgstr "Yafi" #. name for wga msgid "Wagaya" -msgstr "" +msgstr "Wagaya" #. name for wgb msgid "Wagawaga" -msgstr "" +msgstr "Wagawaga" #. name for wgg msgid "Wangganguru" -msgstr "" +msgstr "Wangganguru" #. name for wgi msgid "Wahgi" -msgstr "" +msgstr "Wahgi" #. name for wgo msgid "Waigeo" -msgstr "" +msgstr "Waigeo" #. name for wgy msgid "Warrgamay" -msgstr "" +msgstr "Warrgamay" #. name for wha msgid "Manusela" -msgstr "" +msgstr "Manusela" #. name for whg msgid "Wahgi; North" -msgstr "" +msgstr "Wahgi; Utara" #. name for whk msgid "Kenyah; Wahau" -msgstr "" +msgstr "Kenyah; Wahau" #. name for whu msgid "Kayan; Wahau" -msgstr "" +msgstr "Kayan; Wahau" #. name for wib msgid "Toussian; Southern" -msgstr "" +msgstr "Toussian; Selatan" #. name for wic msgid "Wichita" -msgstr "" +msgstr "Wichita" #. name for wie msgid "Wik-Epa" -msgstr "" +msgstr "Wik-Epa" #. name for wif msgid "Wik-Keyangan" -msgstr "" +msgstr "Wik-Keyangan" #. name for wig msgid "Wik-Ngathana" -msgstr "" +msgstr "Wik-Ngathana" #. name for wih msgid "Wik-Me'anha" -msgstr "" +msgstr "Wik-Me'anha" #. name for wii msgid "Minidien" -msgstr "" +msgstr "Minidien" #. name for wij msgid "Wik-Iiyanh" -msgstr "" +msgstr "Wik-Iiyanh" #. name for wik msgid "Wikalkan" -msgstr "" +msgstr "Wikalkan" #. name for wil msgid "Wilawila" -msgstr "" +msgstr "Wilawila" #. name for wim msgid "Wik-Mungkan" -msgstr "" +msgstr "Wik-Mungkan" #. name for win msgid "Ho-Chunk" -msgstr "" +msgstr "Ho-Chunk" #. name for wir msgid "Wiraféd" -msgstr "" +msgstr "Wiraféd" #. name for wit msgid "Wintu" -msgstr "" +msgstr "Wintu" #. name for wiu msgid "Wiru" -msgstr "" +msgstr "Wiru" #. name for wiv msgid "Muduapa" -msgstr "" +msgstr "Muduapa" #. name for wiw msgid "Wirangu" -msgstr "" +msgstr "Wirangu" #. name for wiy msgid "Wiyot" -msgstr "" +msgstr "Wiyot" #. name for wja msgid "Waja" -msgstr "" +msgstr "Waja" #. name for wji msgid "Warji" -msgstr "" +msgstr "Warji" #. name for wka msgid "Kw'adza" -msgstr "" +msgstr "Kw'adza" #. name for wkb msgid "Kumbaran" -msgstr "" +msgstr "Kumbaran" #. name for wkd msgid "Wakde" -msgstr "" +msgstr "Wakde" #. name for wkl msgid "Kalanadi" -msgstr "" +msgstr "Kalanadi" #. name for wku msgid "Kunduvadi" -msgstr "" +msgstr "Kunduvadi" #. name for wkw msgid "Wakawaka" -msgstr "" +msgstr "Wakawaka" #. name for wla msgid "Walio" -msgstr "" +msgstr "Walio" #. name for wlc msgid "Comorian; Mwali" -msgstr "" +msgstr "Comorian; Mwali" #. name for wle msgid "Wolane" -msgstr "" +msgstr "Wolane" #. name for wlg msgid "Kunbarlang" -msgstr "" +msgstr "Kunbarlang" #. name for wli msgid "Waioli" -msgstr "" +msgstr "Waioli" #. name for wlk msgid "Wailaki" -msgstr "" +msgstr "Wailaki" #. name for wll msgid "Wali (Sudan)" -msgstr "" +msgstr "Wali (Sudan)" #. name for wlm msgid "Welsh; Middle" -msgstr "" +msgstr "Welsh; Pertengahan" #. name for wln msgid "Walloon" -msgstr "" +msgstr "Walloon" #. name for wlo msgid "Wolio" -msgstr "" +msgstr "Wolio" #. name for wlr msgid "Wailapa" -msgstr "" +msgstr "Wailapa" #. name for wls msgid "Wallisian" -msgstr "" +msgstr "Wallisia" #. name for wlu msgid "Wuliwuli" -msgstr "" +msgstr "Wuliwuli" #. name for wlv msgid "Wichí Lhamtés Vejoz" -msgstr "" +msgstr "Wichí Lhamtés Vejoz" #. name for wlw msgid "Walak" -msgstr "" +msgstr "Walak" #. name for wlx msgid "Wali (Ghana)" -msgstr "" +msgstr "Wali (Ghana)" #. name for wly msgid "Waling" -msgstr "" +msgstr "Waling" #. name for wma msgid "Mawa (Nigeria)" -msgstr "" +msgstr "Mawa (Nigeria)" #. name for wmb msgid "Wambaya" -msgstr "" +msgstr "Wambaya" #. name for wmc msgid "Wamas" -msgstr "" +msgstr "Wamas" #. name for wmd msgid "Mamaindé" -msgstr "" +msgstr "Mamaindé" #. name for wme msgid "Wambule" -msgstr "" +msgstr "Wambule" #. name for wmh msgid "Waima'a" -msgstr "" +msgstr "Waima'a" #. name for wmi msgid "Wamin" -msgstr "" +msgstr "Wamin" #. name for wmm msgid "Maiwa (Indonesia)" -msgstr "" +msgstr "Maiwa (Indonesia)" #. name for wmn msgid "Waamwang" -msgstr "" +msgstr "Waamwang" #. name for wmo msgid "Wom (Papua New Guinea)" -msgstr "" +msgstr "Wom (Papua New Guinea)" #. name for wms msgid "Wambon" -msgstr "" +msgstr "Wambon" #. name for wmt msgid "Walmajarri" -msgstr "" +msgstr "Walmajarri" #. name for wmw msgid "Mwani" -msgstr "" +msgstr "Mwani" #. name for wmx msgid "Womo" -msgstr "" +msgstr "Womo" #. name for wnb msgid "Wanambre" -msgstr "" +msgstr "Wanambre" #. name for wnc msgid "Wantoat" -msgstr "" +msgstr "Wantoat" #. name for wnd msgid "Wandarang" -msgstr "" +msgstr "Wandarang" #. name for wne msgid "Waneci" -msgstr "" +msgstr "Waneci" #. name for wng msgid "Wanggom" -msgstr "" +msgstr "Wanggom" #. name for wni msgid "Comorian; Ndzwani" -msgstr "" +msgstr "Comori; Ndzwani" #. name for wnk msgid "Wanukaka" -msgstr "" +msgstr "Wanukaka" #. name for wnm msgid "Wanggamala" -msgstr "" +msgstr "Wanggamala" #. name for wno msgid "Wano" -msgstr "" +msgstr "Wano" #. name for wnp msgid "Wanap" -msgstr "" +msgstr "Wanap" #. name for wnu msgid "Usan" -msgstr "" +msgstr "Usan" #. name for woa msgid "Tyaraity" -msgstr "" +msgstr "Tyaraity" #. name for wob msgid "Wè Northern" -msgstr "" +msgstr "Wè Utara" #. name for woc msgid "Wogeo" -msgstr "" +msgstr "Wogeo" #. name for wod msgid "Wolani" -msgstr "" +msgstr "Wolani" #. name for woe msgid "Woleaian" -msgstr "" +msgstr "Woleaian" #. name for wof msgid "Wolof; Gambian" -msgstr "" +msgstr "Wolof; Gambia" #. name for wog msgid "Wogamusin" -msgstr "" +msgstr "Wogamusin" #. name for woi msgid "Kamang" -msgstr "" +msgstr "Kamang" #. name for wok msgid "Longto" -msgstr "" +msgstr "Longto" #. name for wol msgid "Wolof" -msgstr "" +msgstr "Wolof" #. name for wom msgid "Wom (Nigeria)" -msgstr "" +msgstr "Wom (Nigeria)" #. name for won msgid "Wongo" -msgstr "" +msgstr "Wongo" #. name for woo msgid "Manombai" -msgstr "" +msgstr "Manombai" #. name for wor msgid "Woria" -msgstr "" +msgstr "Woria" #. name for wos msgid "Hanga Hundi" -msgstr "" +msgstr "Hanga Hundi" #. name for wow msgid "Wawonii" -msgstr "" +msgstr "Wawonii" #. name for woy msgid "Weyto" -msgstr "" +msgstr "Weyto" #. name for wpc msgid "Maco" -msgstr "" +msgstr "Maco" #. name for wra msgid "Warapu" -msgstr "" +msgstr "Warapu" #. name for wrb msgid "Warluwara" -msgstr "" +msgstr "Warluwara" #. name for wrd msgid "Warduji" -msgstr "" +msgstr "Warduji" #. name for wrg msgid "Warungu" -msgstr "" +msgstr "Warungu" #. name for wrh msgid "Wiradhuri" -msgstr "" +msgstr "Wiradhuri" #. name for wri msgid "Wariyangga" -msgstr "" +msgstr "Wariyangga" #. name for wrl msgid "Warlmanpa" -msgstr "" +msgstr "Warlmanpa" #. name for wrm msgid "Warumungu" -msgstr "" +msgstr "Warumungu" #. name for wrn msgid "Warnang" -msgstr "" +msgstr "Warnang" #. name for wrp msgid "Waropen" -msgstr "" +msgstr "Waropen" #. name for wrr msgid "Wardaman" -msgstr "" +msgstr "Wardaman" #. name for wrs msgid "Waris" -msgstr "" +msgstr "Waris" #. name for wru msgid "Waru" -msgstr "" +msgstr "Waru" #. name for wrv msgid "Waruna" -msgstr "" +msgstr "Waruna" #. name for wrw msgid "Gugu Warra" -msgstr "" +msgstr "Gugu Warra" #. name for wrx msgid "Wae Rana" -msgstr "" +msgstr "Wae Rana" #. name for wry msgid "Merwari" -msgstr "" +msgstr "Merwari" #. name for wrz msgid "Waray (Australia)" -msgstr "" +msgstr "Waray (Australia)" #. name for wsa msgid "Warembori" -msgstr "" +msgstr "Warembori" #. name for wsi msgid "Wusi" -msgstr "" +msgstr "Wusi" #. name for wsk msgid "Waskia" -msgstr "" +msgstr "Waskia" #. name for wsr msgid "Owenia" -msgstr "" +msgstr "Owenia" #. name for wss msgid "Wasa" -msgstr "" +msgstr "Wasa" #. name for wsu msgid "Wasu" -msgstr "" +msgstr "Wasu" #. name for wsv msgid "Wotapuri-Katarqalai" -msgstr "" +msgstr "Wotapuri-Katarqalai" #. name for wtf msgid "Watiwa" -msgstr "" +msgstr "Watiwa" #. name for wti msgid "Berta" -msgstr "" +msgstr "Berta" #. name for wtk msgid "Watakataui" -msgstr "" +msgstr "Watakataui" #. name for wtm msgid "Mewati" -msgstr "" +msgstr "Mewati" #. name for wtw msgid "Wotu" -msgstr "" +msgstr "Wotu" #. name for wua msgid "Wikngenchera" -msgstr "" +msgstr "Wikngenchera" #. name for wub msgid "Wunambal" -msgstr "" +msgstr "Wunambal" #. name for wud msgid "Wudu" -msgstr "" +msgstr "Wudu" #. name for wuh msgid "Wutunhua" -msgstr "" +msgstr "Wutunhua" #. name for wul msgid "Silimo" -msgstr "" +msgstr "Silimo" #. name for wum msgid "Wumbvu" -msgstr "" +msgstr "Wumbvu" #. name for wun msgid "Bungu" -msgstr "" +msgstr "Bungu" #. name for wur msgid "Wurrugu" -msgstr "" +msgstr "Wurrugu" #. name for wut msgid "Wutung" -msgstr "" +msgstr "Wutung" #. name for wuu msgid "Chinese; Wu" -msgstr "" +msgstr "Cina; Wu" #. name for wuv msgid "Wuvulu-Aua" -msgstr "" +msgstr "Wuvulu-Aua" #. name for wux msgid "Wulna" -msgstr "" +msgstr "Wulna" #. name for wuy msgid "Wauyai" -msgstr "" +msgstr "Wauyai" #. name for wwa msgid "Waama" -msgstr "" +msgstr "Waama" #. name for wwo msgid "Wetamut" -msgstr "" +msgstr "Wetamut" #. name for wwr msgid "Warrwa" -msgstr "" +msgstr "Warrwa" #. name for www msgid "Wawa" -msgstr "" +msgstr "Wawa" #. name for wxa msgid "Waxianghua" -msgstr "" +msgstr "Waxianghua" #. name for wya msgid "Wyandot" -msgstr "" +msgstr "Wyandot" #. name for wyb msgid "Wangaaybuwan-Ngiyambaa" -msgstr "" +msgstr "Wangaaybuwan-Ngiyambaa" #. name for wym msgid "Wymysorys" -msgstr "" +msgstr "Wymysorys" #. name for wyr msgid "Wayoró" -msgstr "" +msgstr "Wayoró" #. name for wyy msgid "Fijian; Western" -msgstr "" +msgstr "Fiji; Barat" #. name for xaa msgid "Arabic; Andalusian" -msgstr "" +msgstr "Arab; Andalus" #. name for xab msgid "Sambe" -msgstr "" +msgstr "Sambe" #. name for xac msgid "Kachari" -msgstr "" +msgstr "Kachari" #. name for xad msgid "Adai" -msgstr "" +msgstr "Adai" #. name for xae msgid "Aequian" -msgstr "" +msgstr "Aequian" #. name for xag msgid "Aghwan" -msgstr "" +msgstr "Aghwan" #. name for xai msgid "Kaimbé" -msgstr "" +msgstr "Kaimbé" #. name for xal msgid "Kalmyk" -msgstr "" +msgstr "Kalmyk" #. name for xam msgid "/Xam" -msgstr "" +msgstr "/Xam" #. name for xan msgid "Xamtanga" -msgstr "" +msgstr "Xamtanga" #. name for xao msgid "Khao" -msgstr "" +msgstr "Khao" #. name for xap msgid "Apalachee" -msgstr "" +msgstr "Apalachee" #. name for xaq msgid "Aquitanian" -msgstr "" +msgstr "Aquitania" #. name for xar msgid "Karami" -msgstr "" +msgstr "Karami" #. name for xas msgid "Kamas" -msgstr "" +msgstr "Kamas" #. name for xat msgid "Katawixi" -msgstr "" +msgstr "Katawixi" #. name for xau msgid "Kauwera" -msgstr "" +msgstr "Kauwera" #. name for xav msgid "Xavánte" -msgstr "" +msgstr "Xavánte" #. name for xaw msgid "Kawaiisu" -msgstr "" +msgstr "Kawaiisu" #. name for xay msgid "Kayan Mahakam" -msgstr "" +msgstr "Kayan Mahakam" #. name for xba msgid "Kamba (Brazil)" -msgstr "" +msgstr "Kamba (Brazil)" #. name for xbb msgid "Burdekin; Lower" -msgstr "" +msgstr "Burdekin; Bawah" #. name for xbc msgid "Bactrian" -msgstr "" +msgstr "Bactrian" #. name for xbi msgid "Kombio" -msgstr "" +msgstr "Kombio" #. name for xbm msgid "Breton; Middle" -msgstr "" +msgstr "Breton; Pertengahan" #. name for xbn msgid "Kenaboi" -msgstr "" +msgstr "Kenaboi" #. name for xbo msgid "Bolgarian" -msgstr "" +msgstr "Bolgaria" #. name for xbr msgid "Kambera" -msgstr "" +msgstr "Kambera" #. name for xbw msgid "Kambiwá" -msgstr "" +msgstr "Kambiwá" #. name for xbx msgid "Kabixí" -msgstr "" +msgstr "Kabixí" #. name for xcb msgid "Cumbric" -msgstr "" +msgstr "Cumbric" #. name for xcc msgid "Camunic" -msgstr "" +msgstr "Camunic" #. name for xce msgid "Celtiberian" -msgstr "" +msgstr "Celtiberia" #. name for xcg msgid "Gaulish; Cisalpine" -msgstr "" +msgstr "Gaulish; Cisalpine" #. name for xch msgid "Chemakum" -msgstr "" +msgstr "Chemakum" #. name for xcl msgid "Armenian; Classical" -msgstr "" +msgstr "Armenia; Klasik" #. name for xcm msgid "Comecrudo" -msgstr "" +msgstr "Comecrudo" #. name for xcn msgid "Cotoname" -msgstr "" +msgstr "Cotoname" #. name for xco msgid "Chorasmian" -msgstr "" +msgstr "Chorasmia" #. name for xcr msgid "Carian" -msgstr "" +msgstr "Carian" #. name for xct msgid "Tibetan; Classical" -msgstr "" +msgstr "Tibet; Klasik" #. name for xcu msgid "Curonian" -msgstr "" +msgstr "Curonian" #. name for xcv msgid "Chuvantsy" -msgstr "" +msgstr "Chuvantsy" #. name for xcw msgid "Coahuilteco" -msgstr "" +msgstr "Coahuilteco" #. name for xcy msgid "Cayuse" -msgstr "" +msgstr "Cayuse" #. name for xdc msgid "Dacian" -msgstr "" +msgstr "Dacian" #. name for xdm msgid "Edomite" -msgstr "" +msgstr "Edomite" #. name for xdy msgid "Dayak; Malayic" -msgstr "" +msgstr "Dayak; Malayic" #. name for xeb msgid "Eblan" -msgstr "" +msgstr "Eblan" #. name for xed msgid "Hdi" -msgstr "" +msgstr "Hdi" #. name for xeg msgid "//Xegwi" -msgstr "" +msgstr "//Xegwi" #. name for xel msgid "Kelo" -msgstr "" +msgstr "Kelo" #. name for xem msgid "Kembayan" -msgstr "" +msgstr "Kembayan" #. name for xep msgid "Epi-Olmec" -msgstr "" +msgstr "Epi-Olmec" #. name for xer msgid "Xerénte" -msgstr "" +msgstr "Xerénte" #. name for xes msgid "Kesawai" -msgstr "" +msgstr "Kesawai" #. name for xet msgid "Xetá" -msgstr "" +msgstr "Xetá" #. name for xeu msgid "Keoru-Ahia" -msgstr "" +msgstr "Keoru-Ahia" #. name for xfa msgid "Faliscan" -msgstr "" +msgstr "Faliscan" #. name for xga msgid "Galatian" -msgstr "" +msgstr "Galatian" #. name for xgf msgid "Gabrielino-Fernandeño" -msgstr "" +msgstr "Gabrielino-Fernandeño" #. name for xgl msgid "Galindan" -msgstr "" +msgstr "Galindan" #. name for xgr msgid "Garza" -msgstr "" +msgstr "Garza" #. name for xha msgid "Harami" -msgstr "" +msgstr "Harami" #. name for xhc msgid "Hunnic" -msgstr "" +msgstr "Hunnic" #. name for xhd msgid "Hadrami" -msgstr "" +msgstr "Hadrami" #. name for xhe msgid "Khetrani" -msgstr "" +msgstr "Khetrani" #. name for xho msgid "Xhosa" -msgstr "" +msgstr "Xhosa" #. name for xhr msgid "Hernican" -msgstr "" +msgstr "Hernican" #. name for xht msgid "Hattic" -msgstr "" +msgstr "Hattic" #. name for xhu msgid "Hurrian" -msgstr "" +msgstr "Hurrian" #. name for xhv msgid "Khua" -msgstr "" +msgstr "Khua" #. name for xia msgid "Xiandao" -msgstr "" +msgstr "Xiandao" #. name for xib msgid "Iberian" -msgstr "" +msgstr "Iberia" #. name for xii msgid "Xiri" -msgstr "" +msgstr "Xiri" #. name for xil msgid "Illyrian" -msgstr "" +msgstr "Illiria" #. name for xin msgid "Xinca" -msgstr "" +msgstr "Xinca" #. name for xip msgid "Xipináwa" -msgstr "" +msgstr "Xipináwa" #. name for xir msgid "Xiriâna" -msgstr "" +msgstr "Xiriâna" #. name for xiv msgid "Indus Valley Language" -msgstr "" +msgstr "Bahasa Lembah Indus" #. name for xiy msgid "Xipaya" -msgstr "" +msgstr "Xipaya" #. name for xka msgid "Kalkoti" -msgstr "" +msgstr "Kalkoti" #. name for xkb msgid "Nago; Northern" -msgstr "" +msgstr "Nago; Utara" #. name for xkc msgid "Kho'ini" -msgstr "" +msgstr "Kho'ini" #. name for xkd msgid "Kayan; Mendalam" -msgstr "" +msgstr "Kayan; Mendalam" #. name for xke msgid "Kereho" -msgstr "" +msgstr "Kereho" #. name for xkf msgid "Khengkha" -msgstr "" +msgstr "Khengkha" #. name for xkg msgid "Kagoro" -msgstr "" +msgstr "Kagoro" #. name for xkh msgid "Karahawyana" -msgstr "" +msgstr "Karahawyana" #. name for xki msgid "Kenyan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Kenya" #. name for xkj msgid "Kajali" -msgstr "" +msgstr "Kajali" #. name for xkk msgid "Kaco'" -msgstr "" +msgstr "Kaco'" #. name for xkl msgid "Mainstream Kenyah" -msgstr "" +msgstr "Kenyah Utama" #. name for xkn msgid "Kayan; Kayan River" -msgstr "" +msgstr "Kayan; Sungai Kayan" #. name for xko msgid "Kiorr" -msgstr "" +msgstr "Kiorr" #. name for xkp msgid "Kabatei" -msgstr "" +msgstr "Kabatei" #. name for xkq msgid "Koroni" -msgstr "" +msgstr "Koroni" #. name for xkr msgid "Xakriabá" -msgstr "" +msgstr "Xakriabá" #. name for xks msgid "Kumbewaha" -msgstr "" +msgstr "Kumbewaha" #. name for xkt msgid "Kantosi" -msgstr "" +msgstr "Kantosi" #. name for xku msgid "Kaamba" -msgstr "" +msgstr "Kaamba" #. name for xkv msgid "Kgalagadi" -msgstr "" +msgstr "Kgalagadi" #. name for xkw msgid "Kembra" -msgstr "" +msgstr "Kembra" #. name for xkx msgid "Karore" -msgstr "" +msgstr "Karore" #. name for xky msgid "Uma' Lasan" -msgstr "" +msgstr "Uma' Lasan" #. name for xkz msgid "Kurtokha" -msgstr "" +msgstr "Kurtokha" #. name for xla msgid "Kamula" -msgstr "" +msgstr "Kamula" #. name for xlb msgid "Loup B" -msgstr "" +msgstr "Loup B" #. name for xlc msgid "Lycian" -msgstr "" +msgstr "Lycia" #. name for xld msgid "Lydian" -msgstr "" +msgstr "Lydia" #. name for xle msgid "Lemnian" -msgstr "" +msgstr "Lemnian" #. name for xlg msgid "Ligurian (Ancient)" -msgstr "" +msgstr "Liguria (Purba)" #. name for xli msgid "Liburnian" -msgstr "" +msgstr "Liburnia" #. name for xln msgid "Alanic" -msgstr "" +msgstr "Alanic" #. name for xlo msgid "Loup A" -msgstr "" +msgstr "Loup A" #. name for xlp msgid "Lepontic" -msgstr "" +msgstr "Lepontic" #. name for xls msgid "Lusitanian" -msgstr "" +msgstr "Lusitania" #. name for xlu msgid "Luwian; Cuneiform" -msgstr "" +msgstr "Luwia; Kuneiform" #. name for xly msgid "Elymian" -msgstr "" +msgstr "Elymia" #. name for xma msgid "Mushungulu" -msgstr "" +msgstr "Mushungulu" #. name for xmb msgid "Mbonga" -msgstr "" +msgstr "Mbonga" #. name for xmc msgid "Makhuwa-Marrevone" -msgstr "" +msgstr "Makhuwa-Marrevone" #. name for xmd msgid "Mbudum" -msgstr "" +msgstr "Mbudum" #. name for xme msgid "Median" -msgstr "" +msgstr "Median" #. name for xmf msgid "Mingrelian" -msgstr "" +msgstr "Mingrelian" #. name for xmg msgid "Mengaka" -msgstr "" +msgstr "Mengaka" #. name for xmh msgid "Kuku-Muminh" -msgstr "" +msgstr "Kuku-Muminh" #. name for xmj msgid "Majera" -msgstr "" +msgstr "Majera" #. name for xmk msgid "Macedonian; Ancient" -msgstr "" +msgstr "Macedonia; Purba" #. name for xml msgid "Malaysian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Malaysia" #. name for xmm msgid "Malay; Manado" -msgstr "" +msgstr "Melayu; Menado" #. name for xmn msgid "Persian; Manichaean Middle" -msgstr "" +msgstr "Parsi; Pertengahan Manichaea" #. name for xmo msgid "Morerebi" -msgstr "" +msgstr "Morerebi" #. name for xmp msgid "Kuku-Mu'inh" -msgstr "" +msgstr "Kuku-Mu'inh" #. name for xmq msgid "Kuku-Mangk" -msgstr "" +msgstr "Kuku-Mangk" #. name for xmr msgid "Meroitic" -msgstr "" +msgstr "Meroitic" #. name for xms msgid "Moroccan Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Maghribi" #. name for xmt msgid "Matbat" -msgstr "" +msgstr "Matbat" #. name for xmu msgid "Kamu" -msgstr "" +msgstr "Kamu" #. name for xmv msgid "Malagasy; Tankarana" -msgstr "" +msgstr "Malagasy; Tankarana" #. name for xmw msgid "Malagasy; Tsimihety" -msgstr "" +msgstr "Malagasy; Tsimihety" #. name for xmx msgid "Maden" -msgstr "" +msgstr "Maden" #. name for xmy msgid "Mayaguduna" -msgstr "" +msgstr "Mayaguduna" #. name for xmz msgid "Mori Bawah" -msgstr "" +msgstr "Mori Bawah" #. name for xna msgid "North Arabian; Ancient" -msgstr "" +msgstr "Arab Utara; Purba" #. name for xnb msgid "Kanakanabu" -msgstr "" +msgstr "Kanakanabu" #. name for xng msgid "Mongolian; Middle" -msgstr "" +msgstr "Mongolia; Pertengahan" #. name for xnh msgid "Kuanhua" -msgstr "" +msgstr "Kuanhua" #. name for xnn msgid "Kankanay; Northern" -msgstr "" +msgstr "Kankanay; Utara" #. name for xno msgid "Anglo-Norman" -msgstr "" +msgstr "Anglo-Norman" #. name for xnr msgid "Kangri" -msgstr "" +msgstr "Kangri" #. name for xns msgid "Kanashi" -msgstr "" +msgstr "Kanashi" #. name for xnt msgid "Narragansett" -msgstr "" +msgstr "Narragansett" #. name for xoc msgid "O'chi'chi'" -msgstr "" +msgstr "O'chi'chi'" #. name for xod msgid "Kokoda" -msgstr "" +msgstr "Kokoda" #. name for xog msgid "Soga" -msgstr "" +msgstr "Soga" #. name for xoi msgid "Kominimung" -msgstr "" +msgstr "Kominimung" #. name for xok msgid "Xokleng" -msgstr "" +msgstr "Xokleng" #. name for xom msgid "Komo (Sudan)" -msgstr "" +msgstr "Komo (Sudan)" #. name for xon msgid "Konkomba" -msgstr "" +msgstr "Konkomba" #. name for xoo msgid "Xukurú" -msgstr "" +msgstr "Xukurú" #. name for xop msgid "Kopar" -msgstr "" +msgstr "Kopar" #. name for xor msgid "Korubo" -msgstr "" +msgstr "Korubo" #. name for xow msgid "Kowaki" -msgstr "" +msgstr "Kowaki" #. name for xpc msgid "Pecheneg" -msgstr "" +msgstr "Pecheneg" #. name for xpe msgid "Kpelle; Liberia" -msgstr "" +msgstr "Kpelle; Liberia" #. name for xpg msgid "Phrygian" -msgstr "" +msgstr "Phrygian" #. name for xpi msgid "Pictish" -msgstr "" +msgstr "Pictish" #. name for xpk msgid "Pano; Kulina" -msgstr "" +msgstr "Pano; Kulina" #. name for xpm msgid "Pumpokol" -msgstr "" +msgstr "Pumpokol" #. name for xpn msgid "Kapinawá" -msgstr "" +msgstr "Kapinawá" #. name for xpo msgid "Pochutec" -msgstr "" +msgstr "Pochutec" #. name for xpp msgid "Puyo-Paekche" -msgstr "" +msgstr "Puyo-Paekche" #. name for xpq msgid "Mohegan-Pequot" -msgstr "" +msgstr "Mohegan-Pequot" #. name for xpr msgid "Parthian" -msgstr "" +msgstr "Parthia" #. name for xps msgid "Pisidian" -msgstr "" +msgstr "Pisidia" #. name for xpu msgid "Punic" -msgstr "" +msgstr "Punic" #. name for xpy msgid "Puyo" -msgstr "" +msgstr "Puyo" #. name for xqa msgid "Karakhanid" -msgstr "" +msgstr "Karakhanid" #. name for xqt msgid "Qatabanian" -msgstr "" +msgstr "Qatabanian" #. name for xra msgid "Krahô" -msgstr "" +msgstr "Krahô" #. name for xrb msgid "Karaboro; Eastern" -msgstr "" +msgstr "Karaboro, Timur" #. name for xre msgid "Kreye" -msgstr "" +msgstr "Kreye" #. name for xri msgid "Krikati-Timbira" -msgstr "" +msgstr "Krikati-Timbira" #. name for xrm msgid "Armazic" -msgstr "" +msgstr "Armazic" #. name for xrn msgid "Arin" -msgstr "" +msgstr "Arin" #. name for xrr msgid "Raetic" -msgstr "" +msgstr "Raetic" #. name for xrt msgid "Aranama-Tamique" -msgstr "" +msgstr "Aranama-Tamique" #. name for xru msgid "Marriammu" -msgstr "" +msgstr "Marriammu" #. name for xrw msgid "Karawa" -msgstr "" +msgstr "Karawa" #. name for xsa msgid "Sabaean" -msgstr "" +msgstr "Saba" #. name for xsb msgid "Sambal; Tinà" -msgstr "" +msgstr "Sambal; Tinà" #. name for xsc msgid "Scythian" -msgstr "" +msgstr "Scythia" #. name for xsd msgid "Sidetic" -msgstr "" +msgstr "Sidetic" #. name for xse msgid "Sempan" -msgstr "" +msgstr "Sempan" #. name for xsh msgid "Shamang" -msgstr "" +msgstr "Shamang" #. name for xsi msgid "Sio" -msgstr "" +msgstr "Sio" #. name for xsj msgid "Subi" -msgstr "" +msgstr "Subi" #. name for xsl msgid "Slavey; South" -msgstr "" +msgstr "Slavey; Selatan" #. name for xsm msgid "Kasem" -msgstr "" +msgstr "Kasem" #. name for xsn msgid "Sanga (Nigeria)" -msgstr "" +msgstr "Sanga (Nigeria)" #. name for xso msgid "Solano" -msgstr "" +msgstr "Solano" #. name for xsp msgid "Silopi" -msgstr "" +msgstr "Silopi" #. name for xsq msgid "Makhuwa-Saka" -msgstr "" +msgstr "Makhuwa-Saka" #. name for xsr msgid "Sherpa" -msgstr "" +msgstr "Sherpa" #. name for xss msgid "Assan" -msgstr "" +msgstr "Assan" #. name for xsu msgid "Sanumá" -msgstr "" +msgstr "Sanumá" #. name for xsv msgid "Sudovian" -msgstr "" +msgstr "Sudovia" #. name for xsy msgid "Saisiyat" -msgstr "" +msgstr "Saisiyat" #. name for xta msgid "Mixtec; Alcozauca" -msgstr "" +msgstr "Mixtec; Alcozauca" #. name for xtb msgid "Mixtec; Chazumba" -msgstr "" +msgstr "Mixtec; Chazumba" #. name for xtc msgid "Katcha-Kadugli-Miri" -msgstr "" +msgstr "Katcha-Kadugli-Miri" #. name for xtd msgid "Mixtec; Diuxi-Tilantongo" -msgstr "" +msgstr "Mixtec; Diuxi-Tilantongo" #. name for xte msgid "Ketengban" -msgstr "" +msgstr "Ketengban" #. name for xtg msgid "Gaulish; Transalpine" -msgstr "" +msgstr "Gaulish; Transalpine" #. name for xti msgid "Mixtec; Sinicahua" -msgstr "" +msgstr "Mixtec; Sinicahua" #. name for xtj msgid "Mixtec; San Juan Teita" -msgstr "" +msgstr "Mixtec; San Juan Teita" #. name for xtl msgid "Mixtec; Tijaltepec" -msgstr "" +msgstr "Mixtec; Tijaltepec" #. name for xtm msgid "Mixtec; Magdalena Peñasco" -msgstr "" +msgstr "Mixtec; Magdalena Peñasco" #. name for xtn msgid "Mixtec; Northern Tlaxiaco" -msgstr "" +msgstr "Mixtec; Northern Tlaxiaco" #. name for xto msgid "Tokharian A" -msgstr "" +msgstr "Tokharian A" #. name for xtp msgid "Mixtec; San Miguel Piedras" -msgstr "" +msgstr "Mixtec; San Miguel Piedras" #. name for xtq msgid "Tumshuqese" -msgstr "" +msgstr "Tumshuqese" #. name for xtr msgid "Tripuri; Early" -msgstr "" +msgstr "Tripuri; Awal" #. name for xts msgid "Mixtec; Sindihui" -msgstr "" +msgstr "Mixtec; Sindihui" #. name for xtt msgid "Mixtec; Tacahua" -msgstr "" +msgstr "Mixtec; Tacahua" #. name for xtu msgid "Mixtec; Cuyamecalco" -msgstr "" +msgstr "Mixtec; Cuyamecalco" #. name for xtw msgid "Tawandê" -msgstr "" +msgstr "Tawandê" #. name for xty msgid "Mixtec; Yoloxochitl" -msgstr "" +msgstr "Mixtec; Yoloxochitl" #. name for xtz msgid "Tasmanian" -msgstr "" +msgstr "Tasmania" #. name for xua msgid "Kurumba; Alu" -msgstr "" +msgstr "Kurumba; Alu" #. name for xub msgid "Kurumba; Betta" -msgstr "" +msgstr "Kurumba; Betta" #. name for xug msgid "Kunigami" -msgstr "" +msgstr "Kunigami" #. name for xuj msgid "Kurumba; Jennu" -msgstr "" +msgstr "Kurumba; Jennu" #. name for xum msgid "Umbrian" -msgstr "" +msgstr "Umbrian" #. name for xuo msgid "Kuo" -msgstr "" +msgstr "Kuo" #. name for xup msgid "Umpqua; Upper" -msgstr "" +msgstr "Umpqua; Upper" #. name for xur msgid "Urartian" -msgstr "" +msgstr "Urartian" #. name for xut msgid "Kuthant" -msgstr "" +msgstr "Kuthant" #. name for xuu msgid "Kxoe" -msgstr "" +msgstr "Kxoe" #. name for xve msgid "Venetic" -msgstr "" +msgstr "Venetic" #. name for xvi msgid "Kamviri" -msgstr "" +msgstr "Kamviri" #. name for xvn msgid "Vandalic" -msgstr "" +msgstr "Vandalic" #. name for xvo msgid "Volscian" -msgstr "" +msgstr "Volscian" #. name for xvs msgid "Vestinian" -msgstr "" +msgstr "Vestinian" #. name for xwa msgid "Kwaza" -msgstr "" +msgstr "Kwaza" #. name for xwc msgid "Woccon" -msgstr "" +msgstr "Woccon" #. name for xwe msgid "Gbe; Xwela" -msgstr "" +msgstr "Gbe; Xwela" #. name for xwg msgid "Kwegu" -msgstr "" +msgstr "Kwegu" #. name for xwl msgid "Gbe; Western Xwla" -msgstr "" +msgstr "Gbe; Xwla Barat" #. name for xwo msgid "Oirat; Written" -msgstr "" +msgstr "Oirat; Bertulis" #. name for xwr msgid "Kwerba Mamberamo" -msgstr "" +msgstr "Kwerba Mamberamo" #. name for xxb msgid "Boro (Ghana)" -msgstr "" +msgstr "Boro (Ghana)" #. name for xxk msgid "Ke'o" -msgstr "" +msgstr "Ke'o" #. name for xxr msgid "Koropó" -msgstr "" +msgstr "Koropó" #. name for xxt msgid "Tambora" -msgstr "" +msgstr "Tambora" #. name for xyl msgid "Yalakalore" -msgstr "" +msgstr "Yalakalore" #. name for xzh msgid "Zhang-Zhung" -msgstr "" +msgstr "Zhang-Zhung" #. name for xzm msgid "Zemgalian" -msgstr "" +msgstr "Zemgalian" #. name for xzp msgid "Zapotec; Ancient" -msgstr "" +msgstr "Zapotec; Ancient" #. name for yaa msgid "Yaminahua" -msgstr "" +msgstr "Yaminahua" #. name for yab msgid "Yuhup" -msgstr "" +msgstr "Yuhup" #. name for yac msgid "Yali; Pass Valley" -msgstr "" +msgstr "Yali; Lembah Pass" #. name for yad msgid "Yagua" -msgstr "" +msgstr "Yagua" #. name for yae msgid "Pumé" -msgstr "" +msgstr "Pumé" #. name for yaf msgid "Yaka (Democratic Republic of Congo)" -msgstr "" +msgstr "Yaka (Republik Democratik Congo)" #. name for yag msgid "Yámana" -msgstr "" +msgstr "Yámana" #. name for yah msgid "Yazgulyam" -msgstr "" +msgstr "Yazgulyam" #. name for yai msgid "Yagnobi" -msgstr "" +msgstr "Yagnobi" #. name for yaj msgid "Banda-Yangere" -msgstr "" +msgstr "Banda-Yangere" #. name for yak msgid "Yakama" -msgstr "" +msgstr "Yakama" #. name for yal msgid "Yalunka" -msgstr "" +msgstr "Yalunka" #. name for yam msgid "Yamba" -msgstr "" +msgstr "Yamba" #. name for yan msgid "Mayangna" -msgstr "" +msgstr "Mayangna" #. name for yao msgid "Yao" -msgstr "" +msgstr "Yao" #. name for yap msgid "Yapese" -msgstr "" +msgstr "Yapese" #. name for yaq msgid "Yaqui" -msgstr "" +msgstr "Yaqui" #. name for yar msgid "Yabarana" -msgstr "" +msgstr "Yabarana" #. name for yas msgid "Nugunu (Cameroon)" -msgstr "" +msgstr "Nugunu (Cameroon)" #. name for yat msgid "Yambeta" -msgstr "" +msgstr "Yambeta" #. name for yau msgid "Yuwana" -msgstr "" +msgstr "Yuwana" #. name for yav msgid "Yangben" -msgstr "" +msgstr "Yangben" #. name for yaw msgid "Yawalapití" -msgstr "" +msgstr "Yawalapití" #. name for yax msgid "Yauma" -msgstr "" +msgstr "Yauma" #. name for yay msgid "Agwagwune" -msgstr "" +msgstr "Agwagwune" #. name for yaz msgid "Lokaa" -msgstr "" +msgstr "Lokaa" #. name for yba msgid "Yala" -msgstr "" +msgstr "Yala" #. name for ybb msgid "Yemba" -msgstr "" +msgstr "Yemba" #. name for ybd msgid "Yangbye" -msgstr "" +msgstr "Yangbye" #. name for ybe msgid "Yugur; West" -msgstr "" +msgstr "Yugur; Barat" #. name for ybh msgid "Yakha" -msgstr "" +msgstr "Yakha" #. name for ybi msgid "Yamphu" -msgstr "" +msgstr "Yamphu" #. name for ybj msgid "Hasha" -msgstr "" +msgstr "Hasha" #. name for ybk msgid "Bokha" -msgstr "" +msgstr "Bokha" #. name for ybl msgid "Yukuben" -msgstr "" +msgstr "Yukuben" #. name for ybm msgid "Yaben" -msgstr "" +msgstr "Yaben" #. name for ybn msgid "Yabaâna" -msgstr "" +msgstr "Yabaâna" #. name for ybo msgid "Yabong" -msgstr "" +msgstr "Yabong" #. name for ybx msgid "Yawiyo" -msgstr "" +msgstr "Yawiyo" #. name for yby msgid "Yaweyuha" -msgstr "" +msgstr "Yaweyuha" #. name for ych msgid "Chesu" -msgstr "" +msgstr "Chesu" #. name for ycl msgid "Lolopo" -msgstr "" +msgstr "Lolopo" #. name for ycn msgid "Yucuna" -msgstr "" +msgstr "Yucuna" #. name for ycp msgid "Chepya" -msgstr "" +msgstr "Chepya" #. name for ydd msgid "Yiddish; Eastern" -msgstr "" +msgstr "Yiddish; Timur" #. name for yde msgid "Yangum Dey" -msgstr "" +msgstr "Yangum Dey" #. name for ydg msgid "Yidgha" -msgstr "" +msgstr "Yidgha" #. name for ydk msgid "Yoidik" -msgstr "" +msgstr "Yoidik" #. name for yds msgid "Yiddish Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Yiddish" #. name for yea msgid "Ravula" -msgstr "" +msgstr "Ravula" #. name for yec msgid "Yeniche" -msgstr "" +msgstr "Yeniche" #. name for yee msgid "Yimas" -msgstr "" +msgstr "Yimas" #. name for yei msgid "Yeni" -msgstr "" +msgstr "Yeni" #. name for yej msgid "Yevanic" -msgstr "" +msgstr "Yevanic" #. name for yel msgid "Yela" -msgstr "" +msgstr "Yela" #. name for yen msgid "Yendang" -msgstr "" +msgstr "Yendang" #. name for yer msgid "Tarok" -msgstr "" +msgstr "Tarok" #. name for yes msgid "Yeskwa" -msgstr "" +msgstr "Yeskwa" #. name for yet msgid "Yetfa" -msgstr "" +msgstr "Yetfa" #. name for yeu msgid "Yerukula" -msgstr "" +msgstr "Yerukula" #. name for yev msgid "Yapunda" -msgstr "" +msgstr "Yapunda" #. name for yey msgid "Yeyi" -msgstr "" +msgstr "Yeyi" #. name for ygl msgid "Yangum Gel" -msgstr "" +msgstr "Yangum Gel" #. name for ygm msgid "Yagomi" -msgstr "" +msgstr "Yagomi" #. name for ygp msgid "Gepo" -msgstr "" +msgstr "Gepo" #. name for ygr msgid "Yagaria" -msgstr "" +msgstr "Yagaria" #. name for ygw msgid "Yagwoia" -msgstr "" +msgstr "Yagwoia" #. name for yha msgid "Buyang; Baha" -msgstr "" +msgstr "Buyang; Baha" #. name for yhd msgid "Arabic; Judeo-Iraqi" -msgstr "" +msgstr "Arab; Yahudi-Iraq" #. name for yhl msgid "Phowa; Hlepho" -msgstr "" +msgstr "Phowa; Hlepho" #. name for yia msgid "Yinggarda" -msgstr "" +msgstr "Yinggarda" #. name for yid msgid "Yiddish" -msgstr "" +msgstr "Yiddish" #. name for yif msgid "Ache" -msgstr "" +msgstr "Ache" #. name for yig msgid "Nasu; Wusa" -msgstr "" +msgstr "Nasu; Wusa" #. name for yih msgid "Yiddish; Western" -msgstr "" +msgstr "Yiddish; Barat" #. name for yii msgid "Yidiny" -msgstr "" +msgstr "Yidiny" #. name for yij msgid "Yindjibarndi" -msgstr "" +msgstr "Yindjibarndi" #. name for yik msgid "Lalo; Dongshanba" -msgstr "" +msgstr "Lalo; Dongshanba" #. name for yil msgid "Yindjilandji" -msgstr "" +msgstr "Yindjilandji" #. name for yim msgid "Naga; Yimchungru" -msgstr "" +msgstr "Naga; Yimchungru" #. name for yin msgid "Yinchia" -msgstr "" +msgstr "Yinchia" #. name for yip msgid "Pholo" -msgstr "" +msgstr "Pholo" #. name for yiq msgid "Miqie" -msgstr "" +msgstr "Miqie" #. name for yir msgid "Awyu; North" -msgstr "" +msgstr "Awyu; Utara" #. name for yis msgid "Yis" -msgstr "" +msgstr "Yis" #. name for yit msgid "Lalu; Eastern" -msgstr "" +msgstr "Lalu; Timur" #. name for yiu msgid "Awu" -msgstr "" +msgstr "Awu" #. name for yiv msgid "Nisu; Northern" -msgstr "" +msgstr "Nisu; Utara" #. name for yix msgid "Yi; Axi" -msgstr "" +msgstr "Yi; Axi" #. name for yiy msgid "Yir Yoront" -msgstr "" +msgstr "Yir Yoront" #. name for yiz msgid "Azhe" -msgstr "" +msgstr "Azhe" #. name for yka msgid "Yakan" -msgstr "" +msgstr "Yakan" #. name for ykg msgid "Yukaghir; Northern" -msgstr "" +msgstr "Yukaghir; Utara" #. name for yki msgid "Yoke" -msgstr "" +msgstr "Yoke" #. name for ykk msgid "Yakaikeke" -msgstr "" +msgstr "Yakaikeke" #. name for ykl msgid "Khlula" -msgstr "" +msgstr "Khlula" #. name for ykm msgid "Kap" -msgstr "" +msgstr "Kap" #. name for yko msgid "Yasa" -msgstr "" +msgstr "Yasa" #. name for ykr msgid "Yekora" -msgstr "" +msgstr "Yekora" #. name for ykt msgid "Kathu" -msgstr "" +msgstr "Kathu" #. name for yky msgid "Yakoma" -msgstr "" +msgstr "Yakoma" #. name for yla msgid "Yaul" -msgstr "" +msgstr "Yaul" #. name for ylb msgid "Yaleba" -msgstr "" +msgstr "Yaleba" #. name for yle msgid "Yele" -msgstr "" +msgstr "Yele" #. name for ylg msgid "Yelogu" -msgstr "" +msgstr "Yelogu" #. name for yli msgid "Yali; Angguruk" -msgstr "" +msgstr "Yali; Angguruk" #. name for yll msgid "Yil" -msgstr "" +msgstr "Yil" #. name for ylm msgid "Limi" -msgstr "" +msgstr "Limi" #. name for yln msgid "Buyang; Langnian" -msgstr "" +msgstr "Buyang; Langnian" #. name for ylo msgid "Yi; Naluo" -msgstr "" +msgstr "Yi; Naluo" #. name for ylr msgid "Yalarnnga" -msgstr "" +msgstr "Yalarnnga" #. name for ylu msgid "Aribwaung" -msgstr "" +msgstr "Aribwaung" #. name for yly msgid "Nyâlayu" -msgstr "" +msgstr "Nyâlayu" #. name for yma msgid "Yamphe" -msgstr "" +msgstr "Yamphe" #. name for ymb msgid "Yambes" -msgstr "" +msgstr "Yambes" #. name for ymc msgid "Muji; Southern" -msgstr "" +msgstr "Muji; Selatan" #. name for ymd msgid "Muda" -msgstr "" +msgstr "Muda" #. name for yme msgid "Yameo" -msgstr "" +msgstr "Yameo" #. name for ymg msgid "Yamongeri" -msgstr "" +msgstr "Yamongeri" #. name for ymh msgid "Mili" -msgstr "" +msgstr "Mili" #. name for ymi msgid "Moji" -msgstr "" +msgstr "Moji" #. name for ymk msgid "Makwe" -msgstr "" +msgstr "Makwe" #. name for yml msgid "Iamalele" -msgstr "" +msgstr "Iamalele" #. name for ymm msgid "Maay" -msgstr "" +msgstr "Maay" #. name for ymn msgid "Yamna" -msgstr "" +msgstr "Yamna" #. name for ymo msgid "Yangum Mon" -msgstr "" +msgstr "Yangum Mon" #. name for ymp msgid "Yamap" -msgstr "" +msgstr "Yamap" #. name for ymq msgid "Muji; Qila" -msgstr "" +msgstr "Muji; Qila" #. name for ymr msgid "Malasar" -msgstr "" +msgstr "Malasar" #. name for yms msgid "Mysian" -msgstr "" +msgstr "Mysian" #. name for ymt msgid "Mator-Taygi-Karagas" -msgstr "" +msgstr "Mator-Taygi-Karagas" #. name for ymx msgid "Muji; Northern" -msgstr "" +msgstr "Muji; Utara" #. name for ymz msgid "Muzi" -msgstr "" +msgstr "Muzi" #. name for yna msgid "Aluo" -msgstr "" +msgstr "Aluo" #. name for ynd msgid "Yandruwandha" -msgstr "" +msgstr "Yandruwandha" #. name for yne msgid "Lang'e" -msgstr "" +msgstr "Lang'e" #. name for yng msgid "Yango" -msgstr "" +msgstr "Yango" #. name for ynh msgid "Yangho" -msgstr "" +msgstr "Yangho" #. name for ynk msgid "Yupik; Naukan" -msgstr "" +msgstr "Yupik; Naukan" #. name for ynl msgid "Yangulam" -msgstr "" +msgstr "Yangulam" #. name for ynn msgid "Yana" -msgstr "" +msgstr "Yana" #. name for yno msgid "Yong" -msgstr "" +msgstr "Yong" #. name for yns msgid "Yansi" -msgstr "" +msgstr "Yansi" #. name for ynu msgid "Yahuna" -msgstr "" +msgstr "Yahuna" #. name for yob msgid "Yoba" -msgstr "" +msgstr "Yoba" #. name for yog msgid "Yogad" -msgstr "" +msgstr "Yogad" #. name for yoi msgid "Yonaguni" -msgstr "" +msgstr "Yonaguni" #. name for yok msgid "Yokuts" -msgstr "" +msgstr "Yokuts" #. name for yol msgid "Yola" -msgstr "" +msgstr "Yola" #. name for yom msgid "Yombe" -msgstr "" +msgstr "Yombe" #. name for yon msgid "Yongkom" -msgstr "" +msgstr "Yongkom" #. name for yor msgid "Yoruba" -msgstr "" +msgstr "Yoruba" #. name for yos msgid "Yos" -msgstr "" +msgstr "Yos" #. name for yox msgid "Yoron" -msgstr "" +msgstr "Yoron" #. name for yoy msgid "Yoy" -msgstr "" +msgstr "Yoy" #. name for ypa msgid "Phala" -msgstr "" +msgstr "Phala" #. name for ypb msgid "Phowa; Labo" -msgstr "" +msgstr "Phowa; Labo" #. name for ypg msgid "Phola" -msgstr "" +msgstr "Phola" #. name for yph msgid "Phupha" -msgstr "" +msgstr "Phupha" #. name for ypm msgid "Phuma" -msgstr "" +msgstr "Phuma" #. name for ypn msgid "Phowa; Ani" -msgstr "" +msgstr "Phowa; Ani" #. name for ypo msgid "Phola; Alo" -msgstr "" +msgstr "Phola; Alo" #. name for ypp msgid "Phupa" -msgstr "" +msgstr "Phupa" #. name for ypz msgid "Phuza" -msgstr "" +msgstr "Phuza" #. name for yra msgid "Yerakai" -msgstr "" +msgstr "Yerakai" #. name for yrb msgid "Yareba" -msgstr "" +msgstr "Yareba" #. name for yre msgid "Yaouré" -msgstr "" +msgstr "Yaouré" #. name for yri msgid "Yarí" -msgstr "" +msgstr "Yarí" #. name for yrk msgid "Nenets" -msgstr "" +msgstr "Nenets" #. name for yrl msgid "Nhengatu" -msgstr "" +msgstr "Nhengatu" #. name for yrn msgid "Yerong" -msgstr "" +msgstr "Yerong" #. name for yrs msgid "Yarsun" -msgstr "" +msgstr "Yarsun" #. name for yrw msgid "Yarawata" -msgstr "" +msgstr "Yarawata" #. name for ysc msgid "Yassic" -msgstr "" +msgstr "Yassic" #. name for ysd msgid "Samatao" -msgstr "" +msgstr "Samatao" #. name for ysl msgid "Yugoslavian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Yugoslavia" #. name for ysn msgid "Sani" -msgstr "" +msgstr "Sani" #. name for yso msgid "Nisi (China)" -msgstr "" +msgstr "Nisi (Cina)" #. name for ysp msgid "Lolopo; Southern" -msgstr "" +msgstr "Lolopo; Selatan" #. name for ysr msgid "Yupik; Sirenik" -msgstr "" +msgstr "Yupik; Sirenik" #. name for yss msgid "Yessan-Mayo" -msgstr "" +msgstr "Yessan-Mayo" #. name for ysy msgid "Sanie" -msgstr "" +msgstr "Sanie" #. name for yta msgid "Talu" -msgstr "" +msgstr "Talu" #. name for ytl msgid "Tanglang" -msgstr "" +msgstr "Tanglang" #. name for ytp msgid "Thopho" -msgstr "" +msgstr "Thopho" #. name for ytw msgid "Yout Wam" -msgstr "" +msgstr "Yout Wam" #. name for yua msgid "Maya; Yucatec" -msgstr "" +msgstr "Maya; Yucatec" #. name for yub msgid "Yugambal" -msgstr "" +msgstr "Yugambal" #. name for yuc msgid "Yuchi" -msgstr "" +msgstr "Yuchi" #. name for yud msgid "Arabic; Judeo-Tripolitanian" -msgstr "" +msgstr "Arab; Yahudi-Tripoli" #. name for yue msgid "Chinese; Yue" -msgstr "" +msgstr "Cina; Yue" #. name for yuf msgid "Havasupai-Walapai-Yavapai" -msgstr "" +msgstr "Havasupai-Walapai-Yavapai" #. name for yug msgid "Yug" -msgstr "" +msgstr "Yug" #. name for yui msgid "Yurutí" -msgstr "" +msgstr "Yurutí" #. name for yuj msgid "Karkar-Yuri" -msgstr "" +msgstr "Karkar-Yuri" #. name for yuk msgid "Yuki" -msgstr "" +msgstr "Yuki" #. name for yul msgid "Yulu" -msgstr "" +msgstr "Yulu" #. name for yum msgid "Quechan" -msgstr "" +msgstr "Quechan" #. name for yun msgid "Bena (Nigeria)" -msgstr "" +msgstr "Bena (Nigeria)" #. name for yup msgid "Yukpa" -msgstr "" +msgstr "Yukpa" #. name for yuq msgid "Yuqui" -msgstr "" +msgstr "Yuqui" #. name for yur msgid "Yurok" -msgstr "" +msgstr "Yurok" #. name for yut msgid "Yopno" -msgstr "" +msgstr "Yopno" #. name for yuu msgid "Yugh" -msgstr "" +msgstr "Yugh" #. name for yuw msgid "Yau (Morobe Province)" -msgstr "" +msgstr "Yau (Wilayah Morobe)" #. name for yux msgid "Yukaghir; Southern" -msgstr "" +msgstr "Yukaghir; Selatan" #. name for yuy msgid "Yugur; East" -msgstr "" +msgstr "Yugur; Timur" #. name for yuz msgid "Yuracare" -msgstr "" +msgstr "Yuracare" #. name for yva msgid "Yawa" -msgstr "" +msgstr "Yawa" #. name for yvt msgid "Yavitero" -msgstr "" +msgstr "Yavitero" #. name for ywa msgid "Kalou" -msgstr "" +msgstr "Kalou" #. name for ywl msgid "Lalu; Western" -msgstr "" +msgstr "Lalu; Barat" #. name for ywn msgid "Yawanawa" -msgstr "" +msgstr "Yawanawa" #. name for ywq msgid "Yi; Wuding-Luquan" -msgstr "" +msgstr "Yi; Wuding-Luquan" #. name for ywr msgid "Yawuru" -msgstr "" +msgstr "Yawuru" #. name for ywt msgid "Lalo; Xishanba" -msgstr "" +msgstr "Lalo; Xishanba" #. name for ywu msgid "Nasu; Wumeng" -msgstr "" +msgstr "Nasu; Wumeng" #. name for yww msgid "Yawarawarga" -msgstr "" +msgstr "Yawarawarga" #. name for yyu msgid "Yau (Sandaun Province)" -msgstr "" +msgstr "Yau (Wilayah Sandaun)" #. name for yyz msgid "Ayizi" -msgstr "" +msgstr "Ayizi" #. name for yzg msgid "Buyang; E'ma" -msgstr "" +msgstr "Buyang; E'ma" #. name for yzk msgid "Zokhuo" -msgstr "" +msgstr "Zokhuo" #. name for zaa msgid "Zapotec; Sierra de Juárez" -msgstr "" +msgstr "Zapotec; Sierra de Juárez" #. name for zab msgid "Zapotec; San Juan Guelavía" -msgstr "" +msgstr "Zapotec; San Juan Guelavía" #. name for zac msgid "Zapotec; Ocotlán" -msgstr "" +msgstr "Zapotec; Ocotlán" #. name for zad msgid "Zapotec; Cajonos" -msgstr "" +msgstr "Zapotec; Cajonos" #. name for zae msgid "Zapotec; Yareni" -msgstr "" +msgstr "Zapotec; Yareni" #. name for zaf msgid "Zapotec; Ayoquesco" -msgstr "" +msgstr "Zapotec; Ayoquesco" #. name for zag msgid "Zaghawa" -msgstr "" +msgstr "Zaghawa" #. name for zah msgid "Zangwal" -msgstr "" +msgstr "Zangwal" #. name for zai msgid "Zapotec; Isthmus" -msgstr "" +msgstr "Zapotec; Isthmus" #. name for zaj msgid "Zaramo" -msgstr "" +msgstr "Zaramo" #. name for zak msgid "Zanaki" -msgstr "" +msgstr "Zanaki" #. name for zal msgid "Zauzou" -msgstr "" +msgstr "Zauzou" #. name for zam msgid "Zapotec; Miahuatlán" -msgstr "" +msgstr "Zapotec; Miahuatlán" #. name for zao msgid "Zapotec; Ozolotepec" -msgstr "" +msgstr "Zapotec; Ozolotepec" #. name for zap msgid "Zapotec" -msgstr "" +msgstr "Zapotec" #. name for zaq msgid "Zapotec; Aloápam" -msgstr "" +msgstr "Zapotec; Aloápam" #. name for zar msgid "Zapotec; Rincón" -msgstr "" +msgstr "Zapotec; Rincón" #. name for zas msgid "Zapotec; Santo Domingo Albarradas" -msgstr "" +msgstr "Zapotec; Santo Domingo Albarradas" #. name for zat msgid "Zapotec; Tabaa" -msgstr "" +msgstr "Zapotec; Tabaa" #. name for zau msgid "Zangskari" -msgstr "" +msgstr "Zangskari" #. name for zav msgid "Zapotec; Yatzachi" -msgstr "" +msgstr "Zapotec; Yatzachi" #. name for zaw msgid "Zapotec; Mitla" -msgstr "" +msgstr "Zapotec; Mitla" #. name for zax msgid "Zapotec; Xadani" -msgstr "" +msgstr "Zapotec; Xadani" #. name for zay msgid "Zayse-Zergulla" -msgstr "" +msgstr "Zayse-Zergulla" #. name for zaz msgid "Zari" -msgstr "" +msgstr "Zari" #. name for zbc msgid "Berawan; Central" -msgstr "" +msgstr "Berawan; Tengah" #. name for zbe msgid "Berawan; East" -msgstr "" +msgstr "Berawan; Timur" #. name for zbl msgid "Blissymbols" -msgstr "" +msgstr "Blissymbols" #. name for zbt msgid "Batui" -msgstr "" +msgstr "Batui" #. name for zbw msgid "Berawan; West" -msgstr "" +msgstr "Berawan; Barat" #. name for zca msgid "Zapotec; Coatecas Altas" -msgstr "" +msgstr "Zapotec; Coatecas Altas" #. name for zch msgid "Zhuang; Central Hongshuihe" -msgstr "" +msgstr "Zhuang; Hongshuihe Tengah" #. name for zdj msgid "Comorian; Ngazidja" -msgstr "" +msgstr "Comorian; Ngazidja" #. name for zea msgid "Zeeuws" -msgstr "" +msgstr "Zeeuws" #. name for zeg msgid "Zenag" -msgstr "" +msgstr "Zenag" #. name for zeh msgid "Zhuang; Eastern Hongshuihe" -msgstr "" +msgstr "Zhuang; Hongshuihe Timur" #. name for zen msgid "Zenaga" -msgstr "" +msgstr "Zenaga" #. name for zga msgid "Kinga" -msgstr "" +msgstr "Kinga" #. name for zgb msgid "Zhuang; Guibei" -msgstr "" +msgstr "Zhuang; Guibei" #. name for zgm msgid "Zhuang; Minz" -msgstr "" +msgstr "Zhuang; Minz" #. name for zgn msgid "Zhuang; Guibian" -msgstr "" +msgstr "Zhuang; Guibian" #. name for zgr msgid "Magori" -msgstr "" +msgstr "Magori" #. name for zha msgid "Zhuang" -msgstr "" +msgstr "Zhuang" #. name for zhb msgid "Zhaba" -msgstr "" +msgstr "Zhaba" #. name for zhd msgid "Zhuang; Dai" -msgstr "" +msgstr "Zhuang; Dai" #. name for zhi msgid "Zhire" -msgstr "" +msgstr "Zhire" #. name for zhn msgid "Zhuang; Nong" -msgstr "" +msgstr "Zhuang; Nong" #. name for zho msgid "Chinese" @@ -30336,520 +30336,520 @@ msgstr "Chinese" #. name for zhw msgid "Zhoa" -msgstr "" +msgstr "Zhoa" #. name for zia msgid "Zia" -msgstr "" +msgstr "Zia" #. name for zib msgid "Zimbabwe Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Zimbabwe" #. name for zik msgid "Zimakani" -msgstr "" +msgstr "Zimakani" #. name for zil msgid "Zialo" -msgstr "" +msgstr "Zialo" #. name for zim msgid "Mesme" -msgstr "" +msgstr "Mesme" #. name for zin msgid "Zinza" -msgstr "" +msgstr "Zinza" #. name for zir msgid "Ziriya" -msgstr "" +msgstr "Ziriya" #. name for ziw msgid "Zigula" -msgstr "" +msgstr "Zigula" #. name for ziz msgid "Zizilivakan" -msgstr "" +msgstr "Zizilivakan" #. name for zka msgid "Kaimbulawa" -msgstr "" +msgstr "Kaimbulawa" #. name for zkb msgid "Koibal" -msgstr "" +msgstr "Koibal" #. name for zkg msgid "Koguryo" -msgstr "" +msgstr "Koguryo" #. name for zkh msgid "Khorezmian" -msgstr "" +msgstr "Khorezmian" #. name for zkk msgid "Karankawa" -msgstr "" +msgstr "Karankawa" #. name for zko msgid "Kott" -msgstr "" +msgstr "Kott" #. name for zkp msgid "Kaingáng; São Paulo" -msgstr "" +msgstr "Kaingáng; São Paulo" #. name for zkr msgid "Zakhring" -msgstr "" +msgstr "Zakhring" #. name for zkt msgid "Kitan" -msgstr "" +msgstr "Kitan" #. name for zku msgid "Kaurna" -msgstr "" +msgstr "Kaurna" #. name for zkv msgid "Krevinian" -msgstr "" +msgstr "Krevinian" #. name for zkz msgid "Khazar" -msgstr "" +msgstr "Khazar" #. name for zlj msgid "Zhuang; Liujiang" -msgstr "" +msgstr "Zhuang; Liujiang" #. name for zlm msgid "Malay (individual language)" -msgstr "" +msgstr "Melayu (bahasa individu)" #. name for zln msgid "Zhuang; Lianshan" -msgstr "" +msgstr "Zhuang; Lianshan" #. name for zlq msgid "Zhuang; Liuqian" -msgstr "" +msgstr "Zhuang; Liuqian" #. name for zma msgid "Manda (Australia)" -msgstr "" +msgstr "Manda (Australia)" #. name for zmb msgid "Zimba" -msgstr "" +msgstr "Zimba" #. name for zmc msgid "Margany" -msgstr "" +msgstr "Margany" #. name for zmd msgid "Maridan" -msgstr "" +msgstr "Maridan" #. name for zme msgid "Mangerr" -msgstr "" +msgstr "Mangerr" #. name for zmf msgid "Mfinu" -msgstr "" +msgstr "Mfinu" #. name for zmg msgid "Marti Ke" -msgstr "" +msgstr "Marti Ke" #. name for zmh msgid "Makolkol" -msgstr "" +msgstr "Makolkol" #. name for zmi msgid "Negeri Sembilan Malay" -msgstr "" +msgstr "Melayu Negeri Sembilan" #. name for zmj msgid "Maridjabin" -msgstr "" +msgstr "Maridjabin" #. name for zmk msgid "Mandandanyi" -msgstr "" +msgstr "Mandandanyi" #. name for zml msgid "Madngele" -msgstr "" +msgstr "Madngele" #. name for zmm msgid "Marimanindji" -msgstr "" +msgstr "Marimanindji" #. name for zmn msgid "Mbangwe" -msgstr "" +msgstr "Mbangwe" #. name for zmo msgid "Molo" -msgstr "" +msgstr "Molo" #. name for zmp msgid "Mpuono" -msgstr "" +msgstr "Mpuono" #. name for zmq msgid "Mituku" -msgstr "" +msgstr "Mituku" #. name for zmr msgid "Maranunggu" -msgstr "" +msgstr "Maranunggu" #. name for zms msgid "Mbesa" -msgstr "" +msgstr "Mbesa" #. name for zmt msgid "Maringarr" -msgstr "" +msgstr "Maringarr" #. name for zmu msgid "Muruwari" -msgstr "" +msgstr "Muruwari" #. name for zmv msgid "Mbariman-Gudhinma" -msgstr "" +msgstr "Mbariman-Gudhinma" #. name for zmw msgid "Mbo (Democratic Republic of Congo)" -msgstr "" +msgstr "Mbo (Republik Demokratik Congo)" #. name for zmx msgid "Bomitaba" -msgstr "" +msgstr "Bomitaba" #. name for zmy msgid "Mariyedi" -msgstr "" +msgstr "Mariyedi" #. name for zmz msgid "Mbandja" -msgstr "" +msgstr "Mbandja" #. name for zna msgid "Zan Gula" -msgstr "" +msgstr "Zan Gula" #. name for zne msgid "Zande (individual language)" -msgstr "" +msgstr "Zande (bahasa individu)" #. name for zng msgid "Mang" -msgstr "" +msgstr "Mang" #. name for znk msgid "Manangkari" -msgstr "" +msgstr "Manangkari" #. name for zns msgid "Mangas" -msgstr "" +msgstr "Mangas" #. name for zoc msgid "Zoque; Copainalá" -msgstr "" +msgstr "Zoque; Copainalá" #. name for zoh msgid "Zoque; Chimalapa" -msgstr "" +msgstr "Zoque; Chimalapa" #. name for zom msgid "Zou" -msgstr "" +msgstr "Zou" #. name for zoo msgid "Zapotec; Asunción Mixtepec" -msgstr "" +msgstr "Zapotec; Asunción Mixtepec" #. name for zoq msgid "Zoque; Tabasco" -msgstr "" +msgstr "Zoque; Tabasco" #. name for zor msgid "Zoque; Rayón" -msgstr "" +msgstr "Zoque; Rayón" #. name for zos msgid "Zoque; Francisco León" -msgstr "" +msgstr "Zoque; Francisco León" #. name for zpa msgid "Zapotec; Lachiguiri" -msgstr "" +msgstr "Zapotec; Lachiguiri" #. name for zpb msgid "Zapotec; Yautepec" -msgstr "" +msgstr "Zapotec; Yautepec" #. name for zpc msgid "Zapotec; Choapan" -msgstr "" +msgstr "Zapotec; Choapan" #. name for zpd msgid "Zapotec; Southeastern Ixtlán" -msgstr "" +msgstr "Zapotec; Ixtlán Tenggara" #. name for zpe msgid "Zapotec; Petapa" -msgstr "" +msgstr "Zapotec; Petapa" #. name for zpf msgid "Zapotec; San Pedro Quiatoni" -msgstr "" +msgstr "Zapotec; San Pedro Quiatoni" #. name for zpg msgid "Zapotec; Guevea De Humboldt" -msgstr "" +msgstr "Zapotec; Guevea De Humboldt" #. name for zph msgid "Zapotec; Totomachapan" -msgstr "" +msgstr "Zapotec; Totomachapan" #. name for zpi msgid "Zapotec; Santa María Quiegolani" -msgstr "" +msgstr "Zapotec; Santa María Quiegolani" #. name for zpj msgid "Zapotec; Quiavicuzas" -msgstr "" +msgstr "Zapotec; Quiavicuzas" #. name for zpk msgid "Zapotec; Tlacolulita" -msgstr "" +msgstr "Zapotec; Tlacolulita" #. name for zpl msgid "Zapotec; Lachixío" -msgstr "" +msgstr "Zapotec; Lachixío" #. name for zpm msgid "Zapotec; Mixtepec" -msgstr "" +msgstr "Zapotec; Mixtepec" #. name for zpn msgid "Zapotec; Santa Inés Yatzechi" -msgstr "" +msgstr "Zapotec; Santa Inés Yatzechi" #. name for zpo msgid "Zapotec; Amatlán" -msgstr "" +msgstr "Zapotec; Amatlán" #. name for zpp msgid "Zapotec; El Alto" -msgstr "" +msgstr "Zapotec; El Alto" #. name for zpq msgid "Zapotec; Zoogocho" -msgstr "" +msgstr "Zapotec; Zoogocho" #. name for zpr msgid "Zapotec; Santiago Xanica" -msgstr "" +msgstr "Zapotec; Santiago Xanica" #. name for zps msgid "Zapotec; Coatlán" -msgstr "" +msgstr "Zapotec; Coatlán" #. name for zpt msgid "Zapotec; San Vicente Coatlán" -msgstr "" +msgstr "Zapotec; San Vicente Coatlán" #. name for zpu msgid "Zapotec; Yalálag" -msgstr "" +msgstr "Zapotec; Yalálag" #. name for zpv msgid "Zapotec; Chichicapan" -msgstr "" +msgstr "Zapotec; Chichicapan" #. name for zpw msgid "Zapotec; Zaniza" -msgstr "" +msgstr "Zapotec; Zaniza" #. name for zpx msgid "Zapotec; San Baltazar Loxicha" -msgstr "" +msgstr "Zapotec; San Baltazar Loxicha" #. name for zpy msgid "Zapotec; Mazaltepec" -msgstr "" +msgstr "Zapotec; Mazaltepec" #. name for zpz msgid "Zapotec; Texmelucan" -msgstr "" +msgstr "Zapotec; Texmelucan" #. name for zqe msgid "Zhuang; Qiubei" -msgstr "" +msgstr "Zhuang; Qiubei" #. name for zra msgid "Kara (Korea)" -msgstr "" +msgstr "Kara (Korea)" #. name for zrg msgid "Mirgan" -msgstr "" +msgstr "Mirgan" #. name for zrn msgid "Zerenkel" -msgstr "" +msgstr "Zerenkel" #. name for zro msgid "Záparo" -msgstr "" +msgstr "Záparo" #. name for zrp msgid "Zarphatic" -msgstr "" +msgstr "Zarphatic" #. name for zrs msgid "Mairasi" -msgstr "" +msgstr "Mairasi" #. name for zsa msgid "Sarasira" -msgstr "" +msgstr "Sarasira" #. name for zsk msgid "Kaskean" -msgstr "" +msgstr "Kaskean" #. name for zsl msgid "Zambian Sign Language" -msgstr "" +msgstr "Bahasa Isyarat Zambia" #. name for zsm msgid "Malay; Standard" -msgstr "" +msgstr "Melayu; Piawai" #. name for zsr msgid "Zapotec; Southern Rincon" -msgstr "" +msgstr "Zapotec; Rincon Selatan" #. name for zsu msgid "Sukurum" -msgstr "" +msgstr "Sukurum" #. name for zte msgid "Zapotec; Elotepec" -msgstr "" +msgstr "Zapotec; Elotepec" #. name for ztg msgid "Zapotec; Xanaguía" -msgstr "" +msgstr "Zapotec; Xanaguía" #. name for ztl msgid "Zapotec; Lapaguía-Guivini" -msgstr "" +msgstr "Zapotec; Lapaguía-Guivini" #. name for ztm msgid "Zapotec; San Agustín Mixtepec" -msgstr "" +msgstr "Zapotec; San Agustín Mixtepec" #. name for ztn msgid "Zapotec; Santa Catarina Albarradas" -msgstr "" +msgstr "Zapotec; Santa Catarina Albarradas" #. name for ztp msgid "Zapotec; Loxicha" -msgstr "" +msgstr "Zapotec; Loxicha" #. name for ztq msgid "Zapotec; Quioquitani-Quierí" -msgstr "" +msgstr "Zapotec; Quioquitani-Quierí" #. name for zts msgid "Zapotec; Tilquiapan" -msgstr "" +msgstr "Zapotec; Tilquiapan" #. name for ztt msgid "Zapotec; Tejalapan" -msgstr "" +msgstr "Zapotec; Tejalapan" #. name for ztu msgid "Zapotec; Güilá" -msgstr "" +msgstr "Zapotec; Güilá" #. name for ztx msgid "Zapotec; Zaachila" -msgstr "" +msgstr "Zapotec; Zaachila" #. name for zty msgid "Zapotec; Yatee" -msgstr "" +msgstr "Zapotec; Yatee" #. name for zua msgid "Zeem" -msgstr "" +msgstr "Zeem" #. name for zuh msgid "Tokano" -msgstr "" +msgstr "Tokano" #. name for zul msgid "Zulu" -msgstr "" +msgstr "Zulu" #. name for zum msgid "Kumzari" -msgstr "" +msgstr "Kumzari" #. name for zun msgid "Zuni" -msgstr "" +msgstr "Zuni" #. name for zuy msgid "Zumaya" -msgstr "" +msgstr "Zumaya" #. name for zwa msgid "Zay" -msgstr "" +msgstr "Zay" #. name for zxx msgid "No linguistic content" -msgstr "" +msgstr "Tiada kandungan bahasa" #. name for zyb msgid "Zhuang; Yongbei" -msgstr "" +msgstr "Zhuang; Yongbei" #. name for zyg msgid "Zhuang; Yang" -msgstr "" +msgstr "Zhuang; Yang" #. name for zyj msgid "Zhuang; Youjiang" -msgstr "" +msgstr "Zhuang; Youjiang" #. name for zyn msgid "Zhuang; Yongnan" -msgstr "" +msgstr "Zhuang; Yongnan" #. name for zyp msgid "Zyphe" -msgstr "" +msgstr "Zyphe" #. name for zza msgid "Zaza" -msgstr "" +msgstr "Zaza" #. name for zzj msgid "Zhuang; Zuojiang" -msgstr "" +msgstr "Zhuang; Zuojiang" diff --git a/setup/iso_639/pt_BR.po b/setup/iso_639/pt_BR.po index 0985886f33..55ad09de20 100644 --- a/setup/iso_639/pt_BR.po +++ b/setup/iso_639/pt_BR.po @@ -9,35 +9,35 @@ msgstr "" "Report-Msgid-Bugs-To: Debian iso-codes team \n" "POT-Creation-Date: 2011-11-25 14:01+0000\n" -"PO-Revision-Date: 2011-09-27 16:27+0000\n" -"Last-Translator: Kovid Goyal \n" +"PO-Revision-Date: 2012-12-21 03:31+0000\n" +"Last-Translator: Fábio Malcher Miranda \n" "Language-Team: Brazilian Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-26 05:47+0000\n" -"X-Generator: Launchpad (build 14381)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:59+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Language: \n" #. name for aaa msgid "Ghotuo" -msgstr "" +msgstr "Ghotuo" #. name for aab msgid "Alumu-Tesu" -msgstr "" +msgstr "Alumu-Tesu" #. name for aac msgid "Ari" -msgstr "" +msgstr "Ari" #. name for aad msgid "Amal" -msgstr "" +msgstr "Amal" #. name for aae msgid "Albanian; Arbëreshë" -msgstr "" +msgstr "Albanês; Arbëreshë" #. name for aaf msgid "Aranadan" @@ -45,7 +45,7 @@ msgstr "" #. name for aag msgid "Ambrak" -msgstr "" +msgstr "Ambrak" #. name for aah msgid "Arapesh; Abu'" @@ -53,23 +53,23 @@ msgstr "" #. name for aai msgid "Arifama-Miniafia" -msgstr "" +msgstr "Arifama-Miniafia" #. name for aak msgid "Ankave" -msgstr "" +msgstr "Ankave" #. name for aal msgid "Afade" -msgstr "" +msgstr "Afade" #. name for aam msgid "Aramanik" -msgstr "" +msgstr "Aramaico" #. name for aan msgid "Anambé" -msgstr "" +msgstr "Anambé" #. name for aao msgid "Arabic; Algerian Saharan" @@ -77,7 +77,7 @@ msgstr "" #. name for aap msgid "Arára; Pará" -msgstr "" +msgstr "Arara; Pará" #. name for aaq msgid "Abnaki; Eastern" @@ -89,7 +89,7 @@ msgstr "" #. name for aas msgid "Aasáx" -msgstr "" +msgstr "Aasáx" #. name for aat msgid "Albanian; Arvanitika" @@ -97,27 +97,27 @@ msgstr "" #. name for aau msgid "Abau" -msgstr "" +msgstr "Abau" #. name for aaw msgid "Solong" -msgstr "" +msgstr "Solong" #. name for aax msgid "Mandobo Atas" -msgstr "" +msgstr "Mandobo Atas" #. name for aaz msgid "Amarasi" -msgstr "" +msgstr "Amarasi" #. name for aba msgid "Abé" -msgstr "" +msgstr "Abé" #. name for abb msgid "Bankon" -msgstr "" +msgstr "Bankon" #. name for abc msgid "Ayta; Ambala" @@ -125,7 +125,7 @@ msgstr "" #. name for abd msgid "Manide" -msgstr "" +msgstr "Manide" #. name for abe msgid "Abnaki; Western" @@ -145,11 +145,11 @@ msgstr "" #. name for abi msgid "Abidji" -msgstr "" +msgstr "Abidji" #. name for abj msgid "Aka-Bea" -msgstr "" +msgstr "Aka-Bea" #. name for abk msgid "Abkhazian" @@ -157,19 +157,19 @@ msgstr "" #. name for abl msgid "Lampung Nyo" -msgstr "" +msgstr "Lampung Nyo" #. name for abm msgid "Abanyom" -msgstr "" +msgstr "Abanyom" #. name for abn msgid "Abua" -msgstr "" +msgstr "Abua" #. name for abo msgid "Abon" -msgstr "" +msgstr "Abon" #. name for abp msgid "Ayta; Abellen" @@ -177,11 +177,11 @@ msgstr "" #. name for abq msgid "Abaza" -msgstr "" +msgstr "Abaza" #. name for abr msgid "Abron" -msgstr "" +msgstr "Abron" #. name for abs msgid "Malay; Ambonese" @@ -189,11 +189,11 @@ msgstr "" #. name for abt msgid "Ambulas" -msgstr "" +msgstr "Ambulas" #. name for abu msgid "Abure" -msgstr "" +msgstr "Abure" #. name for abv msgid "Arabic; Baharna" @@ -201,15 +201,15 @@ msgstr "" #. name for abw msgid "Pal" -msgstr "" +msgstr "Pal" #. name for abx msgid "Inabaknon" -msgstr "" +msgstr "Inabaknon" #. name for aby msgid "Aneme Wake" -msgstr "" +msgstr "Aneme Wake" #. name for abz msgid "Abui" @@ -225,7 +225,7 @@ msgstr "" #. name for acd msgid "Gikyode" -msgstr "" +msgstr "Gikyode" #. name for ace msgid "Achinese" @@ -241,15 +241,15 @@ msgstr "" #. name for aci msgid "Aka-Cari" -msgstr "" +msgstr "Aka-Cari" #. name for ack msgid "Aka-Kora" -msgstr "" +msgstr "Aka-Kora" #. name for acl msgid "Akar-Bale" -msgstr "" +msgstr "Akar-Bale" #. name for acm msgid "Arabic; Mesopotamian" @@ -257,7 +257,7 @@ msgstr "" #. name for acn msgid "Achang" -msgstr "" +msgstr "Achang" #. name for acp msgid "Acipa; Eastern" @@ -269,23 +269,23 @@ msgstr "" #. name for acr msgid "Achi" -msgstr "" +msgstr "Achi" #. name for acs msgid "Acroá" -msgstr "" +msgstr "Acroá" #. name for act msgid "Achterhoeks" -msgstr "" +msgstr "Achterhoeks" #. name for acu msgid "Achuar-Shiwiar" -msgstr "" +msgstr "Achuar-Shiwiar" #. name for acv msgid "Achumawi" -msgstr "" +msgstr "Achumawi" #. name for acw msgid "Arabic; Hijazi" @@ -301,23 +301,23 @@ msgstr "" #. name for acz msgid "Acheron" -msgstr "" +msgstr "Acheron" #. name for ada msgid "Adangme" -msgstr "" +msgstr "Adangme" #. name for adb msgid "Adabe" -msgstr "" +msgstr "Adabe" #. name for add msgid "Dzodinka" -msgstr "" +msgstr "Dzodinka" #. name for ade msgid "Adele" -msgstr "" +msgstr "Adele" #. name for adf msgid "Arabic; Dhofari" @@ -325,59 +325,59 @@ msgstr "" #. name for adg msgid "Andegerebinha" -msgstr "" +msgstr "Andegerebinha" #. name for adh msgid "Adhola" -msgstr "" +msgstr "Adhola" #. name for adi msgid "Adi" -msgstr "" +msgstr "Adi" #. name for adj msgid "Adioukrou" -msgstr "" +msgstr "Adioukrou" #. name for adl msgid "Galo" -msgstr "" +msgstr "Gaulês" #. name for adn msgid "Adang" -msgstr "" +msgstr "Adang" #. name for ado msgid "Abu" -msgstr "" +msgstr "Abu" #. name for adp msgid "Adap" -msgstr "" +msgstr "Adap" #. name for adq msgid "Adangbe" -msgstr "" +msgstr "Adangbe" #. name for adr msgid "Adonara" -msgstr "" +msgstr "Adonara" #. name for ads msgid "Adamorobe Sign Language" -msgstr "" +msgstr "Idiomas de Sinais Adamorobe" #. name for adt msgid "Adnyamathanha" -msgstr "" +msgstr "Adnyamathanha" #. name for adu msgid "Aduge" -msgstr "" +msgstr "Aduge" #. name for adw msgid "Amundava" -msgstr "" +msgstr "Amundava" #. name for adx msgid "Tibetan; Amdo" @@ -385,11 +385,11 @@ msgstr "" #. name for ady msgid "Adyghe" -msgstr "" +msgstr "Adigue" #. name for adz msgid "Adzera" -msgstr "" +msgstr "Adzera" #. name for aea msgid "Areba" @@ -405,7 +405,7 @@ msgstr "" #. name for aed msgid "Argentine Sign Language" -msgstr "" +msgstr "Idiomas de Sinais Argentino" #. name for aee msgid "Pashayi; Northeast" @@ -413,23 +413,23 @@ msgstr "" #. name for aek msgid "Haeke" -msgstr "" +msgstr "Haeke" #. name for ael msgid "Ambele" -msgstr "" +msgstr "Ambele" #. name for aem msgid "Arem" -msgstr "" +msgstr "Arem" #. name for aen msgid "Armenian Sign Language" -msgstr "" +msgstr "Idiomas de Sinais Americano" #. name for aeq msgid "Aer" -msgstr "" +msgstr "Aer" #. name for aer msgid "Arrernte; Eastern" @@ -437,23 +437,23 @@ msgstr "" #. name for aes msgid "Alsea" -msgstr "" +msgstr "Alsea" #. name for aeu msgid "Akeu" -msgstr "" +msgstr "Akeu" #. name for aew msgid "Ambakich" -msgstr "" +msgstr "Ambakich" #. name for aey msgid "Amele" -msgstr "" +msgstr "Amele" #. name for aez msgid "Aeka" -msgstr "" +msgstr "Aeka" #. name for afb msgid "Arabic; Gulf" @@ -461,11 +461,11 @@ msgstr "" #. name for afd msgid "Andai" -msgstr "" +msgstr "Andai" #. name for afe msgid "Putukwam" -msgstr "" +msgstr "Putukwam" #. name for afg msgid "Afghan Sign Language" @@ -473,27 +473,27 @@ msgstr "" #. name for afh msgid "Afrihili" -msgstr "" +msgstr "Afrihili" #. name for afi msgid "Akrukay" -msgstr "" +msgstr "Akrukay" #. name for afk msgid "Nanubae" -msgstr "" +msgstr "Nanubae" #. name for afn msgid "Defaka" -msgstr "" +msgstr "Defaka" #. name for afo msgid "Eloyi" -msgstr "" +msgstr "Eloyi" #. name for afp msgid "Tapei" -msgstr "" +msgstr "Tapei" #. name for afr msgid "Afrikaans" @@ -505,55 +505,55 @@ msgstr "" #. name for aft msgid "Afitti" -msgstr "" +msgstr "Afitti" #. name for afu msgid "Awutu" -msgstr "" +msgstr "Awutu" #. name for afz msgid "Obokuitai" -msgstr "" +msgstr "Obokuitai" #. name for aga msgid "Aguano" -msgstr "" +msgstr "Aguano" #. name for agb msgid "Legbo" -msgstr "" +msgstr "Legbo" #. name for agc msgid "Agatu" -msgstr "" +msgstr "Agatu" #. name for agd msgid "Agarabi" -msgstr "" +msgstr "Agarabi" #. name for age msgid "Angal" -msgstr "" +msgstr "Angal" #. name for agf msgid "Arguni" -msgstr "" +msgstr "Arguni" #. name for agg msgid "Angor" -msgstr "" +msgstr "Angor" #. name for agh msgid "Ngelima" -msgstr "" +msgstr "Ngelima" #. name for agi msgid "Agariya" -msgstr "" +msgstr "Agariya" #. name for agj msgid "Argobba" -msgstr "" +msgstr "Argobba" #. name for agk msgid "Agta; Isarog" @@ -561,31 +561,31 @@ msgstr "" #. name for agl msgid "Fembe" -msgstr "" +msgstr "Fembe" #. name for agm msgid "Angaataha" -msgstr "" +msgstr "Angaataha" #. name for agn msgid "Agutaynen" -msgstr "" +msgstr "Agutaynen" #. name for ago msgid "Tainae" -msgstr "" +msgstr "Tainae" #. name for agq msgid "Aghem" -msgstr "" +msgstr "Aghem" #. name for agr msgid "Aguaruna" -msgstr "" +msgstr "Aguaruna" #. name for ags msgid "Esimbi" -msgstr "" +msgstr "Esimbi" #. name for agt msgid "Agta; Central Cagayan" @@ -593,7 +593,7 @@ msgstr "" #. name for agu msgid "Aguacateco" -msgstr "" +msgstr "Aguacateco" #. name for agv msgid "Dumagat; Remontado" @@ -601,11 +601,11 @@ msgstr "" #. name for agw msgid "Kahua" -msgstr "" +msgstr "Kahua" #. name for agx msgid "Aghul" -msgstr "" +msgstr "Aghul" #. name for agy msgid "Alta; Southern" @@ -617,19 +617,19 @@ msgstr "" #. name for aha msgid "Ahanta" -msgstr "" +msgstr "Ahanta" #. name for ahb msgid "Axamb" -msgstr "" +msgstr "Axamb" #. name for ahg msgid "Qimant" -msgstr "" +msgstr "Qimant" #. name for ahh msgid "Aghu" -msgstr "" +msgstr "Aghu" #. name for ahi msgid "Aizi; Tiagbamrin" @@ -637,11 +637,11 @@ msgstr "" #. name for ahk msgid "Akha" -msgstr "" +msgstr "Akha" #. name for ahl msgid "Igo" -msgstr "" +msgstr "Igo" #. name for ahm msgid "Aizi; Mobumrin" @@ -649,11 +649,11 @@ msgstr "" #. name for ahn msgid "Àhàn" -msgstr "" +msgstr "Àhàn" #. name for aho msgid "Ahom" -msgstr "" +msgstr "Ahom" #. name for ahp msgid "Aizi; Aproumu" @@ -661,39 +661,39 @@ msgstr "" #. name for ahr msgid "Ahirani" -msgstr "" +msgstr "Ahirani" #. name for ahs msgid "Ashe" -msgstr "" +msgstr "Ashe" #. name for aht msgid "Ahtena" -msgstr "" +msgstr "Ahtena" #. name for aia msgid "Arosi" -msgstr "" +msgstr "Arosi" #. name for aib msgid "Ainu (China)" -msgstr "" +msgstr "Ainu (China)" #. name for aic msgid "Ainbai" -msgstr "" +msgstr "Ainbai" #. name for aid msgid "Alngith" -msgstr "" +msgstr "Alngith" #. name for aie msgid "Amara" -msgstr "" +msgstr "Amara" #. name for aif msgid "Agi" -msgstr "" +msgstr "Agi" #. name for aig msgid "Creole English; Antigua and Barbuda" @@ -701,7 +701,7 @@ msgstr "" #. name for aih msgid "Ai-Cham" -msgstr "" +msgstr "Ai-Cham" #. name for aii msgid "Neo-Aramaic; Assyrian" @@ -709,35 +709,35 @@ msgstr "" #. name for aij msgid "Lishanid Noshan" -msgstr "" +msgstr "Lishanid Noshan" #. name for aik msgid "Ake" -msgstr "" +msgstr "Ake" #. name for ail msgid "Aimele" -msgstr "" +msgstr "Aimele" #. name for aim msgid "Aimol" -msgstr "" +msgstr "Aimol" #. name for ain msgid "Ainu (Japan)" -msgstr "" +msgstr "Ainu (Japão)" #. name for aio msgid "Aiton" -msgstr "" +msgstr "Aiton" #. name for aip msgid "Burumakok" -msgstr "" +msgstr "Burumakok" #. name for aiq msgid "Aimaq" -msgstr "" +msgstr "Aimaq" #. name for air msgid "Airoran" @@ -749,31 +749,31 @@ msgstr "" #. name for ait msgid "Arikem" -msgstr "" +msgstr "Arikem" #. name for aiw msgid "Aari" -msgstr "" +msgstr "Aari" #. name for aix msgid "Aighon" -msgstr "" +msgstr "Aighon" #. name for aiy msgid "Ali" -msgstr "" +msgstr "Ali" #. name for aja msgid "Aja (Sudan)" -msgstr "" +msgstr "Aja (Sudão)" #. name for ajg msgid "Aja (Benin)" -msgstr "" +msgstr "Aja (Benin)" #. name for aji msgid "Ajië" -msgstr "" +msgstr "Ajië" #. name for ajp msgid "Arabic; South Levantine" @@ -789,7 +789,7 @@ msgstr "" #. name for ajw msgid "Ajawa" -msgstr "" +msgstr "Ajawa" #. name for ajz msgid "Karbi; Amri" @@ -801,39 +801,39 @@ msgstr "" #. name for akb msgid "Batak Angkola" -msgstr "" +msgstr "Batak Angkola" #. name for akc msgid "Mpur" -msgstr "" +msgstr "Mpur" #. name for akd msgid "Ukpet-Ehom" -msgstr "" +msgstr "Ukpet-Ehom" #. name for ake msgid "Akawaio" -msgstr "" +msgstr "Akawaio" #. name for akf msgid "Akpa" -msgstr "" +msgstr "Akpa" #. name for akg msgid "Anakalangu" -msgstr "" +msgstr "Anakalangu" #. name for akh msgid "Angal Heneng" -msgstr "" +msgstr "Angal Heneng" #. name for aki msgid "Aiome" -msgstr "" +msgstr "Aiome" #. name for akj msgid "Aka-Jeru" -msgstr "" +msgstr "Aka-Jeru" #. name for akk msgid "Akkadian" @@ -845,51 +845,51 @@ msgstr "" #. name for akm msgid "Aka-Bo" -msgstr "" +msgstr "Aka-Bo" #. name for ako msgid "Akurio" -msgstr "" +msgstr "Akurio" #. name for akp msgid "Siwu" -msgstr "" +msgstr "Siwu" #. name for akq msgid "Ak" -msgstr "" +msgstr "Ak" #. name for akr msgid "Araki" -msgstr "" +msgstr "Araki" #. name for aks msgid "Akaselem" -msgstr "" +msgstr "Akaselem" #. name for akt msgid "Akolet" -msgstr "" +msgstr "Akolet" #. name for aku msgid "Akum" -msgstr "" +msgstr "Akum" #. name for akv msgid "Akhvakh" -msgstr "" +msgstr "Akhvakh" #. name for akw msgid "Akwa" -msgstr "" +msgstr "Akwa" #. name for akx msgid "Aka-Kede" -msgstr "" +msgstr "Aka-Kede" #. name for aky msgid "Aka-Kol" -msgstr "" +msgstr "Aka-Kol" #. name for akz msgid "Alabama" @@ -897,15 +897,15 @@ msgstr "" #. name for ala msgid "Alago" -msgstr "" +msgstr "Alago" #. name for alc msgid "Qawasqar" -msgstr "" +msgstr "Qawasqar" #. name for ald msgid "Alladian" -msgstr "" +msgstr "Alladian" #. name for ale msgid "Aleut" @@ -913,19 +913,19 @@ msgstr "" #. name for alf msgid "Alege" -msgstr "" +msgstr "Alege" #. name for alh msgid "Alawa" -msgstr "" +msgstr "Alawa" #. name for ali msgid "Amaimon" -msgstr "" +msgstr "Amaimon" #. name for alj msgid "Alangan" -msgstr "" +msgstr "Alangan" #. name for alk msgid "Alak" @@ -933,11 +933,11 @@ msgstr "" #. name for all msgid "Allar" -msgstr "" +msgstr "Allar" #. name for alm msgid "Amblong" -msgstr "" +msgstr "Amblong" #. name for aln msgid "Albanian; Gheg" @@ -945,19 +945,19 @@ msgstr "" #. name for alo msgid "Larike-Wakasihu" -msgstr "" +msgstr "Larike-Wakasihu" #. name for alp msgid "Alune" -msgstr "" +msgstr "Alune" #. name for alq msgid "Algonquin" -msgstr "" +msgstr "Algonquin" #. name for alr msgid "Alutor" -msgstr "" +msgstr "Alutor" #. name for als msgid "Albanian; Tosk" @@ -969,11 +969,11 @@ msgstr "" #. name for alu msgid "'Are'are" -msgstr "" +msgstr "'Are'are" #. name for alw msgid "Alaba-K’abeena" -msgstr "" +msgstr "Alaba-K’abeena" #. name for alx msgid "Amol" @@ -981,35 +981,35 @@ msgstr "" #. name for aly msgid "Alyawarr" -msgstr "" +msgstr "Alyawarr" #. name for alz msgid "Alur" -msgstr "" +msgstr "Alur" #. name for ama msgid "Amanayé" -msgstr "" +msgstr "Amanayé" #. name for amb msgid "Ambo" -msgstr "" +msgstr "Ambo" #. name for amc msgid "Amahuaca" -msgstr "" +msgstr "Amahuaca" #. name for ame msgid "Yanesha'" -msgstr "" +msgstr "Yanesha'" #. name for amf msgid "Hamer-Banna" -msgstr "" +msgstr "Hamer-Banna" #. name for amg msgid "Amarag" -msgstr "" +msgstr "Amarag" #. name for amh msgid "Amharic" @@ -1017,35 +1017,35 @@ msgstr "" #. name for ami msgid "Amis" -msgstr "" +msgstr "Amis" #. name for amj msgid "Amdang" -msgstr "" +msgstr "Amdang" #. name for amk msgid "Ambai" -msgstr "" +msgstr "Ambai" #. name for aml msgid "War-Jaintia" -msgstr "" +msgstr "Guerra-Jaintia" #. name for amm msgid "Ama (Papua New Guinea)" -msgstr "" +msgstr "Ama (Papua Nova Guiné)" #. name for amn msgid "Amanab" -msgstr "" +msgstr "Amanab" #. name for amo msgid "Amo" -msgstr "" +msgstr "Amo" #. name for amp msgid "Alamblak" -msgstr "" +msgstr "Alamblak" #. name for amq msgid "Amahai" @@ -1053,7 +1053,7 @@ msgstr "" #. name for amr msgid "Amarakaeri" -msgstr "" +msgstr "Amarakaeri" #. name for ams msgid "Amami-Oshima; Southern" @@ -1061,7 +1061,7 @@ msgstr "" #. name for amt msgid "Amto" -msgstr "" +msgstr "Amto" #. name for amu msgid "Amuzgo; Guerrero" @@ -1069,7 +1069,7 @@ msgstr "" #. name for amv msgid "Ambelau" -msgstr "" +msgstr "Ambelau" #. name for amw msgid "Neo-Aramaic; Western" @@ -1077,7 +1077,7 @@ msgstr "" #. name for amx msgid "Anmatyerre" -msgstr "" +msgstr "Anmatyerre" #. name for amy msgid "Ami" @@ -1085,31 +1085,31 @@ msgstr "" #. name for amz msgid "Atampaya" -msgstr "" +msgstr "Atampaya" #. name for ana msgid "Andaqui" -msgstr "" +msgstr "Andaqui" #. name for anb msgid "Andoa" -msgstr "" +msgstr "Andoa" #. name for anc msgid "Ngas" -msgstr "" +msgstr "Ngas" #. name for and msgid "Ansus" -msgstr "" +msgstr "Ansus" #. name for ane msgid "Xârâcùù" -msgstr "" +msgstr "Xârâcùù" #. name for anf msgid "Animere" -msgstr "" +msgstr "Animere" #. name for ang msgid "English; Old (ca. 450-1100)" @@ -1117,71 +1117,71 @@ msgstr "" #. name for anh msgid "Nend" -msgstr "" +msgstr "Nend" #. name for ani msgid "Andi" -msgstr "" +msgstr "Andi" #. name for anj msgid "Anor" -msgstr "" +msgstr "Anor" #. name for ank msgid "Goemai" -msgstr "" +msgstr "Goemai" #. name for anl msgid "Anu" -msgstr "" +msgstr "Anu" #. name for anm msgid "Anal" -msgstr "" +msgstr "Anal" #. name for ann msgid "Obolo" -msgstr "" +msgstr "Obolo" #. name for ano msgid "Andoque" -msgstr "" +msgstr "Andoque" #. name for anp msgid "Angika" -msgstr "" +msgstr "Angika" #. name for anq msgid "Jarawa (India)" -msgstr "" +msgstr "Jarawa (Índia)" #. name for anr msgid "Andh" -msgstr "" +msgstr "Andh" #. name for ans msgid "Anserma" -msgstr "" +msgstr "Anserma" #. name for ant msgid "Antakarinya" -msgstr "" +msgstr "Antakarinya" #. name for anu msgid "Anuak" -msgstr "" +msgstr "Anuak" #. name for anv msgid "Denya" -msgstr "" +msgstr "Denya" #. name for anw msgid "Anaang" -msgstr "" +msgstr "Anaang" #. name for anx msgid "Andra-Hus" -msgstr "" +msgstr "Andra-Hus" #. name for any msgid "Anyin" @@ -1189,7 +1189,7 @@ msgstr "" #. name for anz msgid "Anem" -msgstr "" +msgstr "Anem" #. name for aoa msgid "Angolar" @@ -1197,27 +1197,27 @@ msgstr "" #. name for aob msgid "Abom" -msgstr "" +msgstr "Abom" #. name for aoc msgid "Pemon" -msgstr "" +msgstr "Pemon" #. name for aod msgid "Andarum" -msgstr "" +msgstr "Andarum" #. name for aoe msgid "Angal Enen" -msgstr "" +msgstr "Angal Enen" #. name for aof msgid "Bragat" -msgstr "" +msgstr "Bragat" #. name for aog msgid "Angoram" -msgstr "" +msgstr "Angoram" #. name for aoh msgid "Arma" @@ -2021,7 +2021,7 @@ msgstr "" #. name for aze msgid "Azerbaijani" -msgstr "Azerbaidjani" +msgstr "Azerbaijano" #. name for azg msgid "Amuzgo; San Pedro Amuzgos" diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 164f37314a..ba56e1fc9e 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -4,7 +4,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = u'calibre' -numeric_version = (0, 9, 8) +numeric_version = (0, 9, 12) __version__ = u'.'.join(map(unicode, numeric_version)) __author__ = u"Kovid Goyal " @@ -100,6 +100,7 @@ class Plugins(collections.Mapping): 'freetype', 'woff', 'unrar', + 'qt_hack', ] if iswindows: plugins.extend(['winutil', 'wpd', 'winfonts']) diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 61f3031b8e..8229f32b57 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -661,7 +661,7 @@ from calibre.devices.nuut2.driver import NUUT2 from calibre.devices.iriver.driver import IRIVER_STORY from calibre.devices.binatone.driver import README from calibre.devices.hanvon.driver import (N516, EB511, ALEX, AZBOOKA, THEBOOK, - LIBREAIR, ODYSSEY) + LIBREAIR, ODYSSEY, KIBANO) from calibre.devices.edge.driver import EDGE from calibre.devices.teclast.driver import (TECLAST_K3, NEWSMY, IPAPYRUS, SOVOS, PICO, SUNSTECH_EB700, ARCHOS7O, STASH, WEXLER) @@ -712,7 +712,7 @@ plugins += [ BOOQ, EB600, README, - N516, + N516, KIBANO, THEBOOK, LIBREAIR, EB511, ELONEX, diff --git a/src/calibre/devices/__init__.py b/src/calibre/devices/__init__.py index ad719c8be8..97a5dbd9ef 100644 --- a/src/calibre/devices/__init__.py +++ b/src/calibre/devices/__init__.py @@ -121,6 +121,8 @@ def debug(ioreg_to_tmp=False, buf=None, plugins=None, out('\nDisabled plugins:', textwrap.fill(' '.join([x.__class__.__name__ for x in disabled_plugins]))) out(' ') + else: + out('\nNo disabled plugins') found_dev = False for dev in devplugins: if not dev.MANAGES_DEVICE_PRESENCE: continue diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index 87aede5f84..cc42cf33b2 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -10,7 +10,7 @@ import cStringIO from calibre.devices.usbms.driver import USBMS -HTC_BCDS = [0x100, 0x0222, 0x0226, 0x227, 0x228, 0x229, 0x9999] +HTC_BCDS = [0x100, 0x0222, 0x0226, 0x227, 0x228, 0x229, 0x0231, 0x9999] class ANDROID(USBMS): @@ -48,6 +48,7 @@ class ANDROID(USBMS): 0x2910 : HTC_BCDS, 0xe77 : HTC_BCDS, 0xff9 : HTC_BCDS, + 0x0001 : [0x255], }, # Eken @@ -92,7 +93,7 @@ class ANDROID(USBMS): # Google 0x18d1 : { 0x0001 : [0x0223, 0x230, 0x9999], - 0x0003 : [0x0230], + 0x0003 : [0x0230, 0x9999], 0x4e11 : [0x0100, 0x226, 0x227], 0x4e12 : [0x0100, 0x226, 0x227], 0x4e21 : [0x0100, 0x226, 0x227, 0x231], @@ -212,7 +213,8 @@ class ANDROID(USBMS): 'VIZIO', 'GOOGLE', 'FREESCAL', 'KOBO_INC', 'LENOVO', 'ROCKCHIP', 'POCKET', 'ONDA_MID', 'ZENITHIN', 'INGENIC', 'PMID701C', 'PD', 'PMP5097C', 'MASS', 'NOVO7', 'ZEKI', 'COBY', 'SXZ', 'USB_2.0', - 'COBY_MID', 'VS', 'AINOL', 'TOPWISE', 'PAD703'] + 'COBY_MID', 'VS', 'AINOL', 'TOPWISE', 'PAD703', 'NEXT8D12', + 'MEDIATEK'] WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE', '__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897', 'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', @@ -232,7 +234,7 @@ class ANDROID(USBMS): 'THINKPAD_TABLET', 'SGH-T989', 'YP-G70', 'STORAGE_DEVICE', 'ADVANCED', 'SGH-I727', 'USB_FLASH_DRIVER', 'ANDROID', 'S5830I_CARD', 'MID7042', 'LINK-CREATE', '7035', 'VIEWPAD_7E', - 'NOVO7', 'MB526', '_USB#WYK7MSF8KE', 'TABLET_PC'] + 'NOVO7', 'MB526', '_USB#WYK7MSF8KE', 'TABLET_PC', 'F', 'MT65XX_MS'] WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD', 'A70S', 'A101IT', '7', 'INCREDIBLE', 'A7EB', 'SGH-T849_CARD', @@ -243,7 +245,7 @@ class ANDROID(USBMS): 'FILE-CD_GADGET', 'GT-I9001_CARD', 'USB_2.0', 'XT875', 'UMS_COMPOSITE', 'PRO', '.KOBO_VOX', 'SGH-T989_CARD', 'SGH-I727', 'USB_FLASH_DRIVER', 'ANDROID', 'MID7042', '7035', 'VIEWPAD_7E', - 'NOVO7', 'ADVANCED', 'TABLET_PC'] + 'NOVO7', 'ADVANCED', 'TABLET_PC', 'F'] OSX_MAIN_MEM = 'Android Device Main Memory' diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index e4e073e383..eacb143790 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -__license__ = 'GPL v3' +__license__ = 'GPL v3' __copyright__ = '2010, Gregory Riker' __docformat__ = 'restructuredtext en' @@ -20,6 +20,7 @@ from calibre.utils.config import config_dir, dynamic, prefs from calibre.utils.date import now, parse_date from calibre.utils.zipfile import ZipFile + def strftime(fmt='%Y/%m/%d %H:%M:%S', dt=None): if not hasattr(dt, 'timetuple'): @@ -38,6 +39,7 @@ def logger(): _log = ThreadSafeLog() return _log + class AppleOpenFeedback(OpenFeedback): def __init__(self, plugin): @@ -102,6 +104,7 @@ class AppleOpenFeedback(OpenFeedback): return Dialog(parent, self) + class DriverBase(DeviceConfig, DevicePlugin): # Needed for config_widget to work FORMATS = ['epub', 'pdf'] @@ -116,12 +119,12 @@ class DriverBase(DeviceConfig, DevicePlugin): EXTRA_CUSTOMIZATION_MESSAGE = [ _('Use Series as Category in iTunes/iBooks') + - ':::'+_('Enable to use the series name as the iTunes Genre, ' + ':::' + _('Enable to use the series name as the iTunes Genre, ' 'iBooks Category'), _('Cache covers from iTunes/iBooks') + ':::' + _('Enable to cache and display covers from iTunes/iBooks'), - _(u'"Copy files to iTunes Media folder %s" is enabled in iTunes Preferences|Advanced')%u'\u2026' + + _(u'"Copy files to iTunes Media folder %s" is enabled in iTunes Preferences|Advanced') % u'\u2026' + ':::' + _("

    This setting should match your iTunes Preferences|Advanced setting.

    " "

    Disabling will store copies of books transferred to iTunes in your calibre configuration directory.

    " @@ -133,11 +136,11 @@ class DriverBase(DeviceConfig, DevicePlugin): False, ] - @classmethod def _config_base_name(cls): return 'iTunes' + class ITUNES(DriverBase): ''' Calling sequences: @@ -148,6 +151,8 @@ class ITUNES(DriverBase): open() card_prefix() can_handle() + _launch_iTunes() + _discover_manual_sync_mode() set_progress_reporter() get_device_information() card_prefix() @@ -156,6 +161,7 @@ class ITUNES(DriverBase): can_handle() set_progress_reporter() books() (once for each storage point) + (create self.cached_books) settings() settings() can_handle() (~1x per second OSX while idle) @@ -186,14 +192,14 @@ class ITUNES(DriverBase): free_space() ''' - name = 'Apple device interface' + name = 'Apple iTunes interface' gui_name = _('Apple device') icon = I('devices/ipad.png') - description = _('Communicate with iTunes/iBooks.') - supported_platforms = ['osx','windows'] + description = _('Communicate with iTunes/iBooks.') + supported_platforms = ['osx', 'windows'] author = 'GRiker' #: The version of this plugin as a 3-tuple (major, minor, revision) - version = (1,1,0) + version = (1, 1, 1) DISPLAY_DISABLE_DIALOG = "display_disable_apple_driver_dialog" @@ -203,14 +209,14 @@ class ITUNES(DriverBase): USE_ITUNES_STORAGE = 2 OPEN_FEEDBACK_MESSAGE = _( - 'Apple device detected, launching iTunes, please wait ...') + 'Apple iDevice detected, launching iTunes, please wait ...') BACKLOADING_ERROR_MESSAGE = _( "Cannot copy books directly from iDevice. " "Drag from iTunes Library to desktop, then add to calibre's Library window.") UNSUPPORTED_DIRECT_CONNECT_MODE_MESSAGE = _( - "Unsupported direct connect mode. " + "*** Unsupported direct connect mode. " "See http://www.mobileread.com/forums/showthread.php?t=118559 " - "for instructions on using 'Connect to iTunes'") + "for instructions on using 'Connect to iTunes' ***") ITUNES_SANDBOX_LOCKOUT_MESSAGE = _( '

    Unable to communicate with iTunes.

    ' '

    Refer to this ' @@ -218,22 +224,9 @@ class ITUNES(DriverBase): 'for more information.

    ' '

    ') - # Product IDs: - # 0x1291 iPod Touch - # 0x1293 iPod Touch 2G - # 0x1299 iPod Touch 3G - # 0x1292 iPhone 3G - # 0x1294 iPhone 3GS - # 0x1297 iPhone 4 - # 0x129a iPad - # 0x129f iPad2 (WiFi) - # 0x12a0 iPhone 4S (GSM) - # 0x12a2 iPad2 (GSM) - # 0x12a3 iPad2 (CDMA) - # 0x12a6 iPad3 (GSM) - VENDOR_ID = [0x05ac] - PRODUCT_ID = [0x1292,0x1293,0x1294,0x1297,0x1299,0x129a,0x129f,0x12a2,0x12a3,0x12a6] - BCD = [0x01] + VENDOR_ID = [] + PRODUCT_ID = [] + BCD = [] # Plugboard ID DEVICE_PLUGBOARD_NAME = 'APPLE' @@ -301,7 +294,7 @@ class ITUNES(DriverBase): archive_path = os.path.join(cache_dir, "thumbs.zip") description_prefix = "added by calibre" ejected = False - iTunes= None + iTunes = None iTunes_local_storage = None library_orphans = None manual_sync_mode = False @@ -329,28 +322,28 @@ class ITUNES(DriverBase): L{books}(oncard='cardb')). ''' if DEBUG: - logger().info("ITUNES.add_books_to_metadata()") + logger().info("%s.add_books_to_metadata()" % self.__class__.__name__) task_count = float(len(self.update_list)) # Delete any obsolete copies of the book from the booklist if self.update_list: if False: - self._dump_booklist(booklists[0], header='before',indent=2) - self._dump_update_list(header='before',indent=2) - self._dump_cached_books(header='before',indent=2) + self._dump_booklist(booklists[0], header='before', indent=2) + self._dump_update_list(header='before', indent=2) + self._dump_cached_books(header='before', indent=2) - for (j,p_book) in enumerate(self.update_list): + for (j, p_book) in enumerate(self.update_list): if False: if isosx: logger().info(" looking for '%s' by %s uuid:%s" % - (p_book['title'],p_book['author'], p_book['uuid'])) + (p_book['title'], p_book['author'], p_book['uuid'])) elif iswindows: logger().info(" looking for '%s' by %s (%s)" % - (p_book['title'],p_book['author'], p_book['uuid'])) + (p_book['title'], p_book['author'], p_book['uuid'])) # Purge the booklist, self.cached_books - for i,bl_book in enumerate(booklists[0]): + for i, bl_book in enumerate(booklists[0]): if bl_book.uuid == p_book['uuid']: # Remove from booklists[0] booklists[0].pop(i) @@ -374,12 +367,12 @@ class ITUNES(DriverBase): if self.cached_books[cb]['title'] == p_book['title'] and \ self.cached_books[cb]['author'] == p_book['author']: if DEBUG: - self._dump_cached_book(self.cached_books[cb],header="removing from self.cached_books:", indent=2) + self._dump_cached_book(self.cached_books[cb], header="removing from self.cached_books:", indent=2) self.cached_books.pop(cb) break break if self.report_progress is not None: - self.report_progress((j+1)/task_count, _('Updating device metadata listing...')) + self.report_progress((j + 1) / task_count, _('Updating device metadata listing...')) if self.report_progress is not None: self.report_progress(1.0, _('Updating device metadata listing...')) @@ -394,8 +387,8 @@ class ITUNES(DriverBase): booklists[0].append(new_book) if False: - self._dump_booklist(booklists[0],header='after',indent=2) - self._dump_cached_books(header='after',indent=2) + self._dump_booklist(booklists[0], header='after', indent=2) + self._dump_cached_books(header='after', indent=2) def books(self, oncard=None, end_session=True): """ @@ -414,13 +407,13 @@ class ITUNES(DriverBase): """ if not oncard: if DEBUG: - logger().info("ITUNES:books():") + logger().info("%s.books():" % self.__class__.__name__) if self.settings().extra_customization[self.CACHE_COVERS]: logger().info(" Cover fetching/caching enabled") else: logger().info(" Cover fetching/caching disabled") - # Fetch a list of books from iPod device connected to iTunes + # Fetch a list of books from iDevice connected to iTunes if 'iPod' in self.sources: booklist = BookList(logger()) cached_books = {} @@ -429,10 +422,10 @@ class ITUNES(DriverBase): library_books = self._get_library_books() device_books = self._get_device_books() book_count = float(len(device_books)) - for (i,book) in enumerate(device_books): + for (i, book) in enumerate(device_books): this_book = Book(book.name(), book.artist()) format = 'pdf' if book.kind().startswith('PDF') else 'epub' - this_book.path = self.path_template % (book.name(), book.artist(),format) + this_book.path = self.path_template % (book.name(), book.artist(), format) try: this_book.datetime = parse_date(str(book.date_added())).timetuple() except: @@ -450,16 +443,17 @@ class ITUNES(DriverBase): booklist.add_book(this_book, False) cached_books[this_book.path] = { - 'title':book.name(), - 'author':book.artist().split(' & '), - 'lib_book':library_books[this_book.path] if this_book.path in library_books else None, - 'dev_book':book, + 'title': book.name(), + 'author': book.artist(), + 'authors': book.artist().split(' & '), + 'lib_book': library_books[this_book.path] if this_book.path in library_books else None, + 'dev_book': book, 'uuid': book.composer() } if self.report_progress is not None: - self.report_progress((i+1)/book_count, - _('%(num)d of %(tot)d') % dict(num=i+1, tot=book_count)) + self.report_progress((i + 1) / book_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=book_count)) self._purge_orphans(library_books, cached_books) elif iswindows: @@ -470,10 +464,10 @@ class ITUNES(DriverBase): library_books = self._get_library_books() device_books = self._get_device_books() book_count = float(len(device_books)) - for (i,book) in enumerate(device_books): + for (i, book) in enumerate(device_books): this_book = Book(book.Name, book.Artist) format = 'pdf' if book.KindAsString.startswith('PDF') else 'epub' - this_book.path = self.path_template % (book.Name, book.Artist,format) + this_book.path = self.path_template % (book.Name, book.Artist, format) try: this_book.datetime = parse_date(str(book.DateAdded)).timetuple() except: @@ -490,16 +484,17 @@ class ITUNES(DriverBase): booklist.add_book(this_book, False) cached_books[this_book.path] = { - 'title':book.Name, - 'author':book.Artist.split(' & '), - 'lib_book':library_books[this_book.path] if this_book.path in library_books else None, + 'title': book.Name, + 'author': book.Artist, + 'authors': book.Artist.split(' & '), + 'lib_book': library_books[this_book.path] if this_book.path in library_books else None, 'uuid': book.Composer, 'format': 'pdf' if book.KindAsString.startswith('PDF') else 'epub' } if self.report_progress is not None: - self.report_progress((i+1)/book_count, - _('%(num)d of %(tot)d') % dict(num=i+1, + self.report_progress((i + 1) / book_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=book_count)) self._purge_orphans(library_books, cached_books) @@ -511,7 +506,7 @@ class ITUNES(DriverBase): self.cached_books = cached_books if DEBUG: self._dump_booklist(booklist, 'returning from books()', indent=2) - self._dump_cached_books('returning from books()',indent=2) + self._dump_cached_books('returning from books()', indent=2) return booklist else: return BookList(logger()) @@ -556,7 +551,7 @@ class ITUNES(DriverBase): # We need to know if iTunes sees the iPad # It may have been ejected if DEBUG: - logger().info("ITUNES.can_handle()") + logger().info("%s.can_handle()" % self.__class__.__name__) self._launch_iTunes() self.sources = self._get_sources() @@ -567,12 +562,12 @@ class ITUNES(DriverBase): self.sources = self._get_sources() if (not 'iPod' in self.sources) or (self.sources['iPod'] == ''): attempts -= 1 - time.sleep(0.5) + time.sleep(1.0) if DEBUG: - logger().warning(" waiting for connected iPad, attempt #%d" % (10 - attempts)) + logger().warning(" waiting for connected iDevice, attempt #%d" % (10 - attempts)) else: if DEBUG: - logger().info(' found connected iPad') + logger().info(' found connected iDevice') break else: # iTunes running, but not connected iPad @@ -581,7 +576,7 @@ class ITUNES(DriverBase): self.ejected = True return False - self._discover_manual_sync_mode(wait = 2 if self.initial_status == 'launched' else 0) + self._discover_manual_sync_mode(wait=2 if self.initial_status == 'launched' else 0) return True def can_handle_windows(self, device_id, debug=False): @@ -613,26 +608,26 @@ class ITUNES(DriverBase): sys.stdout.write('.') sys.stdout.flush() if DEBUG: - logger().info('ITUNES.can_handle_windows:\n confirming connected iPad') + logger().info("%s.can_handle_windows:\n confirming connected iPad" % self.__class__.__name__) self.ejected = False self._discover_manual_sync_mode() return True else: if DEBUG: - logger().info("ITUNES.can_handle_windows():\n device ejected") + logger().info("%s.can_handle_windows():\n device ejected" % self.__class__.__name__) self.ejected = True return False except: # iTunes connection failed, probably not running anymore - logger().error("ITUNES.can_handle_windows():\n lost connection to iTunes") + logger().error("%s.can_handle_windows():\n lost connection to iTunes" % self.__class__.__name__) return False finally: pythoncom.CoUninitialize() else: if DEBUG: - logger().info("ITUNES:can_handle_windows():\n Launching iTunes") + logger().info("%s.can_handle_windows():\n Launching iTunes" % self.__class__.__name__) try: pythoncom.CoInitialize() @@ -645,9 +640,9 @@ class ITUNES(DriverBase): self.sources = self._get_sources() if (not 'iPod' in self.sources) or (self.sources['iPod'] == ''): attempts -= 1 - time.sleep(0.5) + time.sleep(1.0) if DEBUG: - logger().warning(" waiting for connected iPad, attempt #%d" % (10 - attempts)) + logger().warning(" waiting for connected iDevice, attempt #%d" % (10 - attempts)) else: if DEBUG: logger().info(' found connected iPad in iTunes') @@ -677,7 +672,7 @@ class ITUNES(DriverBase): ('place', None) (None, None) ''' - return (None,None) + return (None, None) @classmethod def config_widget(cls): @@ -702,7 +697,7 @@ class ITUNES(DriverBase): self.problem_msg = _("Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" "Click 'Show Details' for a list.") - logger().info("ITUNES:delete_books()") + logger().info("%s.delete_books()" % self.__class__.__name__) for path in paths: if self.cached_books[path]['lib_book']: if DEBUG: @@ -731,22 +726,25 @@ class ITUNES(DriverBase): else: if self.manual_sync_mode: metadata = MetaInformation(self.cached_books[path]['title'], - [self.cached_books[path]['author']]) + self.cached_books[path]['authors']) + metadata.author = self.cached_books[path]['author'] metadata.uuid = self.cached_books[path]['uuid'] + if not metadata.uuid: + metadata.uuid = "unknown" if isosx: - self._remove_existing_copy(self.cached_books[path],metadata) + self._remove_existing_copy(self.cached_books[path], metadata) elif iswindows: try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - self._remove_existing_copy(self.cached_books[path],metadata) + self._remove_existing_copy(self.cached_books[path], metadata) finally: pythoncom.CoUninitialize() else: self.problem_titles.append("'%s' by %s" % - (self.cached_books[path]['title'],self.cached_books[path]['author'])) + (self.cached_books[path]['title'], self.cached_books[path]['author'])) def eject(self): ''' @@ -754,7 +752,7 @@ class ITUNES(DriverBase): are pending GUI jobs that need to communicate with the device. ''' if DEBUG: - logger().info("ITUNES:eject(): ejecting '%s'" % self.sources['iPod']) + logger().info("%s:eject(): ejecting '%s'" % (self.__class__.__name__, self.sources['iPod'])) if isosx: self.iTunes.eject(self.sources['iPod']) elif iswindows: @@ -785,7 +783,7 @@ class ITUNES(DriverBase): In Windows, a sync-in-progress blocks this call until sync is complete """ if DEBUG: - logger().info("ITUNES:free_space()") + logger().info("%s.free_space()" % self.__class__.__name__) free_space = 0 if isosx: @@ -810,7 +808,7 @@ class ITUNES(DriverBase): except: logger().error(' waiting for free_space() call to go through') - return (free_space,-1,-1) + return (free_space, -1, -1) def get_device_information(self, end_session=True): """ @@ -818,9 +816,9 @@ class ITUNES(DriverBase): @return: (device name, device version, software version on device, mime type) """ if DEBUG: - logger().info("ITUNES:get_device_information()") + logger().info("%s.get_device_information()" % self.__class__.__name__) - return (self.sources['iPod'],'hw v1.0','sw v1.0', 'mime type normally goes here') + return (self.sources['iPod'], 'hw v1.0', 'sw v1.0', 'unknown mime type') def get_file(self, path, outfile, end_session=True): ''' @@ -828,7 +826,7 @@ class ITUNES(DriverBase): @param outfile: file object like C{sys.stdout} or the result of an C{open} call ''' if DEBUG: - logger().info("ITUNES.get_file(): exporting '%s'" % path) + logger().info("%s.get_file(): exporting '%s'" % (self.__class__.__name__, path)) try: outfile.write(open(self.cached_books[path]['lib_book'].location().path).read()) @@ -859,15 +857,32 @@ class ITUNES(DriverBase): raise OpenFeedback(self.ITUNES_SANDBOX_LOCKOUT_MESSAGE) if DEBUG: - logger().info("ITUNES.open(connected_device: %s)" % repr(connected_device)) + vendor_id = "0x%x" % connected_device[0] + product_id = "0x%x" % connected_device[1] + bcd = "0x%x" % connected_device[2] + mfg = connected_device[3] + model = connected_device[4] + logger().info("%s.open(MFG: %s, VENDOR_ID: %s, MODEL: %s, BCD: %s, PRODUCT_ID: %s)" % + (self.__class__.__name__, + mfg, + vendor_id, + model, + bcd, + product_id + )) - # Display a dialog recommending using 'Connect to iTunes' if user hasn't - # previously disabled the dialog - if dynamic.get(confirm_config_name(self.DISPLAY_DISABLE_DIALOG),True): - raise AppleOpenFeedback(self) - else: - if DEBUG: - logger().warning(" %s" % self.UNSUPPORTED_DIRECT_CONNECT_MODE_MESSAGE) + if False: + # Display a dialog recommending using 'Connect to iTunes' if user hasn't + # previously disabled the dialog + if dynamic.get(confirm_config_name(self.DISPLAY_DISABLE_DIALOG), True): + raise AppleOpenFeedback(self) + else: + if DEBUG: + logger().info(" %s" % self.UNSUPPORTED_DIRECT_CONNECT_MODE_MESSAGE) + + # Log supported DEVICE_IDs and BCDs + logger().info(" BCD: %s" % ['0x%x' % x for x in sorted(self.BCD)]) + logger().info(" PRODUCT_ID: %s" % ['0x%x' % x for x in sorted(self.PRODUCT_ID)]) # Confirm/create thumbs archive if not os.path.exists(self.cache_dir): @@ -878,7 +893,7 @@ class ITUNES(DriverBase): if not os.path.exists(self.archive_path): logger().info(" creating zip archive") zfw = ZipFile(self.archive_path, mode='w') - zfw.writestr("iTunes Thumbs Archive",'') + zfw.writestr("iTunes Thumbs Archive", '') zfw.close() else: if DEBUG: @@ -886,7 +901,7 @@ class ITUNES(DriverBase): # If enabled in config options, create/confirm an iTunes storage folder if not self.settings().extra_customization[self.USE_ITUNES_STORAGE]: - self.iTunes_local_storage = os.path.join(config_dir,'iTunes storage') + self.iTunes_local_storage = os.path.join(config_dir, 'iTunes storage') if not os.path.exists(self.iTunes_local_storage): if DEBUG: logger()(" creating iTunes_local_storage at '%s'" % self.iTunes_local_storage) @@ -908,44 +923,48 @@ class ITUNES(DriverBase): as uuids are different ''' if DEBUG: - logger().info("ITUNES.remove_books_from_metadata()") + logger().info("%s.remove_books_from_metadata()" % self.__class__.__name__) for path in paths: if DEBUG: self._dump_cached_book(self.cached_books[path], indent=2) logger().info(" looking for '%s' by '%s' uuid:%s" % (self.cached_books[path]['title'], self.cached_books[path]['author'], - self.cached_books[path]['uuid'])) + repr(self.cached_books[path]['uuid']))) # Purge the booklist, self.cached_books, thumb cache - for i,bl_book in enumerate(booklists[0]): + for i, bl_book in enumerate(booklists[0]): if False: - logger().info(" evaluating '%s' by '%s' uuid:%s" % - (bl_book.title, bl_book.author,bl_book.uuid)) + logger().info(" evaluating '%s' by '%s' uuid:%s" % + (bl_book.title, bl_book.author, bl_book.uuid)) found = False - if bl_book.uuid == self.cached_books[path]['uuid']: - if False: - logger().info(" matched with uuid") + if bl_book.uuid and bl_book.uuid == self.cached_books[path]['uuid']: + if True: + logger().info(" --matched uuid") booklists[0].pop(i) found = True elif bl_book.title == self.cached_books[path]['title'] and \ - bl_book.author[0] == self.cached_books[path]['author']: - if False: - logger().info(" matched with title + author") + bl_book.author == self.cached_books[path]['author']: + if True: + logger().info(" --matched title + author") booklists[0].pop(i) found = True if found: # Remove from self.cached_books for cb in self.cached_books: - if self.cached_books[cb]['uuid'] == self.cached_books[path]['uuid']: + if (self.cached_books[cb]['uuid'] == self.cached_books[path]['uuid'] and + self.cached_books[cb]['author'] == self.cached_books[path]['author'] and + self.cached_books[cb]['title'] == self.cached_books[path]['title']): self.cached_books.pop(cb) break + else: + logger().error(" '%s' not found in self.cached_books" % self.cached_books[path]['title']) # Remove from thumb from thumb cache thumb_path = path.rpartition('.')[0] + '.jpg' - zf = ZipFile(self.archive_path,'a') + zf = ZipFile(self.archive_path, 'a') fnames = zf.namelist() try: thumb = [x for x in fnames if thumb_path in x][0] @@ -964,14 +983,16 @@ class ITUNES(DriverBase): else: if DEBUG: logger().error(" unable to find '%s' by '%s' (%s)" % - (bl_book.title, bl_book.author,bl_book.uuid)) + (self.cached_books[path]['title'], + self.cached_books[path]['author'], + self.cached_books[path]['uuid'])) if False: - self._dump_booklist(booklists[0], indent = 2) + self._dump_booklist(booklists[0], indent=2) self._dump_cached_books(indent=2) def reset(self, key='-1', log_packets=False, report_progress=None, - detected_device=None) : + detected_device=None): """ :key: The key to unlock the device :log_packets: If true the packet stream to/from the device is logged @@ -982,7 +1003,7 @@ class ITUNES(DriverBase): :detected_device: Device information from the device scanner """ if DEBUG: - logger().info("ITUNES.reset()") + logger().info("%s.reset()" % self.__class__.__name__) if report_progress: self.set_progress_reporter(report_progress) @@ -994,7 +1015,7 @@ class ITUNES(DriverBase): task does not have any progress information ''' if DEBUG: - logger().info("ITUNES.set_progress_reporter()") + logger().info("%s.set_progress_reporter()" % self.__class__.__name__) self.report_progress = report_progress @@ -1002,11 +1023,15 @@ class ITUNES(DriverBase): # This method is called with the plugboard that matches the format # declared in use_plugboard_ext and a device name of ITUNES if DEBUG: - logger().info("ITUNES.set_plugboard()") + logger().info("%s.set_plugboard()" % self.__class__.__name__) #logger().info(' plugboard: %s' % plugboards) self.plugboards = plugboards self.plugboard_func = pb_func + def shutdown(self): + if DEBUG: + logger().info("%s.shutdown()\n" % self.__class__.__name__) + def sync_booklists(self, booklists, end_session=True): ''' Update metadata on device. @@ -1016,7 +1041,7 @@ class ITUNES(DriverBase): ''' if DEBUG: - logger().info("ITUNES.sync_booklists()") + logger().info("%s.sync_booklists()" % self.__class__.__name__) if self.update_needed: if DEBUG: @@ -1043,14 +1068,14 @@ class ITUNES(DriverBase): particular device doesn't have any of these locations it should return 0. """ if DEBUG: - logger().info("ITUNES:total_space()") + logger().info("%s.total_space()" % self.__class__.__name__) capacity = 0 if isosx: if 'iPod' in self.sources: connected_device = self.sources['iPod'] capacity = self.iTunes.sources[connected_device].capacity() - return (capacity,-1,-1) + return (capacity, -1, -1) def upload_books(self, files, names, on_card=None, end_session=True, metadata=None): @@ -1081,10 +1106,10 @@ class ITUNES(DriverBase): "Click 'Show Details' for a list.") if DEBUG: - logger().info("ITUNES.upload_books()") + logger().info("%s.upload_books()" % self.__class__.__name__) if isosx: - for (i,fpath) in enumerate(files): + for (i, fpath) in enumerate(files): format = fpath.rpartition('.')[2].lower() path = self.path_template % (metadata[i].title, authors_to_string(metadata[i].authors), @@ -1098,23 +1123,24 @@ class ITUNES(DriverBase): # Add new_book to self.cached_books if DEBUG: - logger().info("ITUNES.upload_books()") + logger().info("%s.upload_books()" % self.__class__.__name__) logger().info(" adding '%s' by '%s' uuid:%s to self.cached_books" % (metadata[i].title, authors_to_string(metadata[i].authors), metadata[i].uuid)) self.cached_books[this_book.path] = { 'author': authors_to_string(metadata[i].authors), + 'authors': metadata[i].authors, 'dev_book': db_added, 'format': format, 'lib_book': lb_added, 'title': metadata[i].title, - 'uuid': metadata[i].uuid } + 'uuid': metadata[i].uuid} # Report progress if self.report_progress is not None: - self.report_progress((i+1)/file_count, - _('%(num)d of %(tot)d') % dict(num=i+1, tot=file_count)) + self.report_progress((i + 1) / file_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=file_count)) elif iswindows: import pythoncom, win32com.client @@ -1123,7 +1149,7 @@ class ITUNES(DriverBase): pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - for (i,fpath) in enumerate(files): + for (i, fpath) in enumerate(files): format = fpath.rpartition('.')[2].lower() path = self.path_template % (metadata[i].title, authors_to_string(metadata[i].authors), @@ -1144,13 +1170,14 @@ class ITUNES(DriverBase): # Add new_book to self.cached_books if DEBUG: - logger().info("ITUNES.upload_books()") + logger().info("%s.upload_books()" % self.__class__.__name__) logger().info(" adding '%s' by '%s' uuid:%s to self.cached_books" % (metadata[i].title, authors_to_string(metadata[i].authors), metadata[i].uuid)) self.cached_books[this_book.path] = { 'author': authors_to_string(metadata[i].authors), + 'authors': metadata[i].authors, 'dev_book': db_added, 'format': format, 'lib_book': lb_added, @@ -1159,8 +1186,8 @@ class ITUNES(DriverBase): # Report progress if self.report_progress is not None: - self.report_progress((i+1)/file_count, - _('%(num)d of %(tot)d') % dict(num=i+1, tot=file_count)) + self.report_progress((i + 1) / file_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=file_count)) finally: pythoncom.CoUninitialize() @@ -1173,16 +1200,16 @@ class ITUNES(DriverBase): self.update_msg = "Added books to device" if False: - self._dump_booklist(new_booklist,header="after upload_books()",indent=2) - self._dump_cached_books(header="after upload_books()",indent=2) + self._dump_booklist(new_booklist, header="after upload_books()", indent=2) + self._dump_cached_books(header="after upload_books()", indent=2) return (new_booklist, [], []) # Private methods - def _add_device_book(self,fpath, metadata): + def _add_device_book(self, fpath, metadata): ''' assumes pythoncom wrapper for windows ''' - logger().info(" ITUNES._add_device_book()") + logger().info(" %s._add_device_book()" % self.__class__.__name__) if isosx: import appscript if 'iPod' in self.sources: @@ -1200,7 +1227,7 @@ class ITUNES(DriverBase): delay = 1.0 while attempts: try: - added = pl.add(appscript.mactypes.File(fpath),to=pl) + added = pl.add(appscript.mactypes.File(fpath), to=pl) if False: logger().info(" '%s' added to Device|Books" % metadata.title) break @@ -1281,18 +1308,18 @@ class ITUNES(DriverBase): base_fn = fpath.rpartition(os.sep)[2] base_fn = base_fn.rpartition('.')[0] db_added = self._find_device_book( - { 'title': base_fn if format == 'pdf' else metadata.title, + {'title': base_fn if format == 'pdf' else metadata.title, 'author': authors_to_string(metadata.authors), 'uuid': metadata.uuid, 'format': format}) return db_added - def _add_library_book(self,file, metadata): + def _add_library_book(self, file, metadata): ''' windows assumes pythoncom wrapper ''' if DEBUG: - logger().info(" ITUNES._add_library_book()") + logger().info(" %s._add_library_book()" % self.__class__.__name__) if isosx: import appscript added = self.iTunes.add(appscript.mactypes.File(file)) @@ -1348,7 +1375,7 @@ class ITUNES(DriverBase): base_fn = file.rpartition(os.sep)[2] base_fn = base_fn.rpartition('.')[0] added = self._find_library_book( - { 'title': base_fn if format == 'pdf' else metadata.title, + {'title': base_fn if format == 'pdf' else metadata.title, 'author': authors_to_string(metadata.authors), 'uuid': metadata.uuid, 'format': format}) @@ -1360,7 +1387,7 @@ class ITUNES(DriverBase): fp = cached_book['lib_book'].Location ''' if DEBUG: - logger().info(" ITUNES._add_new_copy()") + logger().info(" %s._add_new_copy()" % self.__class__.__name__) if fpath.rpartition('.')[2].lower() == 'epub': self._update_epub_metadata(fpath, metadata) @@ -1368,21 +1395,18 @@ class ITUNES(DriverBase): db_added = None lb_added = None - # If using iTunes_local_storage, copy the file, redirect iTunes to use local copy - if not self.settings().extra_customization[self.USE_ITUNES_STORAGE]: - local_copy = os.path.join(self.iTunes_local_storage, str(metadata.uuid) + os.path.splitext(fpath)[1]) - shutil.copyfile(fpath,local_copy) - fpath = local_copy - if self.manual_sync_mode: ''' - Unsupported direct-connect mode. + DC mode. Add to iBooks only. ''' db_added = self._add_device_book(fpath, metadata) - lb_added = self._add_library_book(fpath, metadata) - if not lb_added and DEBUG: - logger().warn(" failed to add '%s' to iTunes, iTunes Media folder inaccessible" % metadata.title) else: + # If using iTunes_local_storage, copy the file, redirect iTunes to use local copy + if not self.settings().extra_customization[self.USE_ITUNES_STORAGE]: + local_copy = os.path.join(self.iTunes_local_storage, str(metadata.uuid) + os.path.splitext(fpath)[1]) + shutil.copyfile(fpath, local_copy) + fpath = local_copy + lb_added = self._add_library_book(fpath, metadata) if not lb_added: raise UserFeedback("iTunes Media folder inaccessible", @@ -1399,7 +1423,7 @@ class ITUNES(DriverBase): from PIL import Image as PILImage if DEBUG: - logger().info(" ITUNES._cover_to_thumb()") + logger().info(" %s._cover_to_thumb()" % self.__class__.__name__) thumb = None if metadata.cover: @@ -1417,18 +1441,18 @@ class ITUNES(DriverBase): if scaled: if DEBUG: logger().info(" cover scaled from %sx%s to %sx%s" % - (width,height,nwidth,nheight)) + (width, height, nwidth, nheight)) img = img.resize((nwidth, nheight), PILImage.ANTIALIAS) cd = cStringIO.StringIO() img.convert('RGB').save(cd, 'JPEG') cover_data = cd.getvalue() cd.close() else: - with open(metadata.cover,'r+b') as cd: + with open(metadata.cover, 'r+b') as cd: cover_data = cd.read() except: self.problem_titles.append("'%s' by %s" % (metadata.title, authors_to_string(metadata.authors))) - logger().error(" error scaling '%s' for '%s'" % (metadata.cover,metadata.title)) + logger().error(" error scaling '%s' for '%s'" % (metadata.cover, metadata.title)) import traceback traceback.print_exc() @@ -1467,7 +1491,7 @@ class ITUNES(DriverBase): elif iswindows: ''' Write the data to a real file for Windows iTunes ''' tc = os.path.join(tempfile.gettempdir(), "cover.jpg") - with open(tc,'wb') as tmp_cover: + with open(tc, 'wb') as tmp_cover: tmp_cover.write(cover_data) if lb_added: @@ -1505,13 +1529,13 @@ class ITUNES(DriverBase): # Refresh the thumbnail cache if DEBUG: - logger().info( " refreshing cached thumb for '%s'" % metadata.title) + logger().info(" refreshing cached thumb for '%s'" % metadata.title) zfw = ZipFile(self.archive_path, mode='a') thumb_path = path.rpartition('.')[0] + '.jpg' zfw.writestr(thumb_path, thumb) except: self.problem_titles.append("'%s' by %s" % (metadata.title, authors_to_string(metadata.authors))) - logger().error(" error converting '%s' to thumb for '%s'" % (metadata.cover,metadata.title)) + logger().error(" error converting '%s' to thumb for '%s'" % (metadata.cover, metadata.title)) finally: try: zfw.close() @@ -1522,11 +1546,11 @@ class ITUNES(DriverBase): logger().info(" no cover defined in metadata for '%s'" % metadata.title) return thumb - def _create_new_book(self,fpath, metadata, path, db_added, lb_added, thumb, format): + def _create_new_book(self, fpath, metadata, path, db_added, lb_added, thumb, format): ''' ''' if DEBUG: - logger().info(" ITUNES._create_new_book()") + logger().info(" %s._create_new_book()" % self.__class__.__name__) this_book = Book(metadata.title, authors_to_string(metadata.authors)) this_book.datetime = time.gmtime() @@ -1575,7 +1599,7 @@ class ITUNES(DriverBase): wait is passed when launching iTunes, as it seems to need a moment to come to its senses ''' if DEBUG: - logger().info(" ITUNES._discover_manual_sync_mode()") + logger().info(" %s._discover_manual_sync_mode()" % self.__class__.__name__) if wait: time.sleep(wait) if isosx: @@ -1593,7 +1617,7 @@ class ITUNES(DriverBase): if dev_books is not None and len(dev_books): first_book = dev_books[0] if False: - logger().info(" determing manual mode by modifying '%s' by %s" % (first_book.name(), first_book.artist())) + logger().info(" determining manual mode by modifying '%s' by %s" % (first_book.name(), first_book.artist())) try: first_book.bpm.set(0) self.manual_sync_mode = True @@ -1603,7 +1627,7 @@ class ITUNES(DriverBase): if DEBUG: logger().info(" adding tracer to empty Books|Playlist") try: - added = pl.add(appscript.mactypes.File(P('tracer.epub')),to=pl) + added = pl.add(appscript.mactypes.File(P('tracer.epub')), to=pl) time.sleep(0.5) added.delete() self.manual_sync_mode = True @@ -1634,9 +1658,9 @@ class ITUNES(DriverBase): if DEBUG: logger().info(" sending tracer to empty Books|Playlist") fpath = P('tracer.epub') - mi = MetaInformation('Tracer',['calibre']) + mi = MetaInformation('Tracer', ['calibre']) try: - added = self._add_device_book(fpath,mi) + added = self._add_device_book(fpath, mi) time.sleep(0.5) added.Delete() self.manual_sync_mode = True @@ -1645,40 +1669,40 @@ class ITUNES(DriverBase): logger().info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) - def _dump_booklist(self, booklist, header=None,indent=0): + def _dump_booklist(self, booklist, header=None, indent=0): ''' ''' if header: - msg = '\n%sbooklist %s:' % (' '*indent,header) + msg = '\n%sbooklist %s:' % (' ' * indent, header) logger().info(msg) - logger().info('%s%s' % (' '*indent,'-' * len(msg))) + logger().info('%s%s' % (' ' * indent, '-' * len(msg))) for book in booklist: if isosx: - logger().info("%s%-40.40s %-30.30s %-10.10s %s" % - (' '*indent,book.title, book.author, str(book.library_id)[-9:], book.uuid)) + logger().info("%s%-40.40s %-30.30s %-40.40s %-10.10s" % + (' ' * indent, book.title, book.author, book.uuid, str(book.library_id)[-9:])) elif iswindows: logger().info("%s%-40.40s %-30.30s" % - (' '*indent,book.title, book.author)) + (' ' * indent, book.title, book.author)) logger().info() - def _dump_cached_book(self, cached_book, header=None,indent=0): + def _dump_cached_book(self, cached_book, header=None, indent=0): ''' ''' if isosx: if header: - msg = '%s%s' % (' '*indent,header) + msg = '%s%s' % (' ' * indent, header) logger().info(msg) - logger().info( "%s%s" % (' '*indent, '-' * len(msg))) + logger().info("%s%s" % (' ' * indent, '-' * len(msg))) logger().info("%s%-40.40s %-30.30s %-10.10s %-10.10s %s" % - (' '*indent, + (' ' * indent, 'title', 'author', 'lib_book', 'dev_book', 'uuid')) logger().info("%s%-40.40s %-30.30s %-10.10s %-10.10s %s" % - (' '*indent, + (' ' * indent, cached_book['title'], cached_book['author'], str(cached_book['lib_book'])[-9:], @@ -1686,12 +1710,12 @@ class ITUNES(DriverBase): cached_book['uuid'])) elif iswindows: if header: - msg = '%s%s' % (' '*indent,header) + msg = '%s%s' % (' ' * indent, header) logger().info(msg) - logger().info( "%s%s" % (' '*indent, '-' * len(msg))) + logger().info("%s%s" % (' ' * indent, '-' * len(msg))) logger().info("%s%-40.40s %-30.30s %s" % - (' '*indent, + (' ' * indent, cached_book['title'], cached_book['author'], cached_book['uuid'])) @@ -1700,22 +1724,23 @@ class ITUNES(DriverBase): ''' ''' if header: - msg = '\n%sself.cached_books %s:' % (' '*indent,header) + msg = '\n%sself.cached_books %s:' % (' ' * indent, header) logger().info(msg) - logger().info( "%s%s" % (' '*indent,'-' * len(msg))) + logger().info("%s%s" % (' ' * indent, '-' * len(msg))) if isosx: for cb in self.cached_books.keys(): - logger().info("%s%-40.40s %-30.30s %-10.10s %-10.10s %s" % - (' '*indent, + logger().info("%s%-40.40s %-30.30s %-40.40s %-10.10s %-10.10s" % + (' ' * indent, self.cached_books[cb]['title'], self.cached_books[cb]['author'], + self.cached_books[cb]['uuid'], str(self.cached_books[cb]['lib_book'])[-9:], str(self.cached_books[cb]['dev_book'])[-9:], - self.cached_books[cb]['uuid'])) + )) elif iswindows: for cb in self.cached_books.keys(): logger().info("%s%-40.40s %-30.30s %-4.4s %s" % - (' '*indent, + (' ' * indent, self.cached_books[cb]['title'], self.cached_books[cb]['author'], self.cached_books[cb]['format'], @@ -1728,11 +1753,11 @@ class ITUNES(DriverBase): ''' from calibre.ebooks.BeautifulSoup import BeautifulSoup - logger().info(" ITUNES.__get_epub_metadata()") + logger().info(" %s.__get_epub_metadata()" % self.__class__.__name__) title = None author = None timestamp = None - zf = ZipFile(fpath,'r') + zf = ZipFile(fpath, 'r') fnames = zf.namelist() opf = [x for x in fnames if '.opf' in x][0] if opf: @@ -1741,14 +1766,14 @@ class ITUNES(DriverBase): opf_raw.close() title = soup.find('dc:title').renderContents() author = soup.find('dc:creator').renderContents() - ts = soup.find('meta',attrs={'name':'calibre:timestamp'}) + ts = soup.find('meta', attrs={'name': 'calibre:timestamp'}) if ts: # Touch existing calibre timestamp timestamp = ts['content'] if not title or not author: if DEBUG: - logger().error(" couldn't extract title/author from %s in %s" % (opf,fpath)) + logger().error(" couldn't extract title/author from %s in %s" % (opf, fpath)) logger().error(" title: %s author: %s timestamp: %s" % (title, author, timestamp)) else: if DEBUG: @@ -1759,14 +1784,15 @@ class ITUNES(DriverBase): def _dump_hex(self, src, length=16): ''' ''' - FILTER=''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)]) - N=0; result='' + FILTER = ''.join([(len(repr(chr(x))) == 3) and chr(x) or '.' for x in range(256)]) + N = 0 + result = '' while src: - s,src = src[:length],src[length:] - hexa = ' '.join(["%02X"%ord(x) for x in s]) - s = s.translate(FILTER) - result += "%04X %-*s %s\n" % (N, length*3, hexa, s) - N+=length + s, src = src[:length], src[length:] + hexa = ' '.join(["%02X" % ord(x) for x in s]) + s = s.translate(FILTER) + result += "%04X %-*s %s\n" % (N, length * 3, hexa, s) + N += length print result def _dump_library_books(self, library_books): @@ -1778,16 +1804,16 @@ class ITUNES(DriverBase): logger().info(" %s" % book) logger().info() - def _dump_update_list(self,header=None,indent=0): + def _dump_update_list(self, header=None, indent=0): if header and self.update_list: - msg = '\n%sself.update_list %s' % (' '*indent,header) + msg = '\n%sself.update_list %s' % (' ' * indent, header) logger().info(msg) - logger().info( "%s%s" % (' '*indent,'-' * len(msg))) + logger().info("%s%s" % (' ' * indent, '-' * len(msg))) if isosx: for ub in self.update_list: logger().info("%s%-40.40s %-30.30s %-10.10s %s" % - (' '*indent, + (' ' * indent, ub['title'], ub['author'], str(ub['lib_book'])[-9:], @@ -1795,7 +1821,7 @@ class ITUNES(DriverBase): elif iswindows: for ub in self.update_list: logger().info("%s%-40.40s %-30.30s" % - (' '*indent, + (' ' * indent, ub['title'], ub['author'])) @@ -1806,16 +1832,16 @@ class ITUNES(DriverBase): if iswindows: dev_books = self._get_device_books_playlist() if DEBUG: - logger().info(" ITUNES._find_device_book()") + logger().info(" %s._find_device_book()" % self.__class__.__name__) logger().info(" searching for '%s' by '%s' (%s)" % - (search['title'], search['author'],search['uuid'])) + (search['title'], search['author'], search['uuid'])) attempts = 9 while attempts: # Try by uuid - only one hit if 'uuid' in search and search['uuid']: if DEBUG: logger().info(" searching by uuid '%s' ..." % search['uuid']) - hits = dev_books.Search(search['uuid'],self.SearchField.index('All')) + hits = dev_books.Search(search['uuid'], self.SearchField.index('All')) if hits: hit = hits[0] logger().info(" found '%s' by %s (%s)" % (hit.Name, hit.Artist, hit.Composer)) @@ -1825,7 +1851,7 @@ class ITUNES(DriverBase): if search['author']: if DEBUG: logger().info(" searching by author '%s' ..." % search['author']) - hits = dev_books.Search(search['author'],self.SearchField.index('Artists')) + hits = dev_books.Search(search['author'], self.SearchField.index('Artists')) if hits: for hit in hits: if hit.Name == search['title']: @@ -1836,7 +1862,7 @@ class ITUNES(DriverBase): # Search by title if no author available if DEBUG: logger().info(" searching by title '%s' ..." % search['title']) - hits = dev_books.Search(search['title'],self.SearchField.index('All')) + hits = dev_books.Search(search['title'], self.SearchField.index('All')) if hits: for hit in hits: if hit.Name == search['title']: @@ -1850,8 +1876,8 @@ class ITUNES(DriverBase): title = re.sub(r'[^0-9a-zA-Z ]', '_', search['title']) author = re.sub(r'[^0-9a-zA-Z ]', '_', search['author']) if DEBUG: - logger().info(" searching by name: '%s - %s'" % (title,author)) - hits = dev_books.Search('%s - %s' % (title,author), + logger().info(" searching by name: '%s - %s'" % (title, author)) + hits = dev_books.Search('%s - %s' % (title, author), self.SearchField.index('All')) if hits: hit = hits[0] @@ -1876,7 +1902,7 @@ class ITUNES(DriverBase): ''' if iswindows: if DEBUG: - logger().info(" ITUNES._find_library_book()") + logger().info(" %s._find_library_book()" % self.__class__.__name__) ''' if 'uuid' in search: logger().info(" looking for '%s' by %s (%s)" % @@ -1909,14 +1935,13 @@ class ITUNES(DriverBase): if DEBUG: logger().error(" no Books playlist found") - attempts = 9 while attempts: # Find book whose Album field = search['uuid'] if 'uuid' in search and search['uuid']: if DEBUG: logger().info(" searching by uuid '%s' ..." % search['uuid']) - hits = lib_books.Search(search['uuid'],self.SearchField.index('All')) + hits = lib_books.Search(search['uuid'], self.SearchField.index('All')) if hits: hit = hits[0] if DEBUG: @@ -1927,7 +1952,7 @@ class ITUNES(DriverBase): if search['author']: if DEBUG: logger().info(" searching by author '%s' ..." % search['author']) - hits = lib_books.Search(search['author'],self.SearchField.index('Artists')) + hits = lib_books.Search(search['author'], self.SearchField.index('Artists')) if hits: for hit in hits: if hit.Name == search['title']: @@ -1938,7 +1963,7 @@ class ITUNES(DriverBase): # Search by title if no author available if DEBUG: logger().info(" searching by title '%s' ..." % search['title']) - hits = lib_books.Search(search['title'],self.SearchField.index('All')) + hits = lib_books.Search(search['title'], self.SearchField.index('All')) if hits: for hit in hits: if hit.Name == search['title']: @@ -1952,8 +1977,8 @@ class ITUNES(DriverBase): title = re.sub(r'[^0-9a-zA-Z ]', '_', search['title']) author = re.sub(r'[^0-9a-zA-Z ]', '_', search['author']) if DEBUG: - logger().info(" searching by name: %s - %s" % (title,author)) - hits = lib_books.Search('%s - %s' % (title,author), + logger().info(" searching by name: %s - %s" % (title, author)) + hits = lib_books.Search('%s - %s' % (title, author), self.SearchField.index('All')) if hits: hit = hits[0] @@ -1996,7 +2021,8 @@ class ITUNES(DriverBase): thumb_data = zfr.read(thumb_path) if thumb_data == 'None': if False: - logger().info(" ITUNES._generate_thumbnail()\n returning None from cover cache for '%s'" % title) + logger().info(" %s._generate_thumbnail()\n returning None from cover cache for '%s'" % + (self.__class__.__name__, title)) zfr.close() return None except: @@ -2007,7 +2033,7 @@ class ITUNES(DriverBase): return thumb_data if DEBUG: - logger().info(" ITUNES._generate_thumbnail('%s'):" % title) + logger().info(" %s._generate_thumbnail('%s'):" % (self.__class__.__name__, title)) if isosx: # Fetch the artwork from iTunes @@ -2025,11 +2051,11 @@ class ITUNES(DriverBase): try: img_data = cStringIO.StringIO(data) im = PILImage.open(img_data) - scaled, width, height = fit_image(im.size[0],im.size[1], 60, 80) - im = im.resize((int(width),int(height)), PILImage.ANTIALIAS) + scaled, width, height = fit_image(im.size[0], im.size[1], 60, 80) + im = im.resize((int(width), int(height)), PILImage.ANTIALIAS) thumb = cStringIO.StringIO() - im.convert('RGB').save(thumb,'JPEG') + im.convert('RGB').save(thumb, 'JPEG') thumb_data = thumb.getvalue() thumb.close() if False: @@ -2049,7 +2075,6 @@ class ITUNES(DriverBase): return thumb_data - elif iswindows: if not book.Artwork.Count: if DEBUG: @@ -2065,10 +2090,10 @@ class ITUNES(DriverBase): book.Artwork.Item(1).SaveArtworkToFile(tmp_thumb) # Resize the cover im = PILImage.open(tmp_thumb) - scaled, width, height = fit_image(im.size[0],im.size[1], 60, 80) - im = im.resize((int(width),int(height)), PILImage.ANTIALIAS) + scaled, width, height = fit_image(im.size[0], im.size[1], 60, 80) + im = im.resize((int(width), int(height)), PILImage.ANTIALIAS) thumb = cStringIO.StringIO() - im.convert('RGB').save(thumb,'JPEG') + im.convert('RGB').save(thumb, 'JPEG') thumb_data = thumb.getvalue() os.remove(tmp_thumb) thumb.close() @@ -2081,7 +2106,7 @@ class ITUNES(DriverBase): logger().error(" error generating thumb for '%s', caching empty marker" % book.Name) thumb_data = None # Cache the empty cover - zfw.writestr(thumb_path,'None') + zfw.writestr(thumb_path, 'None') finally: zfw.close() @@ -2095,13 +2120,13 @@ class ITUNES(DriverBase): exploded_file_size = compressed_size format = file.rpartition('.')[2].lower() if format == 'epub': - myZip = ZipFile(file,'r') + myZip = ZipFile(file, 'r') myZipList = myZip.infolist() exploded_file_size = 0 for file in myZipList: exploded_file_size += file.file_size if False: - logger().info(" ITUNES._get_device_book_size()") + logger().info(" %s._get_device_book_size()" % self.__class__.__name__) logger().info(" %d items in archive" % len(myZipList)) logger().info(" compressed: %d exploded: %d" % (compressed_size, exploded_file_size)) myZip.close() @@ -2112,7 +2137,7 @@ class ITUNES(DriverBase): Assumes pythoncom wrapper for Windows ''' if DEBUG: - logger().info("\n ITUNES._get_device_books()") + logger().info("\n %s._get_device_books()" % self.__class__.__name__) device_books = [] if isosx: @@ -2131,14 +2156,13 @@ class ITUNES(DriverBase): logger().error(" book_playlist not found") for book in dev_books: - # This may need additional entries for international iTunes users if book.kind() in self.Audiobooks: if DEBUG: logger().info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) else: if DEBUG: - logger().info(" %-30.30s %-30.30s %-40.40s [%s]" % - (book.name(), book.artist(), book.album(), book.kind())) + logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % + (book.name(), book.artist(), book.composer(), book.kind())) device_books.append(book) if DEBUG: logger().info() @@ -2165,13 +2189,12 @@ class ITUNES(DriverBase): logger().info(" no Books playlist found") for book in dev_books: - # This may need additional entries for international iTunes users if book.KindAsString in self.Audiobooks: if DEBUG: logger().info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) else: if DEBUG: - logger().info(" %-30.30s %-30.30s %-40.40s [%s]" % (book.Name, book.Artist, book.Album, book.KindAsString)) + logger().info(" %-40.40s %-30.30s %-40.40s [%s]" % (book.Name, book.Artist, book.Composer, book.KindAsString)) device_books.append(book) if DEBUG: logger().info() @@ -2206,7 +2229,7 @@ class ITUNES(DriverBase): Windows assumes pythoncom wrapper ''' if DEBUG: - logger().info("\n ITUNES._get_library_books()") + logger().info("\n %s._get_library_books()" % self.__class__.__name__) library_books = {} library_orphans = {} @@ -2245,7 +2268,7 @@ class ITUNES(DriverBase): else: # Collect calibre orphans - remnants of recipe uploads format = 'pdf' if book.kind().startswith('PDF') else 'epub' - path = self.path_template % (book.name(), book.artist(),format) + path = self.path_template % (book.name(), book.artist(), format) if str(book.description()).startswith(self.description_prefix): try: if book.location() == appscript.k.missing_value: @@ -2302,7 +2325,7 @@ class ITUNES(DriverBase): logger().info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) else: format = 'pdf' if book.KindAsString.startswith('PDF') else 'epub' - path = self.path_template % (book.Name, book.Artist,format) + path = self.path_template % (book.Name, book.Artist, format) # Collect calibre orphans if book.Description.startswith(self.description_prefix): @@ -2317,6 +2340,7 @@ class ITUNES(DriverBase): except: if DEBUG: logger().info(" no books in library") + self.library_orphans = library_orphans return library_books @@ -2354,7 +2378,7 @@ class ITUNES(DriverBase): return {} elif iswindows: # Assumes a pythoncom wrapper - it_sources = ['Unknown','Library','iPod','AudioCD','MP3CD','Device','RadioTuner','SharedLibrary'] + it_sources = ['Unknown', 'Library', 'iPod', 'AudioCD', 'MP3CD', 'Device', 'RadioTuner', 'SharedLibrary'] names = [s.name for s in self.iTunes.sources] kinds = [it_sources[s.kind] for s in self.iTunes.sources] @@ -2367,12 +2391,12 @@ class ITUNES(DriverBase): kinds.pop(index) names.pop(index) - return dict(zip(kinds,names)) + return dict(zip(kinds, names)) - def _is_alpha(self,char): + def _is_alpha(self, char): ''' ''' - if not re.search('[a-zA-Z]',char): + if not re.search('[a-zA-Z]', char): return False else: return True @@ -2381,7 +2405,7 @@ class ITUNES(DriverBase): ''' ''' if DEBUG: - logger().info(" ITUNES:_launch_iTunes():\n Instantiating iTunes") + logger().info(" %s._launch_iTunes():\n Instantiating iTunes" % self.__class__.__name__) if isosx: import appscript @@ -2394,12 +2418,13 @@ class ITUNES(DriverBase): running_apps = appscript.app('System Events') if not 'iTunes' in running_apps.processes.name(): if DEBUG: - logger().info( "ITUNES:_launch_iTunes(): Launching iTunes" ) + logger().info("%s:_launch_iTunes(): Launching iTunes" % self.__class__.__name__) try: self.iTunes = iTunes = appscript.app('iTunes', hide=True) except: self.iTunes = None - raise UserFeedback(' ITUNES._launch_iTunes(): unable to find installed iTunes', details=None, level=UserFeedback.WARN) + raise UserFeedback(' %s._launch_iTunes(): unable to find installed iTunes' % + self.__class__.__name__, details=None, level=UserFeedback.WARN) iTunes.run() self.initial_status = 'launched' @@ -2415,13 +2440,13 @@ class ITUNES(DriverBase): as_binding = "dynamic" try: # Try dynamic binding - works with iTunes <= 10.6.1 - foo = self.iTunes.name() + self.iTunes.name() except: # Try static binding import itunes - self.iTunes = appscript.app('iTunes',terms=itunes) + self.iTunes = appscript.app('iTunes', terms=itunes) try: - foo = self.iTunes.name() + self.iTunes.name() as_binding = "static" except: self.iTunes = None @@ -2444,10 +2469,10 @@ class ITUNES(DriverBase): if DEBUG: logger().info(" %s %s" % (__appname__, __version__)) - logger().info(" [OSX %s, %s %s (%s), driver version %d.%d.%d]" % + logger().info(" [OSX %s, %s %s (%s), %s driver version %d.%d.%d]" % (platform.mac_ver()[0], self.iTunes.name(), self.iTunes.version(), self.initial_status, - self.version[0],self.version[1],self.version[2])) + self.__class__.__name__, self.version[0], self.version[1], self.version[2])) logger().info(" communicating with iTunes via %s %s using %s binding" % (as_name, as_version, as_binding)) logger().info(" calibre_library_path: %s" % self.calibre_library_path) @@ -2474,7 +2499,8 @@ class ITUNES(DriverBase): self.iTunes = win32com.client.Dispatch("iTunes.Application") except: self.iTunes = None - raise UserFeedback(' ITUNES._launch_iTunes(): unable to find installed iTunes', details=None, level=UserFeedback.WARN) + raise OpenFeedback('Unable to launch iTunes.\n' + + 'Try launching calibre as Administrator') if not DEBUG: self.iTunes.Windows[0].Minimized = True @@ -2482,8 +2508,7 @@ class ITUNES(DriverBase): try: # Pre-emptive test to confirm functional iTunes automation interface - foo = self.iTunes.Version - foo + logger().info(" automation interface with iTunes %s established" % self.iTunes.Version) except: self.iTunes = None raise OpenFeedback('Unable to connect to iTunes.\n' + @@ -2515,17 +2540,19 @@ class ITUNES(DriverBase): logger().info(" %s %s" % (__appname__, __version__)) logger().info(" [Windows %s - %s (%s), driver version %d.%d.%d]" % (self.iTunes.Windows[0].name, self.iTunes.Version, self.initial_status, - self.version[0],self.version[1],self.version[2])) + self.version[0], self.version[1], self.version[2])) logger().info(" calibre_library_path: %s" % self.calibre_library_path) - def _purge_orphans(self,library_books, cached_books): + def _purge_orphans(self, library_books, cached_books): ''' Scan library_books for any paths not on device Remove any iTunes orphans originally added by calibre This occurs when the user deletes a book in iBooks while disconnected ''' + PURGE_ORPHANS = False + if DEBUG: - logger().info(" ITUNES._purge_orphans()") + logger().info(" %s._purge_orphans()" % self.__class__.__name__) #self._dump_library_books(library_books) #logger().info(" cached_books:\n %s" % "\n ".join(cached_books.keys())) @@ -2533,45 +2560,48 @@ class ITUNES(DriverBase): if isosx: if book not in cached_books and \ str(library_books[book].description()).startswith(self.description_prefix): - if DEBUG: - logger().info(" '%s' not found on iDevice, removing from iTunes" % book) - btr = { 'title':library_books[book].name(), - 'author':library_books[book].artist(), - 'lib_book':library_books[book]} - self._remove_from_iTunes(btr) + if PURGE_ORPHANS: + if DEBUG: + logger().info(" '%s' not found on iDevice, removing from iTunes" % book) + btr = { + 'title': library_books[book].name(), + 'author': library_books[book].artist(), + 'lib_book': library_books[book]} + self._remove_from_iTunes(btr) + else: + if DEBUG: + logger().info(" '%s' found in iTunes, but not on iDevice" % (book)) + elif iswindows: if book not in cached_books and \ library_books[book].Description.startswith(self.description_prefix): - if DEBUG: - logger().info(" '%s' not found on iDevice, removing from iTunes" % book) - btr = { 'title':library_books[book].Name, - 'author':library_books[book].Artist, - 'lib_book':library_books[book]} - self._remove_from_iTunes(btr) - if DEBUG: - logger().info() + if PURGE_ORPHANS: + if DEBUG: + logger().info(" '%s' not found on iDevice, removing from iTunes" % book) + btr = { + 'title': library_books[book].Name, + 'author': library_books[book].Artist, + 'lib_book': library_books[book]} + self._remove_from_iTunes(btr) + else: + if DEBUG: + logger().info(" '%s' found in iTunes, but not on iDevice" % (book)) def _remove_existing_copy(self, path, metadata): ''' ''' if DEBUG: - logger().info(" ITUNES._remove_existing_copy()") + logger().info(" %s._remove_existing_copy()" % self.__class__.__name__) if self.manual_sync_mode: # Delete existing from Device|Books, add to self.update_list # for deletion from booklist[0] during add_books_to_metadata for book in self.cached_books: - if self.cached_books[book]['uuid'] == metadata.uuid or \ - (self.cached_books[book]['title'] == metadata.title and \ - self.cached_books[book]['author'] == authors_to_string(metadata.authors)): + if (self.cached_books[book]['uuid'] == metadata.uuid or + (self.cached_books[book]['title'] == metadata.title and + self.cached_books[book]['author'] == metadata.author)): self.update_list.append(self.cached_books[book]) - - if DEBUG: - logger().info( " deleting device book '%s'" % (metadata.title)) self._remove_from_device(self.cached_books[book]) - - if DEBUG: - logger().info(" deleting library book '%s'" % metadata.title) self._remove_from_iTunes(self.cached_books[book]) break else: @@ -2581,12 +2611,12 @@ class ITUNES(DriverBase): # Delete existing from Library|Books, add to self.update_list # for deletion from booklist[0] during add_books_to_metadata for book in self.cached_books: - if self.cached_books[book]['uuid'] == metadata.uuid or \ - (self.cached_books[book]['title'] == metadata.title and \ - self.cached_books[book]['author'] == authors_to_string(metadata.authors)): + if (self.cached_books[book]['uuid'] == metadata.uuid or + (self.cached_books[book]['title'] == metadata.title and \ + self.cached_books[book]['author'] == metadata.author)): self.update_list.append(self.cached_books[book]) if DEBUG: - logger().info( " deleting library book '%s'" % metadata.title) + logger().info(" deleting library book '%s'" % metadata.title) self._remove_from_iTunes(self.cached_books[book]) break else: @@ -2598,7 +2628,7 @@ class ITUNES(DriverBase): Windows assumes pythoncom wrapper ''' if DEBUG: - logger().info(" ITUNES._remove_from_device()") + logger().info(" %s._remove_from_device()" % self.__class__.__name__) if isosx: if DEBUG: logger().info(" deleting '%s' from iDevice" % cached_book['title']) @@ -2615,14 +2645,14 @@ class ITUNES(DriverBase): else: if DEBUG: logger().warning(" unable to remove '%s' by '%s' (%s) from device" % - (cached_book['title'],cached_book['author'],cached_book['uuid'])) + (cached_book['title'], cached_book['author'], cached_book['uuid'])) def _remove_from_iTunes(self, cached_book): ''' iTunes does not delete books from storage when removing from database via automation ''' if DEBUG: - logger().info(" ITUNES._remove_from_iTunes():") + logger().info(" %s._remove_from_iTunes():" % self.__class__.__name__) if isosx: ''' Manually remove the book from iTunes storage ''' @@ -2664,7 +2694,8 @@ class ITUNES(DriverBase): except: # We get here if there was an error with .location().path if DEBUG: - logger().info(" '%s' not found in iTunes storage" % cached_book['title']) + logger().info(" '%s' by %s not found in iTunes storage" % + (cached_book['title'], cached_book['author'])) # Delete the book from the iTunes database try: @@ -2739,16 +2770,16 @@ class ITUNES(DriverBase): from lxml import etree if DEBUG: - logger().info(" ITUNES._update_epub_metadata()") + logger().info(" %s._update_epub_metadata()" % self.__class__.__name__) # Fetch plugboard updates metadata_x = self._xform_metadata_via_plugboard(metadata, 'epub') # Refresh epub metadata - with open(fpath,'r+b') as zfo: + with open(fpath, 'r+b') as zfo: if False: try: - zf_opf = ZipFile(fpath,'r') + zf_opf = ZipFile(fpath, 'r') fnames = zf_opf.namelist() opf = [x for x in fnames if '.opf' in x][0] except: @@ -2765,7 +2796,7 @@ class ITUNES(DriverBase): timestamp = ts.get('content') old_ts = parse_date(timestamp) metadata.timestamp = datetime.datetime(old_ts.year, old_ts.month, old_ts.day, old_ts.hour, - old_ts.minute, old_ts.second, old_ts.microsecond+1, old_ts.tzinfo) + old_ts.minute, old_ts.second, old_ts.microsecond + 1, old_ts.tzinfo) if DEBUG: logger().info(" existing timestamp: %s" % metadata.timestamp) else: @@ -2785,10 +2816,10 @@ class ITUNES(DriverBase): if _('News') in metadata_x.tags or \ _('Catalog') in metadata_x.tags: if metadata_x.title.find('[') > 0: - metadata_x.title = metadata_x.title[:metadata_x.title.find('[')-1] + metadata_x.title = metadata_x.title[:metadata_x.title.find('[') - 1] date_as_author = '%s, %s %s, %s' % (strftime('%A'), strftime('%B'), strftime('%d').lstrip('0'), strftime('%Y')) metadata_x.author = metadata_x.authors = [date_as_author] - sort_author = re.sub('^\s*A\s+|^\s*The\s+|^\s*An\s+', '', metadata_x.title).rstrip() + sort_author = re.sub('^\s*A\s+|^\s*The\s+|^\s*An\s+', '', metadata_x.title).rstrip() metadata_x.author_sort = '%s %s' % (sort_author, strftime('%Y-%m-%d')) # Remove any non-alpha category tags @@ -2807,7 +2838,7 @@ class ITUNES(DriverBase): Trigger a sync, wait for completion ''' if DEBUG: - logger().info(" ITUNES:_update_device():\n %s" % msg) + logger().info(" %s:_update_device():\n %s" % (self.__class__.__name__, msg)) if isosx: self.iTunes.update() @@ -2855,7 +2886,7 @@ class ITUNES(DriverBase): ''' ''' if DEBUG: - logger().info(" ITUNES._update_iTunes_metadata()") + logger().info(" %s._update_iTunes_metadata()" % self.__class__.__name__) STRIP_TAGS = re.compile(r'<[^<]*?/?>') @@ -2869,7 +2900,7 @@ class ITUNES(DriverBase): lb_added.album.set(metadata_x.title) lb_added.artist.set(authors_to_string(metadata_x.authors)) lb_added.composer.set(metadata_x.uuid) - lb_added.description.set("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) + lb_added.description.set("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S'))) lb_added.enabled.set(True) lb_added.sort_artist.set(icu_title(metadata_x.author_sort)) lb_added.sort_name.set(metadata_x.title_sort) @@ -2880,7 +2911,7 @@ class ITUNES(DriverBase): db_added.album.set(metadata_x.title) db_added.artist.set(authors_to_string(metadata_x.authors)) db_added.composer.set(metadata_x.uuid) - db_added.description.set("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) + db_added.description.set("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S'))) db_added.enabled.set(True) db_added.sort_artist.set(icu_title(metadata_x.author_sort)) db_added.sort_name.set(metadata_x.title_sort) @@ -2888,17 +2919,17 @@ class ITUNES(DriverBase): if metadata_x.comments: if lb_added: - lb_added.comment.set(STRIP_TAGS.sub('',metadata_x.comments)) + lb_added.comment.set(STRIP_TAGS.sub('', metadata_x.comments)) if db_added: - db_added.comment.set(STRIP_TAGS.sub('',metadata_x.comments)) + db_added.comment.set(STRIP_TAGS.sub('', metadata_x.comments)) if metadata_x.rating: if lb_added: - lb_added.rating.set(metadata_x.rating*10) + lb_added.rating.set(metadata_x.rating * 10) # iBooks currently doesn't allow setting rating ... ? try: if db_added: - db_added.rating.set(metadata_x.rating*10) + db_added.rating.set(metadata_x.rating * 10) except: pass @@ -2907,13 +2938,13 @@ class ITUNES(DriverBase): # If title_sort applied in plugboard, that overrides using series/index as title_sort if metadata_x.series and self.settings().extra_customization[self.USE_SERIES_AS_CATEGORY]: if DEBUG: - logger().info(" ITUNES._update_iTunes_metadata()") + logger().info(" %s._update_iTunes_metadata()" % self.__class__.__name__) logger().info(" using Series name '%s' as Genre" % metadata_x.series) # Format the index as a sort key index = metadata_x.series_index integer = int(index) - fraction = index-integer + fraction = index - integer series_index = '%04d%s' % (integer, str('%0.4f' % fraction).lstrip('0')) if lb_added: # If no title_sort plugboard tweak, create sort_name from series/index @@ -2949,7 +2980,6 @@ class ITUNES(DriverBase): db_added.genre.set(tag) break - elif metadata_x.tags is not None: if DEBUG: logger().info(" %susing Tag as Genre" % @@ -2968,7 +2998,7 @@ class ITUNES(DriverBase): lb_added.Album = metadata_x.title lb_added.Artist = authors_to_string(metadata_x.authors) lb_added.Composer = metadata_x.uuid - lb_added.Description = ("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) + lb_added.Description = ("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S'))) lb_added.Enabled = True lb_added.SortArtist = icu_title(metadata_x.author_sort) lb_added.SortName = metadata_x.title_sort @@ -2981,7 +3011,7 @@ class ITUNES(DriverBase): db_added.Album = metadata_x.title db_added.Artist = authors_to_string(metadata_x.authors) db_added.Composer = metadata_x.uuid - db_added.Description = ("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) + db_added.Description = ("%s %s" % (self.description_prefix, strftime('%Y-%m-%d %H:%M:%S'))) db_added.Enabled = True db_added.SortArtist = icu_title(metadata_x.author_sort) db_added.SortName = metadata_x.title_sort @@ -2989,17 +3019,17 @@ class ITUNES(DriverBase): if metadata_x.comments: if lb_added: - lb_added.Comment = (STRIP_TAGS.sub('',metadata_x.comments)) + lb_added.Comment = (STRIP_TAGS.sub('', metadata_x.comments)) if db_added: - db_added.Comment = (STRIP_TAGS.sub('',metadata_x.comments)) + db_added.Comment = (STRIP_TAGS.sub('', metadata_x.comments)) if metadata_x.rating: if lb_added: - lb_added.AlbumRating = (metadata_x.rating*10) + lb_added.AlbumRating = (metadata_x.rating * 10) # iBooks currently doesn't allow setting rating ... ? try: if db_added: - db_added.AlbumRating = (metadata_x.rating*10) + db_added.AlbumRating = (metadata_x.rating * 10) except: if DEBUG: logger().warning(" iTunes automation interface reported an error" @@ -3015,7 +3045,7 @@ class ITUNES(DriverBase): # Format the index as a sort key index = metadata_x.series_index integer = int(index) - fraction = index-integer + fraction = index - integer series_index = '%04d%s' % (integer, str('%0.4f' % fraction).lstrip('0')) if lb_added: # If no title_sort plugboard tweak, create sort_name from series/index @@ -3086,11 +3116,10 @@ class ITUNES(DriverBase): def _wait_for_writable_metadata(self, db_added, delay=2.0): ''' - Ensure iDevice metadata is writable. Direct connect mode only + Ensure iDevice metadata is writable. DC mode only ''' if DEBUG: - logger().info(" ITUNES._wait_for_writable_metadata()") - logger().warning(" %s" % self.UNSUPPORTED_DIRECT_CONNECT_MODE_MESSAGE) + logger().info(" %s._wait_for_writable_metadata()" % self.__class__.__name__) attempts = 9 while attempts: @@ -3113,7 +3142,7 @@ class ITUNES(DriverBase): def _xform_metadata_via_plugboard(self, book, format): ''' Transform book metadata from plugboard templates ''' if DEBUG: - logger().info(" ITUNES._xform_metadata_via_plugboard()") + logger().info(" %s._xform_metadata_via_plugboard()" % self.__class__.__name__) if self.plugboard_func: pb = self.plugboard_func(self.DEVICE_PLUGBOARD_NAME, format, self.plugboards) @@ -3143,6 +3172,7 @@ class ITUNES(DriverBase): newmi = book return newmi + class ITUNES_ASYNC(ITUNES): ''' This subclass allows the user to interact directly with iTunes via a menu option @@ -3151,16 +3181,16 @@ class ITUNES_ASYNC(ITUNES): name = 'iTunes interface' gui_name = 'Apple iTunes' icon = I('devices/itunes.png') - description = _('Communicate with iTunes.') + description = _('Communicate with iTunes.') # Plugboard ID DEVICE_PLUGBOARD_NAME = 'APPLE' connected = False - def __init__(self,path): + def __init__(self, path): if DEBUG: - logger().info("ITUNES_ASYNC:__init__()") + logger().info("%s.__init__()" % self.__class__.__name__) try: import appscript @@ -3210,7 +3240,7 @@ class ITUNES_ASYNC(ITUNES): """ if not oncard: if DEBUG: - logger().info("ITUNES_ASYNC:books()") + logger().info("%s.books()" % self.__class__.__name__) if self.settings().extra_customization[self.CACHE_COVERS]: logger().info(" Cover fetching/caching enabled") else: @@ -3224,7 +3254,7 @@ class ITUNES_ASYNC(ITUNES): if isosx: library_books = self._get_library_books() book_count = float(len(library_books)) - for (i,book) in enumerate(library_books): + for (i, book) in enumerate(library_books): format = 'pdf' if library_books[book].kind().startswith('PDF') else 'epub' this_book = Book(library_books[book].name(), library_books[book].artist()) #this_book.path = library_books[book].location().path @@ -3249,17 +3279,17 @@ class ITUNES_ASYNC(ITUNES): booklist.add_book(this_book, False) cached_books[this_book.path] = { - 'title':library_books[book].name(), - 'author':library_books[book].artist().split(' & '), - 'lib_book':library_books[book], - 'dev_book':None, + 'title': library_books[book].name(), + 'author': library_books[book].artist().split(' & '), + 'lib_book': library_books[book], + 'dev_book': None, 'uuid': library_books[book].composer(), 'format': format } if self.report_progress is not None: - self.report_progress((i+1)/book_count, - _('%(num)d of %(tot)d') % dict(num=i+1, tot=book_count)) + self.report_progress((i + 1) / book_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=book_count)) elif iswindows: import pythoncom, win32com.client @@ -3269,7 +3299,7 @@ class ITUNES_ASYNC(ITUNES): self.iTunes = win32com.client.Dispatch("iTunes.Application") library_books = self._get_library_books() book_count = float(len(library_books)) - for (i,book) in enumerate(library_books): + for (i, book) in enumerate(library_books): this_book = Book(library_books[book].Name, library_books[book].Artist) format = 'pdf' if library_books[book].KindAsString.startswith('PDF') else 'epub' this_book.path = self.path_template % (library_books[book].Name, @@ -3292,16 +3322,16 @@ class ITUNES_ASYNC(ITUNES): booklist.add_book(this_book, False) cached_books[this_book.path] = { - 'title':library_books[book].Name, - 'author':library_books[book].Artist.split(' & '), - 'lib_book':library_books[book], + 'title': library_books[book].Name, + 'author': library_books[book].Artist.split(' & '), + 'lib_book': library_books[book], 'uuid': library_books[book].Composer, 'format': format } if self.report_progress is not None: - self.report_progress((i+1)/book_count, - _('%(num)d of %(tot)d') % dict(num=i+1, + self.report_progress((i + 1) / book_count, + _('%(num)d of %(tot)d') % dict(num=i + 1, tot=book_count)) finally: @@ -3312,7 +3342,7 @@ class ITUNES_ASYNC(ITUNES): self.cached_books = cached_books if DEBUG: self._dump_booklist(booklist, 'returning from books()', indent=2) - self._dump_cached_books('returning from books()',indent=2) + self._dump_cached_books('returning from books()', indent=2) return booklist else: @@ -3324,7 +3354,7 @@ class ITUNES_ASYNC(ITUNES): are pending GUI jobs that need to communicate with the device. ''' if DEBUG: - logger().info("ITUNES_ASYNC:eject()") + logger().info("%s.eject()" % self.__class__.__name__) self.iTunes = None self.connected = False @@ -3339,7 +3369,7 @@ class ITUNES_ASYNC(ITUNES): particular device doesn't have any of these locations it should return -1. """ if DEBUG: - logger().info("ITUNES_ASYNC:free_space()") + logger().info("%s.free_space()" % self.__class__.__name__) free_space = 0 if isosx: s = os.statvfs(os.sep) @@ -3348,7 +3378,7 @@ class ITUNES_ASYNC(ITUNES): free_bytes = ctypes.c_ulonglong(0) ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(os.sep), None, None, ctypes.pointer(free_bytes)) free_space = free_bytes.value - return (free_space,-1,-1) + return (free_space, -1, -1) def get_device_information(self, end_session=True): """ @@ -3356,9 +3386,9 @@ class ITUNES_ASYNC(ITUNES): @return: (device name, device version, software version on device, mime type) """ if DEBUG: - logger().info("ITUNES_ASYNC:get_device_information()") + logger().info("%s.get_device_information()" % self.__class__.__name__) - return ('iTunes','hw v1.0','sw v1.0', 'mime type normally goes here') + return ('iTunes', 'hw v1.0', 'sw v1.0', 'mime type normally goes here') def is_usb_connected(self, devices_on_system, debug=False, only_presence=False): @@ -3382,7 +3412,8 @@ class ITUNES_ASYNC(ITUNES): raise OpenFeedback(self.ITUNES_SANDBOX_LOCKOUT_MESSAGE) if DEBUG: - logger().info("ITUNES_ASYNC.open(connected_device: %s)" % repr(connected_device)) + logger().info("%s.open(connected_device: %s)" % + (self.__class__.__name__, repr(connected_device))) # Confirm/create thumbs archive if not os.path.exists(self.cache_dir): @@ -3393,7 +3424,7 @@ class ITUNES_ASYNC(ITUNES): if not os.path.exists(self.archive_path): logger().info(" creating zip archive") zfw = ZipFile(self.archive_path, mode='w') - zfw.writestr("iTunes Thumbs Archive",'') + zfw.writestr("iTunes Thumbs Archive", '') zfw.close() else: if DEBUG: @@ -3401,7 +3432,7 @@ class ITUNES_ASYNC(ITUNES): # If enabled in config options, create/confirm an iTunes storage folder if not self.settings().extra_customization[self.USE_ITUNES_STORAGE]: - self.iTunes_local_storage = os.path.join(config_dir,'iTunes storage') + self.iTunes_local_storage = os.path.join(config_dir, 'iTunes storage') if not os.path.exists(self.iTunes_local_storage): if DEBUG: logger()(" creating iTunes_local_storage at '%s'" % self.iTunes_local_storage) @@ -3419,7 +3450,7 @@ class ITUNES_ASYNC(ITUNES): ''' if DEBUG: - logger().info("ITUNES_ASYNC.sync_booklists()") + logger().info("%s.sync_booklists()" % self.__class__.__name__) # Inform user of any problem books if self.problem_titles: @@ -3433,9 +3464,10 @@ class ITUNES_ASYNC(ITUNES): ''' ''' if DEBUG: - logger().info("ITUNES_ASYNC:unmount_device()") + logger().info("%s.unmount_device()" % self.__class__.__name__) self.connected = False + class BookList(list): ''' A list of books. Each Book object must have the fields: @@ -3488,16 +3520,17 @@ class BookList(list): ''' return {} + class Book(Metadata): ''' A simple class describing a book in the iTunes Books Library. See ebooks.metadata.book.base ''' - def __init__(self,title,author): + def __init__(self, title, author): Metadata.__init__(self, title, authors=author.split(' & ')) + self.author = author self.author_sort = author_to_author_sort(author) @property def title_sorter(self): return title_sort(self.title) - diff --git a/src/calibre/devices/hanvon/driver.py b/src/calibre/devices/hanvon/driver.py index defa5bf477..c967f2c54c 100644 --- a/src/calibre/devices/hanvon/driver.py +++ b/src/calibre/devices/hanvon/driver.py @@ -41,6 +41,20 @@ class N516(USBMS): def can_handle(self, device_info, debug=False): return not is_alex(device_info) +class KIBANO(N516): + + name = 'Kibano driver' + gui_name = 'Kibano' + description = _('Communicate with the Kibano eBook reader.') + FORMATS = ['epub', 'pdf', 'txt'] + BCD = [0x323] + + VENDOR_NAME = 'EBOOK' + # We use EXTERNAL_SD_CARD for main mem as some devices have not working + # main memories + WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['INTERNAL_SD_CARD', + 'EXTERNAL_SD_CARD'] + class THEBOOK(N516): name = 'The Book driver' gui_name = 'The Book' diff --git a/src/calibre/devices/kobo/books.py b/src/calibre/devices/kobo/books.py index bcf6353e83..fc18a61fc8 100644 --- a/src/calibre/devices/kobo/books.py +++ b/src/calibre/devices/kobo/books.py @@ -199,6 +199,11 @@ class KTCollectionsBookList(CollectionsBookList): ('series' in collection_attributes and book.get('series', None) == category): is_series = True + + # The category should not be None, but, it has happened. + if not category: + continue + cat_name = category.strip(' ,') if cat_name not in collections: diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index 60672d7167..2932c657b0 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -1537,7 +1537,11 @@ class KOBOTOUCH(KOBO): return bookshelves cursor = connection.cursor() - query = "select ShelfName from ShelfContent where ContentId = ? and _IsDeleted = 'false'" + query = "select ShelfName " \ + "from ShelfContent " \ + "where ContentId = ? " \ + "and _IsDeleted = 'false' " \ + "and ShelfName is not null" # This should never be nulll, but it is protection against an error cause by a sync to the Kobo server values = (ContentID, ) cursor.execute(query, values) for i, row in enumerate(cursor): @@ -2357,6 +2361,8 @@ class KOBOTOUCH(KOBO): update_query = 'UPDATE content SET Series=?, SeriesNumber==? where BookID is Null and ContentID = ?' if book.series is None: update_values = (None, None, book.contentID, ) + elif book.series_index is None: # This should never happen, but... + update_values = (book.series, None, book.contentID, ) else: update_values = (book.series, "%g"%book.series_index, book.contentID, ) diff --git a/src/calibre/devices/mtp/driver.py b/src/calibre/devices/mtp/driver.py index bc55654b1e..b1850c9e49 100644 --- a/src/calibre/devices/mtp/driver.py +++ b/src/calibre/devices/mtp/driver.py @@ -13,6 +13,7 @@ from itertools import izip from calibre import prints from calibre.constants import iswindows, numeric_version +from calibre.devices.errors import PathError from calibre.devices.mtp.base import debug from calibre.devices.mtp.defaults import DeviceDefaults from calibre.ptempfile import SpooledTemporaryFile, PersistentTemporaryDirectory @@ -23,6 +24,12 @@ from calibre.utils.filenames import shorten_components_to BASE = importlib.import_module('calibre.devices.mtp.%s.driver'%( 'windows' if iswindows else 'unix')).MTP_DEVICE +class MTPInvalidSendPathError(PathError): + + def __init__(self, folder): + PathError.__init__(self, 'Trying to send to ignored folder: %s'%folder) + self.folder = folder + class MTP_DEVICE(BASE): METADATA_CACHE = 'metadata.calibre' @@ -46,6 +53,7 @@ class MTP_DEVICE(BASE): self._prefs = None self.device_defaults = DeviceDefaults() self.current_device_defaults = {} + self.highlight_ignored_folders = False @property def prefs(self): @@ -59,9 +67,25 @@ class MTP_DEVICE(BASE): p.defaults['blacklist'] = [] p.defaults['history'] = {} p.defaults['rules'] = [] + p.defaults['ignored_folders'] = {} return self._prefs + def is_folder_ignored(self, storage_or_storage_id, name, + ignored_folders=None): + storage_id = unicode(getattr(storage_or_storage_id, 'object_id', + storage_or_storage_id)) + name = icu_lower(name) + if ignored_folders is None: + ignored_folders = self.get_pref('ignored_folders') + if storage_id in ignored_folders: + return name in {icu_lower(x) for x in ignored_folders[storage_id]} + + return name in { + 'alarms', 'android', 'dcim', 'movies', 'music', 'notifications', + 'pictures', 'ringtones', 'samsung', 'sony', 'htc', 'bluetooth', + 'games', 'lost.dir', 'video', 'whatsapp', 'image'} + def configure_for_kindle_app(self): proxy = self.prefs with proxy: @@ -371,6 +395,8 @@ class MTP_DEVICE(BASE): for infile, fname, mi in izip(files, names, metadata): path = self.create_upload_path(prefix, mi, fname, routing) + if path and self.is_folder_ignored(storage, path[0]): + raise MTPInvalidSendPathError(path[0]) parent = self.ensure_parent(storage, path) if hasattr(infile, 'read'): pos = infile.tell() @@ -472,7 +498,7 @@ class MTP_DEVICE(BASE): def config_widget(self): from calibre.gui2.device_drivers.mtp_config import MTPConfig - return MTPConfig(self) + return MTPConfig(self, highlight_ignored_folders=self.highlight_ignored_folders) def save_settings(self, cw): cw.commit() diff --git a/src/calibre/devices/mtp/test.py b/src/calibre/devices/mtp/test.py index 4eaf28a385..b0e29db566 100644 --- a/src/calibre/devices/mtp/test.py +++ b/src/calibre/devices/mtp/test.py @@ -239,12 +239,12 @@ class TestDeviceInteraction(unittest.TestCase): # Test get_filesystem used_by_one = self.measure_memory_usage(1, - self.dev.dev.get_filesystem, self.storage.object_id, lambda x: - x) + self.dev.dev.get_filesystem, self.storage.object_id, + lambda x, l:True) used_by_many = self.measure_memory_usage(5, - self.dev.dev.get_filesystem, self.storage.object_id, lambda x: - x) + self.dev.dev.get_filesystem, self.storage.object_id, + lambda x, l: True) self.check_memory(used_by_one, used_by_many, 'Memory consumption during get_filesystem') diff --git a/src/calibre/devices/mtp/unix/devices.c b/src/calibre/devices/mtp/unix/devices.c index cfbce8c66c..098d0aedcb 100644 --- a/src/calibre/devices/mtp/unix/devices.c +++ b/src/calibre/devices/mtp/unix/devices.c @@ -13,6 +13,8 @@ const calibre_device_entry_t calibre_mtp_device_table[] = { // Amazon Kindle Fire HD , { "Amazon", 0x1949, "Fire HD", 0x0007, DEVICE_FLAGS_ANDROID_BUGS} + , { "Amazon", 0x1949, "Fire HD", 0x0008, DEVICE_FLAGS_ANDROID_BUGS} + , { "Amazon", 0x1949, "Fire HD", 0x000a, DEVICE_FLAGS_ANDROID_BUGS} // Nexus 10 , { "Google", 0x18d1, "Nexus 10", 0x4ee2, DEVICE_FLAGS_ANDROID_BUGS} diff --git a/src/calibre/devices/mtp/unix/driver.py b/src/calibre/devices/mtp/unix/driver.py index b8e8938c93..2a22b175e9 100644 --- a/src/calibre/devices/mtp/unix/driver.py +++ b/src/calibre/devices/mtp/unix/driver.py @@ -212,8 +212,13 @@ class MTP_DEVICE(MTPDeviceBase): ans += pprint.pformat(storage) return ans - def _filesystem_callback(self, entry): - self.filesystem_callback(_('Found object: %s')%entry.get('name', '')) + def _filesystem_callback(self, entry, level): + name = entry.get('name', '') + self.filesystem_callback(_('Found object: %s')%name) + if (level == 0 and + self.is_folder_ignored(self._currently_getting_sid, name)): + return False + return True @property def filesystem_cache(self): @@ -234,6 +239,7 @@ class MTP_DEVICE(MTPDeviceBase): storage.append({'id':sid, 'size':capacity, 'is_folder':True, 'name':name, 'can_delete':False, 'is_system':True}) + self._currently_getting_sid = unicode(sid) items, errs = self.dev.get_filesystem(sid, self._filesystem_callback) all_items.extend(items), all_errs.extend(errs) diff --git a/src/calibre/devices/mtp/unix/libmtp.c b/src/calibre/devices/mtp/unix/libmtp.c index b62bd8a9c7..920ddde3d1 100644 --- a/src/calibre/devices/mtp/unix/libmtp.c +++ b/src/calibre/devices/mtp/unix/libmtp.c @@ -8,7 +8,9 @@ #define UNICODE #include - +#include +#include +#include #include #include @@ -122,7 +124,7 @@ static PyObject* build_file_metadata(LIBMTP_file_t *nf, uint32_t storage_id) { PyObject *ans = NULL; ans = Py_BuildValue("{s:s, s:k, s:k, s:k, s:K, s:L, s:O}", - "name", (unsigned long)nf->filename, + "name", nf->filename, "id", (unsigned long)nf->item_id, "parent_id", (unsigned long)nf->parent_id, "storage_id", (unsigned long)storage_id, @@ -357,10 +359,10 @@ Device_storage_info(Device *self, void *closure) { // Device.get_filesystem {{{ -static int recursive_get_files(LIBMTP_mtpdevice_t *dev, uint32_t storage_id, uint32_t parent_id, PyObject *ans, PyObject *errs, PyObject *callback) { +static int recursive_get_files(LIBMTP_mtpdevice_t *dev, uint32_t storage_id, uint32_t parent_id, PyObject *ans, PyObject *errs, PyObject *callback, unsigned int level) { LIBMTP_file_t *f, *files; - PyObject *entry; - int ok = 1; + PyObject *entry, *r; + int ok = 1, recurse; Py_BEGIN_ALLOW_THREADS; files = LIBMTP_Get_Files_And_Folders(dev, storage_id, parent_id); @@ -372,13 +374,15 @@ static int recursive_get_files(LIBMTP_mtpdevice_t *dev, uint32_t storage_id, uin entry = build_file_metadata(f, storage_id); if (entry == NULL) { ok = 0; } else { - Py_XDECREF(PyObject_CallFunctionObjArgs(callback, entry, NULL)); + r = PyObject_CallFunction(callback, "OI", entry, level); + recurse = (r != NULL && PyObject_IsTrue(r)) ? 1 : 0; + Py_XDECREF(r); if (PyList_Append(ans, entry) != 0) { ok = 0; } Py_DECREF(entry); } - if (ok && f->filetype == LIBMTP_FILETYPE_FOLDER) { - if (!recursive_get_files(dev, storage_id, f->item_id, ans, errs, callback)) { + if (ok && recurse && f->filetype == LIBMTP_FILETYPE_FOLDER) { + if (!recursive_get_files(dev, storage_id, f->item_id, ans, errs, callback, level+1)) { ok = 0; } } @@ -408,7 +412,7 @@ Device_get_filesystem(Device *self, PyObject *args) { if (errs == NULL || ans == NULL) { PyErr_NoMemory(); return NULL; } LIBMTP_Clear_Errorstack(self->device); - ok = recursive_get_files(self->device, (uint32_t)storage_id, 0, ans, errs, callback); + ok = recursive_get_files(self->device, (uint32_t)storage_id, 0xFFFFFFFF, ans, errs, callback, 0); dump_errorstack(self->device, errs); if (!ok) { Py_DECREF(ans); @@ -537,7 +541,7 @@ static PyMethodDef Device_methods[] = { }, {"get_filesystem", (PyCFunction)Device_get_filesystem, METH_VARARGS, - "get_filesystem(storage_id, callback) -> Get the list of files and folders on the device in storage_id. Returns files, errors. callback must be a callable that accepts a single argument. It is called with every found object." + "get_filesystem(storage_id, callback) -> Get the list of files and folders on the device in storage_id. Returns files, errors. callback must be a callable that is called as with (entry, level). It is called with every found object. If callback returns False and the object is a folder, it is not recursed into." }, {"get_file", (PyCFunction)Device_get_file, METH_VARARGS, @@ -726,7 +730,20 @@ initlibmtp(void) { if (MTPError == NULL) return; PyModule_AddObject(m, "MTPError", MTPError); + // Redirect stdout to get rid of the annoying message about mtpz. Really, + // who designs a library without anyway to control/redirect the debugging + // output, and hardcoded paths that cannot be changed? + int bak, new; + fflush(stdout); + bak = dup(STDOUT_FILENO); + new = open("/dev/null", O_WRONLY); + dup2(new, STDOUT_FILENO); + close(new); LIBMTP_Init(); + fflush(stdout); + dup2(bak, STDOUT_FILENO); + close(bak); + LIBMTP_Set_Debug(LIBMTP_DEBUG_NONE); Py_INCREF(&DeviceType); diff --git a/src/calibre/devices/mtp/windows/content_enumeration.cpp b/src/calibre/devices/mtp/windows/content_enumeration.cpp index f7e585c55e..e642d38131 100644 --- a/src/calibre/devices/mtp/windows/content_enumeration.cpp +++ b/src/calibre/devices/mtp/windows/content_enumeration.cpp @@ -133,12 +133,14 @@ class GetBulkCallback : public IPortableDevicePropertiesBulkCallback { public: PyObject *items; + PyObject *subfolders; + unsigned int level; HANDLE complete; ULONG self_ref; PyThreadState *thread_state; PyObject *callback; - GetBulkCallback(PyObject *items_dict, HANDLE ev, PyObject* pycallback) : items(items_dict), complete(ev), self_ref(1), thread_state(NULL), callback(pycallback) {} + GetBulkCallback(PyObject *items_dict, PyObject *subfolders, unsigned int level, HANDLE ev, PyObject* pycallback) : items(items_dict), subfolders(subfolders), level(level), complete(ev), self_ref(1), thread_state(NULL), callback(pycallback) {} ~GetBulkCallback() {} HRESULT __stdcall OnStart(REFGUID Context) { return S_OK; } @@ -172,7 +174,7 @@ public: DWORD num = 0, i; wchar_t *property = NULL; IPortableDeviceValues *properties = NULL; - PyObject *temp, *obj; + PyObject *temp, *obj, *r; HRESULT hr; if (SUCCEEDED(values->GetCount(&num))) { @@ -196,7 +198,11 @@ public: Py_DECREF(temp); set_properties(obj, properties); - Py_XDECREF(PyObject_CallFunctionObjArgs(callback, obj, NULL)); + r = PyObject_CallFunction(callback, "OI", obj, this->level); + if (r != NULL && PyObject_IsTrue(r)) { + PyList_Append(this->subfolders, PyDict_GetItemString(obj, "id")); + } + Py_XDECREF(r); properties->Release(); properties = NULL; } @@ -209,8 +215,7 @@ public: }; -static PyObject* bulk_get_filesystem(IPortableDevice *device, IPortableDevicePropertiesBulk *bulk_properties, const wchar_t *storage_id, IPortableDevicePropVariantCollection *object_ids, PyObject *pycallback) { - PyObject *folders = NULL; +static bool bulk_get_filesystem(unsigned int level, IPortableDevice *device, IPortableDevicePropertiesBulk *bulk_properties, IPortableDevicePropVariantCollection *object_ids, PyObject *pycallback, PyObject *ans, PyObject *subfolders) { GUID guid_context = GUID_NULL; HANDLE ev = NULL; IPortableDeviceKeyCollection *properties; @@ -218,18 +223,15 @@ static PyObject* bulk_get_filesystem(IPortableDevice *device, IPortableDevicePro HRESULT hr; DWORD wait_result; int pump_result; - BOOL ok = TRUE; + bool ok = true; ev = CreateEvent(NULL, FALSE, FALSE, NULL); - if (ev == NULL) return PyErr_NoMemory(); - - folders = PyDict_New(); - if (folders == NULL) {PyErr_NoMemory(); goto end;} + if (ev == NULL) {PyErr_NoMemory(); return false; } properties = create_filesystem_properties_collection(); if (properties == NULL) goto end; - callback = new (std::nothrow) GetBulkCallback(folders, ev, pycallback); + callback = new (std::nothrow) GetBulkCallback(ans, subfolders, level, ev, pycallback); if (callback == NULL) { PyErr_NoMemory(); goto end; } hr = bulk_properties->QueueGetValuesByObjectList(object_ids, properties, callback, &guid_context); @@ -245,13 +247,13 @@ static PyObject* bulk_get_filesystem(IPortableDevice *device, IPortableDevicePro break; // Event was signalled, bulk operation complete } else if (wait_result == WAIT_OBJECT_0 + 1) { // Messages need to be dispatched pump_result = pump_waiting_messages(); - if (pump_result == 1) { PyErr_SetString(PyExc_RuntimeError, "Application has been asked to quit."); ok = FALSE; break;} + if (pump_result == 1) { PyErr_SetString(PyExc_RuntimeError, "Application has been asked to quit."); ok = false; break;} } else if (wait_result == WAIT_TIMEOUT) { // 60 seconds with no updates, looks bad - PyErr_SetString(WPDError, "The device seems to have hung."); ok = FALSE; break; + PyErr_SetString(WPDError, "The device seems to have hung."); ok = false; break; } else if (wait_result == WAIT_ABANDONED_0) { // This should never happen - PyErr_SetString(WPDError, "An unknown error occurred (mutex abandoned)"); ok = FALSE; break; + PyErr_SetString(WPDError, "An unknown error occurred (mutex abandoned)"); ok = false; break; } else { // The wait failed for some reason PyErr_SetFromWindowsErr(0); ok = FALSE; break; @@ -261,22 +263,21 @@ static PyObject* bulk_get_filesystem(IPortableDevice *device, IPortableDevicePro if (!ok) { bulk_properties->Cancel(guid_context); pump_waiting_messages(); - Py_DECREF(folders); folders = NULL; } end: if (ev != NULL) CloseHandle(ev); if (properties != NULL) properties->Release(); if (callback != NULL) callback->Release(); - return folders; + return ok; } // }}} -// find_all_objects_in() {{{ -static BOOL find_all_objects_in(IPortableDeviceContent *content, IPortableDevicePropVariantCollection *object_ids, const wchar_t *parent_id, PyObject *callback) { +// find_objects_in() {{{ +static bool find_objects_in(IPortableDeviceContent *content, IPortableDevicePropVariantCollection *object_ids, const wchar_t *parent_id) { /* - * Find all children of the object identified by parent_id, recursively. + * Find all children of the object identified by parent_id. * The child ids are put into object_ids. Returns False if any errors * occurred (also sets the python exception). */ @@ -285,8 +286,7 @@ static BOOL find_all_objects_in(IPortableDeviceContent *content, IPortableDevice PWSTR child_ids[10]; DWORD fetched, i; PROPVARIANT pv; - BOOL ok = 1; - PyObject *id; + bool ok = true; PropVariantInit(&pv); pv.vt = VT_LPWSTR; @@ -295,7 +295,7 @@ static BOOL find_all_objects_in(IPortableDeviceContent *content, IPortableDevice hr = content->EnumObjects(0, parent_id, NULL, &children); Py_END_ALLOW_THREADS; - if (FAILED(hr)) {hresult_set_exc("Failed to get children from device", hr); ok = 0; goto end;} + if (FAILED(hr)) {hresult_set_exc("Failed to get children from device", hr); ok = false; goto end;} hr = S_OK; @@ -306,19 +306,12 @@ static BOOL find_all_objects_in(IPortableDeviceContent *content, IPortableDevice if (SUCCEEDED(hr)) { for(i = 0; i < fetched; i++) { pv.pwszVal = child_ids[i]; - id = wchar_to_unicode(pv.pwszVal); - if (id != NULL) { - Py_XDECREF(PyObject_CallFunctionObjArgs(callback, id, NULL)); - Py_DECREF(id); - } hr2 = object_ids->Add(&pv); pv.pwszVal = NULL; if (FAILED(hr2)) { hresult_set_exc("Failed to add child ids to propvariantcollection", hr2); break; } - ok = find_all_objects_in(content, object_ids, child_ids[i], callback); - if (!ok) break; } for (i = 0; i < fetched; i++) { CoTaskMemFree(child_ids[i]); child_ids[i] = NULL; } - if (FAILED(hr2) || !ok) { ok = 0; goto end; } + if (FAILED(hr2) || !ok) { ok = false; goto end; } } } @@ -340,13 +333,8 @@ static PyObject* get_object_properties(IPortableDeviceProperties *devprops, IPor Py_END_ALLOW_THREADS; if (FAILED(hr)) { hresult_set_exc("Failed to get properties for object", hr); goto end; } - temp = wchar_to_unicode(object_id); - if (temp == NULL) goto end; - - ans = PyDict_New(); - if (ans == NULL) { PyErr_NoMemory(); goto end; } - if (PyDict_SetItemString(ans, "id", temp) != 0) { Py_DECREF(ans); ans = NULL; PyErr_NoMemory(); goto end; } - + ans = Py_BuildValue("{s:N}", "id", wchar_to_unicode(object_id)); + if (ans == NULL) goto end; set_properties(ans, values); end: @@ -355,12 +343,12 @@ end: return ans; } -static PyObject* single_get_filesystem(IPortableDeviceContent *content, const wchar_t *storage_id, IPortableDevicePropVariantCollection *object_ids, PyObject *callback) { +static bool single_get_filesystem(unsigned int level, IPortableDeviceContent *content, IPortableDevicePropVariantCollection *object_ids, PyObject *callback, PyObject *ans, PyObject *subfolders) { DWORD num, i; PROPVARIANT pv; HRESULT hr; - BOOL ok = 1; - PyObject *ans = NULL, *item = NULL; + bool ok = true; + PyObject *item = NULL, *r = NULL, *recurse = NULL; IPortableDeviceProperties *devprops = NULL; IPortableDeviceKeyCollection *properties = NULL; @@ -373,32 +361,36 @@ static PyObject* single_get_filesystem(IPortableDeviceContent *content, const wc hr = object_ids->GetCount(&num); if (FAILED(hr)) { hresult_set_exc("Failed to get object id count", hr); goto end; } - ans = PyDict_New(); - if (ans == NULL) goto end; - for (i = 0; i < num; i++) { - ok = 0; + ok = false; + recurse = NULL; PropVariantInit(&pv); hr = object_ids->GetAt(i, &pv); if (SUCCEEDED(hr) && pv.pwszVal != NULL) { item = get_object_properties(devprops, properties, pv.pwszVal); if (item != NULL) { - Py_XDECREF(PyObject_CallFunctionObjArgs(callback, item, NULL)); + r = PyObject_CallFunction(callback, "OI", item, level); + if (r != NULL && PyObject_IsTrue(r)) recurse = item; + Py_XDECREF(r); PyDict_SetItem(ans, PyDict_GetItemString(item, "id"), item); Py_DECREF(item); item = NULL; - ok = 1; + ok = true; } } else hresult_set_exc("Failed to get item from IPortableDevicePropVariantCollection", hr); PropVariantClear(&pv); - if (!ok) { Py_DECREF(ans); ans = NULL; break; } + if (!ok) break; + if (recurse != NULL) { + if (PyList_Append(subfolders, PyDict_GetItemString(recurse, "id")) == -1) ok = false; + } + if (!ok) break; } end: if (devprops != NULL) devprops->Release(); if (properties != NULL) properties->Release(); - return ans; + return ok; } // }}} @@ -438,35 +430,60 @@ end: return values; } // }}} -PyObject* wpd::get_filesystem(IPortableDevice *device, const wchar_t *storage_id, IPortableDevicePropertiesBulk *bulk_properties, PyObject *callback) { // {{{ - PyObject *folders = NULL; +static bool get_files_and_folders(unsigned int level, IPortableDevice *device, IPortableDeviceContent *content, IPortableDevicePropertiesBulk *bulk_properties, const wchar_t *parent_id, PyObject *callback, PyObject *ans) { // {{{ + bool ok = true; IPortableDevicePropVariantCollection *object_ids = NULL; + PyObject *subfolders = NULL; + HRESULT hr; + + subfolders = PyList_New(0); + if (subfolders == NULL) { ok = false; goto end; } + + Py_BEGIN_ALLOW_THREADS; + hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, NULL, + CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&object_ids)); + Py_END_ALLOW_THREADS; + if (FAILED(hr)) { hresult_set_exc("Failed to create propvariantcollection", hr); ok = false; goto end; } + + ok = find_objects_in(content, object_ids, parent_id); + if (!ok) goto end; + + if (bulk_properties != NULL) ok = bulk_get_filesystem(level, device, bulk_properties, object_ids, callback, ans, subfolders); + else ok = single_get_filesystem(level, content, object_ids, callback, ans, subfolders); + if (!ok) goto end; + + for (Py_ssize_t i = 0; i < PyList_GET_SIZE(subfolders); i++) { + const wchar_t *child_id = unicode_to_wchar(PyList_GET_ITEM(subfolders, i)); + if (child_id == NULL) { ok = false; break; } + ok = get_files_and_folders(level+1, device, content, bulk_properties, child_id, callback, ans); + if (!ok) break; + } +end: + if (object_ids != NULL) object_ids->Release(); + Py_XDECREF(subfolders); + return ok; +} // }}} + +PyObject* wpd::get_filesystem(IPortableDevice *device, const wchar_t *storage_id, IPortableDevicePropertiesBulk *bulk_properties, PyObject *callback) { // {{{ + PyObject *ans = NULL; IPortableDeviceContent *content = NULL; HRESULT hr; - BOOL ok; + + ans = PyDict_New(); + if (ans == NULL) return PyErr_NoMemory(); Py_BEGIN_ALLOW_THREADS; hr = device->Content(&content); Py_END_ALLOW_THREADS; if (FAILED(hr)) { hresult_set_exc("Failed to create content interface", hr); goto end; } - Py_BEGIN_ALLOW_THREADS; - hr = CoCreateInstance(CLSID_PortableDevicePropVariantCollection, NULL, - CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&object_ids)); - Py_END_ALLOW_THREADS; - if (FAILED(hr)) { hresult_set_exc("Failed to create propvariantcollection", hr); goto end; } - - ok = find_all_objects_in(content, object_ids, storage_id, callback); - if (!ok) goto end; - - if (bulk_properties != NULL) folders = bulk_get_filesystem(device, bulk_properties, storage_id, object_ids, callback); - else folders = single_get_filesystem(content, storage_id, object_ids, callback); + if (!get_files_and_folders(0, device, content, bulk_properties, storage_id, callback, ans)) { + Py_DECREF(ans); ans = NULL; + } end: if (content != NULL) content->Release(); - if (object_ids != NULL) object_ids->Release(); - - return folders; + return ans; } // }}} PyObject* wpd::get_file(IPortableDevice *device, const wchar_t *object_id, PyObject *dest, PyObject *callback) { // {{{ diff --git a/src/calibre/devices/mtp/windows/device.cpp b/src/calibre/devices/mtp/windows/device.cpp index 3886bb5e56..88b57776ec 100644 --- a/src/calibre/devices/mtp/windows/device.cpp +++ b/src/calibre/devices/mtp/windows/device.cpp @@ -164,7 +164,7 @@ static PyMethodDef Device_methods[] = { }, {"get_filesystem", (PyCFunction)py_get_filesystem, METH_VARARGS, - "get_filesystem(storage_id, callback) -> Get all files/folders on the storage identified by storage_id. Tries to use bulk operations when possible. callback must be a callable that accepts a single argument. It is called with every found id and then with the metadata for every id." + "get_filesystem(storage_id, callback) -> Get all files/folders on the storage identified by storage_id. Tries to use bulk operations when possible. callback must be a callable that is called as (object, level). It is called with every found object. If the callback returns False and the object is a folder, it is not recursed into." }, {"get_file", (PyCFunction)py_get_file, METH_VARARGS, diff --git a/src/calibre/devices/mtp/windows/driver.py b/src/calibre/devices/mtp/windows/driver.py index 7253b4490c..154bde0d8d 100644 --- a/src/calibre/devices/mtp/windows/driver.py +++ b/src/calibre/devices/mtp/windows/driver.py @@ -214,13 +214,14 @@ class MTP_DEVICE(MTPDeviceBase): return True - def _filesystem_callback(self, obj): - if isinstance(obj, dict): - n = obj.get('name', '') - msg = _('Found object: %s')%n - else: - msg = _('Found id: %s')%obj + def _filesystem_callback(self, obj, level): + n = obj.get('name', '') + msg = _('Found object: %s')%n + if (level == 0 and + self.is_folder_ignored(self._currently_getting_sid, n)): + return False self.filesystem_callback(msg) + return obj.get('is_folder', False) @property def filesystem_cache(self): @@ -241,6 +242,7 @@ class MTP_DEVICE(MTPDeviceBase): break storage = {'id':storage_id, 'size':capacity, 'name':name, 'is_folder':True, 'can_delete':False, 'is_system':True} + self._currently_getting_sid = unicode(storage_id) id_map = self.dev.get_filesystem(storage_id, self._filesystem_callback) for x in id_map.itervalues(): x['storage_id'] = storage_id diff --git a/src/calibre/devices/mtp/windows/remote.py b/src/calibre/devices/mtp/windows/remote.py index f1dfa92767..628839a197 100644 --- a/src/calibre/devices/mtp/windows/remote.py +++ b/src/calibre/devices/mtp/windows/remote.py @@ -12,24 +12,24 @@ pprint, io def build(mod='wpd'): master = subprocess.Popen('ssh -MN getafix'.split()) - master2 = subprocess.Popen('ssh -MN xp_build'.split()) + master2 = subprocess.Popen('ssh -MN win64'.split()) try: - while not glob.glob(os.path.expanduser('~/.ssh/*kovid@xp_build*')): + while not glob.glob(os.path.expanduser('~/.ssh/*kovid@win64*')): time.sleep(0.05) - builder = subprocess.Popen('ssh xp_build ~/build-wpd'.split()) + builder = subprocess.Popen('ssh win64 ~/build-wpd'.split()) if builder.wait() != 0: raise Exception('Failed to build plugin') while not glob.glob(os.path.expanduser('~/.ssh/*kovid@getafix*')): time.sleep(0.05) - syncer = subprocess.Popen('ssh getafix ~/test-wpd'.split()) + syncer = subprocess.Popen('ssh getafix ~/update-calibre'.split()) if syncer.wait() != 0: raise Exception('Failed to rsync to getafix') subprocess.check_call( - ('scp xp_build:build/calibre/src/calibre/plugins/%s.pyd /tmp'%mod).split()) + ('scp win64:build/calibre/src/calibre/plugins/%s.pyd /tmp'%mod).split()) subprocess.check_call( - ('scp /tmp/%s.pyd getafix:calibre/src/calibre/devices/mtp/windows'%mod).split()) + ('scp /tmp/%s.pyd getafix:calibre-src/src/calibre/devices/mtp/windows'%mod).split()) p = subprocess.Popen( - 'ssh getafix calibre-debug -e calibre/src/calibre/devices/mtp/windows/remote.py'.split()) + 'ssh getafix calibre-debug -e calibre-src/src/calibre/devices/mtp/windows/remote.py'.split()) p.wait() print() finally: @@ -59,7 +59,7 @@ def main(): # return from calibre.devices.scanner import win_scanner - from calibre.devices.mtp.windows.driver import MTP_DEVICE + from calibre.devices.mtp.driver import MTP_DEVICE dev = MTP_DEVICE(None) dev.startup() print (dev.wpd, dev.wpd_error) diff --git a/src/calibre/devices/smart_device_app/driver.py b/src/calibre/devices/smart_device_app/driver.py index be7f5012c5..a9df1c0d94 100644 --- a/src/calibre/devices/smart_device_app/driver.py +++ b/src/calibre/devices/smart_device_app/driver.py @@ -54,6 +54,8 @@ def synchronous(tlockname): class ConnectionListener (Thread): + NOT_SERVICED_COUNT = 6 + def __init__(self, driver): Thread.__init__(self) self.daemon = True @@ -78,8 +80,8 @@ class ConnectionListener (Thread): if not self.driver.connection_queue.empty(): queue_not_serviced_count += 1 - if queue_not_serviced_count >= 3: - self.driver._debug('queue not serviced') + if queue_not_serviced_count >= self.NOT_SERVICED_COUNT: + self.driver._debug('queue not serviced', queue_not_serviced_count) try: sock = self.driver.connection_queue.get_nowait() s = self.driver._json_encode( @@ -1281,10 +1283,10 @@ class SMART_DEVICE_APP(DeviceConfig, DevicePlugin): self._close_listen_socket() return message else: - while i < 100: # try up to 100 random port numbers + while i < 100: # try 9090 then up to 99 random port numbers i += 1 port = self._attach_to_port(self.listen_socket, - random.randint(8192, 32000)) + 9090 if i == 1 else random.randint(8192, 32000)) if port != 0: break if port == 0: diff --git a/src/calibre/devices/teclast/driver.py b/src/calibre/devices/teclast/driver.py index 192f03cb45..acd20308ad 100644 --- a/src/calibre/devices/teclast/driver.py +++ b/src/calibre/devices/teclast/driver.py @@ -19,9 +19,10 @@ class TECLAST_K3(USBMS): PRODUCT_ID = [0x3203] BCD = [0x0000, 0x0100] - VENDOR_NAME = ['TECLAST', 'IMAGIN', 'RK28XX', 'PER3274B', 'BEBOOK'] + VENDOR_NAME = ['TECLAST', 'IMAGIN', 'RK28XX', 'PER3274B', 'BEBOOK', + 'RK2728', 'MR700'] WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['DIGITAL_PLAYER', 'TL-K5', - 'EREADER', 'USB-MSC', 'PER3274B', 'BEBOOK'] + 'EREADER', 'USB-MSC', 'PER3274B', 'BEBOOK', 'USER'] MAIN_MEMORY_VOLUME_LABEL = 'K3 Main Memory' STORAGE_CARD_VOLUME_LABEL = 'K3 Storage Card' diff --git a/src/calibre/ebooks/conversion/plugins/pdf_output.py b/src/calibre/ebooks/conversion/plugins/pdf_output.py index da66a9be0d..c042de7050 100644 --- a/src/calibre/ebooks/conversion/plugins/pdf_output.py +++ b/src/calibre/ebooks/conversion/plugins/pdf_output.py @@ -14,50 +14,32 @@ import os from calibre.customize.conversion import OutputFormatPlugin, \ OptionRecommendation from calibre.ptempfile import TemporaryDirectory -from calibre.constants import iswindows -UNITS = [ - 'millimeter', - 'point', - 'inch' , - 'pica' , - 'didot', - 'cicero', - 'devicepixel', - ] +UNITS = ['millimeter', 'centimeter', 'point', 'inch' , 'pica' , 'didot', + 'cicero', 'devicepixel'] -PAPER_SIZES = ['b2', - 'a9', - 'executive', - 'tabloid', - 'b4', - 'b5', - 'b6', - 'b7', - 'b0', - 'b1', - 'letter', - 'b3', - 'a7', - 'a8', - 'b8', - 'b9', - 'a3', - 'a1', - 'folio', - 'c5e', - 'dle', - 'a0', - 'ledger', - 'legal', - 'a6', - 'a2', - 'b10', - 'a5', - 'comm10e', - 'a4'] +PAPER_SIZES = [u'a0', u'a1', u'a2', u'a3', u'a4', u'a5', u'a6', u'b0', u'b1', + u'b2', u'b3', u'b4', u'b5', u'b6', u'legal', u'letter'] -ORIENTATIONS = ['portrait', 'landscape'] +class PDFMetadata(object): # {{{ + def __init__(self, oeb_metadata=None): + from calibre import force_unicode + from calibre.ebooks.metadata import authors_to_string + self.title = _(u'Unknown') + self.author = _(u'Unknown') + self.tags = u'' + + if oeb_metadata != None: + if len(oeb_metadata.title) >= 1: + self.title = oeb_metadata.title[0].value + if len(oeb_metadata.creator) >= 1: + self.author = authors_to_string([x.value for x in oeb_metadata.creator]) + if oeb_metadata.subject: + self.tags = u', '.join(map(unicode, oeb_metadata.subject)) + + self.title = force_unicode(self.title) + self.author = force_unicode(self.author) +# }}} class PDFOutput(OutputFormatPlugin): @@ -66,9 +48,14 @@ class PDFOutput(OutputFormatPlugin): file_type = 'pdf' options = set([ + OptionRecommendation(name='override_profile_size', recommended_value=False, + help=_('Normally, the PDF page size is set by the output profile' + ' chosen under page options. This option will cause the ' + ' page size settings under PDF Output to override the ' + ' size specified by the output profile.')), OptionRecommendation(name='unit', recommended_value='inch', level=OptionRecommendation.LOW, short_switch='u', choices=UNITS, - help=_('The unit of measure. Default is inch. Choices ' + help=_('The unit of measure for page sizes. Default is inch. Choices ' 'are %s ' 'Note: This does not override the unit for margins!') % UNITS), OptionRecommendation(name='paper_size', recommended_value='letter', @@ -80,10 +67,6 @@ class PDFOutput(OutputFormatPlugin): help=_('Custom size of the document. Use the form widthxheight ' 'EG. `123x321` to specify the width and height. ' 'This overrides any specified paper-size.')), - OptionRecommendation(name='orientation', recommended_value='portrait', - level=OptionRecommendation.LOW, choices=ORIENTATIONS, - help=_('The orientation of the page. Default is portrait. Choices ' - 'are %s') % ORIENTATIONS), OptionRecommendation(name='preserve_cover_aspect_ratio', recommended_value=False, help=_('Preserve the aspect ratio of the cover, instead' @@ -108,6 +91,14 @@ class PDFOutput(OutputFormatPlugin): OptionRecommendation(name='pdf_mono_font_size', recommended_value=16, help=_( 'The default font size for monospaced text')), + OptionRecommendation(name='pdf_mark_links', recommended_value=False, + help=_('Surround all links with a red box, useful for debugging.')), + OptionRecommendation(name='old_pdf_engine', recommended_value=False, + help=_('Use the old, less capable engine to generate the PDF')), + OptionRecommendation(name='uncompressed_pdf', + recommended_value=False, help=_( + 'Generate an uncompressed PDF, useful for debugging, ' + 'only works with the new PDF engine.')), ]) def convert(self, oeb_book, output_path, input_plugin, opts, log): @@ -200,33 +191,18 @@ class PDFOutput(OutputFormatPlugin): if k in family_map: val[i].value = family_map[k] - def remove_font_specification(self): - # Qt produces image based pdfs on windows when non-generic fonts are specified - # This might change in Qt WebKit 2.3+ you will have to test. - for item in self.oeb.manifest: - if not hasattr(item.data, 'cssRules'): continue - for i, rule in enumerate(item.data.cssRules): - if rule.type != rule.STYLE_RULE: continue - ff = rule.style.getProperty('font-family') - if ff is None: continue - val = ff.propertyValue - for i in xrange(val.length): - k = icu_lower(val[i].value) - if k not in {'serif', 'sans', 'sans-serif', 'sansserif', - 'monospace', 'cursive', 'fantasy'}: - val[i].value = '' - def convert_text(self, oeb_book): - from calibre.ebooks.pdf.writer import PDFWriter from calibre.ebooks.metadata.opf2 import OPF + if self.opts.old_pdf_engine: + from calibre.ebooks.pdf.writer import PDFWriter + PDFWriter + else: + from calibre.ebooks.pdf.render.from_html import PDFWriter self.log.debug('Serializing oeb input to disk for processing...') self.get_cover_data() - if iswindows: - self.remove_font_specification() - else: - self.handle_embedded_fonts() + self.handle_embedded_fonts() with TemporaryDirectory('_pdf_out') as oeb_dir: from calibre.customize.ui import plugin_for_output_format @@ -240,9 +216,9 @@ class PDFOutput(OutputFormatPlugin): 'toc', None)) def write(self, Writer, items, toc): - from calibre.ebooks.pdf.writer import PDFMetadata writer = Writer(self.opts, self.log, cover_data=self.cover_data, toc=toc) + writer.report_progress = self.report_progress close = False if not hasattr(self.output_path, 'write'): diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py index 8c5a99b64e..11e434c635 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -1125,7 +1125,7 @@ OptionRecommendation(name='search_replace', RemoveFakeMargins()(self.oeb, self.log, self.opts) RemoveAdobeMargins()(self.oeb, self.log, self.opts) - if self.opts.subset_embedded_fonts: + if self.opts.subset_embedded_fonts and self.output_plugin.file_type != 'pdf': from calibre.ebooks.oeb.transforms.subset import SubsetFonts SubsetFonts()(self.oeb, self.log, self.opts) diff --git a/src/calibre/ebooks/conversion/utils.py b/src/calibre/ebooks/conversion/utils.py index ddeba79365..2dc91b7530 100644 --- a/src/calibre/ebooks/conversion/utils.py +++ b/src/calibre/ebooks/conversion/utils.py @@ -335,32 +335,50 @@ class HeuristicProcessor(object): This function intentionally leaves hyphenated content alone as that is handled by the dehyphenate routine in a separate step ''' + def style_unwrap(match): + style_close = match.group('style_close') + style_open = match.group('style_open') + if style_open and style_close: + return style_close+' '+style_open + elif style_open and not style_close: + return ' '+style_open + elif not style_open and style_close: + return style_close+' ' + else: + return ' ' + # define the pieces of the regex lookahead = "(?<=.{"+str(length)+u"}([a-zäëïöüàèìòùáćéíĺóŕńśúýâêîôûçąężıãõñæøþðßěľščťžňďřů,:)\IA\u00DF]|(?\s*()?" + line_ending = "\s*(?P)?\s*()?" blanklines = "\s*(?P<(p|span|div)[^>]*>\s*(<(p|span|div)[^>]*>\s*\s*)\s*){0,3}\s*" - line_opening = "<(span|[iubp]|div)[^>]*>\s*(<(span|[iubp]|div)[^>]*>)?\s*" + line_opening = "<(p|div)[^>]*>\s*(?P<(span|[iub])[^>]*>)?\s*" txt_line_wrap = u"((\u0020|\u0009)*\n){1,4}" - unwrap_regex = lookahead+line_ending+blanklines+line_opening - em_en_unwrap_regex = em_en_lookahead+line_ending+blanklines+line_opening - shy_unwrap_regex = soft_hyphen+line_ending+blanklines+line_opening - if format == 'txt': unwrap_regex = lookahead+txt_line_wrap em_en_unwrap_regex = em_en_lookahead+txt_line_wrap shy_unwrap_regex = soft_hyphen+txt_line_wrap + else: + unwrap_regex = lookahead+line_ending+blanklines+line_opening + em_en_unwrap_regex = em_en_lookahead+line_ending+blanklines+line_opening + shy_unwrap_regex = soft_hyphen+line_ending+blanklines+line_opening unwrap = re.compile(u"%s" % unwrap_regex, re.UNICODE) em_en_unwrap = re.compile(u"%s" % em_en_unwrap_regex, re.UNICODE) shy_unwrap = re.compile(u"%s" % shy_unwrap_regex, re.UNICODE) - content = unwrap.sub(' ', content) - content = em_en_unwrap.sub('', content) - content = shy_unwrap.sub('', content) + if format == 'txt': + content = unwrap.sub(' ', content) + content = em_en_unwrap.sub('', content) + content = shy_unwrap.sub('', content) + else: + content = unwrap.sub(style_unwrap, content) + content = em_en_unwrap.sub(style_unwrap, content) + content = shy_unwrap.sub(style_unwrap, content) + return content def txt_process(self, match): diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py index c2ec6f9bce..9683837ad6 100644 --- a/src/calibre/ebooks/html/input.py +++ b/src/calibre/ebooks/html/input.py @@ -17,7 +17,7 @@ from urllib import unquote from calibre.ebooks.chardet import detect_xml_encoding from calibre.constants import iswindows -from calibre import unicode_path, as_unicode +from calibre import unicode_path, as_unicode, replace_entities class Link(object): ''' @@ -147,6 +147,7 @@ class HTMLFile(object): url = match.group(i) if url: break + url = replace_entities(url) try: link = self.resolve(url) except ValueError: diff --git a/src/calibre/ebooks/metadata/sources/amazon.py b/src/calibre/ebooks/metadata/sources/amazon.py index 6e24f4caf7..63783ba8eb 100644 --- a/src/calibre/ebooks/metadata/sources/amazon.py +++ b/src/calibre/ebooks/metadata/sources/amazon.py @@ -75,6 +75,20 @@ class Worker(Thread): # Get details {{{ 9: ['sept'], 12: ['déc'], }, + 'br': { + 1: ['janeiro'], + 2: ['fevereiro'], + 3: ['março'], + 4: ['abril'], + 5: ['maio'], + 6: ['junho'], + 7: ['julho'], + 8: ['agosto'], + 9: ['setembro'], + 10: ['outubro'], + 11: ['novembro'], + 12: ['dezembro'], + }, 'es': { 1: ['enero'], 2: ['febrero'], @@ -89,7 +103,7 @@ class Worker(Thread): # Get details {{{ 11: ['noviembre'], 12: ['diciembre'], }, - 'jp': { + 'jp': { 1: [u'1月'], 2: [u'2月'], 3: [u'3月'], @@ -117,6 +131,7 @@ class Worker(Thread): # Get details {{{ text()="Product details" or \ text()="Détails sur le produit" or \ text()="Detalles del producto" or \ + text()="Detalhes do produto" or \ text()="登録情報"]/../div[@class="content"] ''' # Editor: is for Spanish @@ -126,6 +141,7 @@ class Worker(Thread): # Get details {{{ starts-with(text(), "Editore:") or \ starts-with(text(), "Editeur") or \ starts-with(text(), "Editor:") or \ + starts-with(text(), "Editora:") or \ starts-with(text(), "出版社:")] ''' self.language_xpath = ''' @@ -141,7 +157,7 @@ class Worker(Thread): # Get details {{{ ''' self.ratings_pat = re.compile( - r'([0-9.]+) ?(out of|von|su|étoiles sur|つ星のうち|de un máximo de) ([\d\.]+)( (stars|Sternen|stelle|estrellas)){0,1}') + r'([0-9.]+) ?(out of|von|su|étoiles sur|つ星のうち|de un máximo de|de) ([\d\.]+)( (stars|Sternen|stelle|estrellas|estrelas)){0,1}') lm = { 'eng': ('English', 'Englisch'), @@ -150,6 +166,7 @@ class Worker(Thread): # Get details {{{ 'deu': ('German', 'Deutsch'), 'spa': ('Spanish', 'Espa\xf1ol', 'Espaniol'), 'jpn': ('Japanese', u'日本語'), + 'por': ('Portuguese', 'Português'), } self.lang_map = {} for code, names in lm.iteritems(): @@ -435,7 +452,7 @@ class Worker(Thread): # Get details {{{ def parse_cover(self, root): - imgs = root.xpath('//img[@id="prodImage" and @src]') + imgs = root.xpath('//img[(@id="prodImage" or @id="original-main-image") and @src]') if imgs: src = imgs[0].get('src') if '/no-image-avail' not in src: @@ -505,6 +522,7 @@ class Amazon(Source): 'it' : _('Italy'), 'jp' : _('Japan'), 'es' : _('Spain'), + 'br' : _('Brazil'), } options = ( @@ -570,6 +588,8 @@ class Amazon(Source): url = 'http://amzn.com/'+asin elif domain == 'uk': url = 'http://www.amazon.co.uk/dp/'+asin + elif domain == 'br': + url = 'http://www.amazon.com.br/dp/'+asin else: url = 'http://www.amazon.%s/dp/%s'%(domain, asin) if url: @@ -629,7 +649,7 @@ class Amazon(Source): q['field-isbn'] = isbn else: # Only return book results - q['search-alias'] = 'stripbooks' + q['search-alias'] = 'digital-text' if domain == 'br' else 'stripbooks' if title: title_tokens = list(self.get_title_tokens(title)) if title_tokens: @@ -661,6 +681,8 @@ class Amazon(Source): udomain = 'co.uk' elif domain == 'jp': udomain = 'co.jp' + elif domain == 'br': + udomain = 'com.br' url = 'http://www.amazon.%s/s/?'%udomain + urlencode(encoded_q) return url, domain @@ -978,6 +1000,16 @@ if __name__ == '__main__': # tests {{{ ), ] # }}} + br_tests = [ # {{{ + ( + {'title':'Guerra dos Tronos'}, + [title_test('A Guerra dos Tronos - As Crônicas de Gelo e Fogo', + exact=True), authors_test(['George R. R. Martin']) + ] + + ), + ] # }}} + def do_test(domain, start=0, stop=None): tests = globals().get(domain+'_tests') if stop is None: @@ -988,7 +1020,7 @@ if __name__ == '__main__': # tests {{{ do_test('com') - #do_test('de') + # do_test('de') # }}} diff --git a/src/calibre/ebooks/metadata/sources/identify.py b/src/calibre/ebooks/metadata/sources/identify.py index 16aa39d59d..4a214d4e66 100644 --- a/src/calibre/ebooks/metadata/sources/identify.py +++ b/src/calibre/ebooks/metadata/sources/identify.py @@ -483,8 +483,8 @@ def identify(log, abort, # {{{ log('The identify phase took %.2f seconds'%(time.time() - start_time)) log('The longest time (%f) was taken by:'%longest, lp) - log('Merging results from different sources and finding earliest', - 'publication dates from the xisbn service') + log('Merging results from different sources and finding earliest ', + 'publication dates from the worldcat.org service') start_time = time.time() results = merge_identify_results(results, log) diff --git a/src/calibre/ebooks/mobi/reader/headers.py b/src/calibre/ebooks/mobi/reader/headers.py index ac7e076787..5a3de7e705 100644 --- a/src/calibre/ebooks/mobi/reader/headers.py +++ b/src/calibre/ebooks/mobi/reader/headers.py @@ -126,6 +126,7 @@ class EXTHHeader(object): # {{{ elif idx == 113: # ASIN or other id try: self.uuid = content.decode('ascii') + self.mi.set_identifier('mobi-asin', self.uuid) except: self.uuid = None elif idx == 116: diff --git a/src/calibre/ebooks/mobi/reader/markup.py b/src/calibre/ebooks/mobi/reader/markup.py index 9940af4fa4..3330c65a0a 100644 --- a/src/calibre/ebooks/mobi/reader/markup.py +++ b/src/calibre/ebooks/mobi/reader/markup.py @@ -74,11 +74,12 @@ def remove_kindlegen_markup(parts): part = "".join(srcpieces) parts[i] = part - # we can safely remove all of the Kindlegen generated data-AmznPageBreak tags + # we can safely remove all of the Kindlegen generated data-AmznPageBreak + # attributes find_tag_with_AmznPageBreak_pattern = re.compile( r'''(<[^>]*\sdata-AmznPageBreak=[^>]*>)''', re.IGNORECASE) within_tag_AmznPageBreak_position_pattern = re.compile( - r'''\sdata-AmznPageBreak=['"][^'"]*['"]''') + r'''\sdata-AmznPageBreak=['"]([^'"]*)['"]''') for i in xrange(len(parts)): part = parts[i] @@ -86,10 +87,8 @@ def remove_kindlegen_markup(parts): for j in range(len(srcpieces)): tag = srcpieces[j] if tag.startswith('<'): - for m in within_tag_AmznPageBreak_position_pattern.finditer(tag): - replacement = '' - tag = within_tag_AmznPageBreak_position_pattern.sub(replacement, tag, 1) - srcpieces[j] = tag + srcpieces[j] = within_tag_AmznPageBreak_position_pattern.sub( + lambda m:' style="page-break-after:%s"'%m.group(1), tag) part = "".join(srcpieces) parts[i] = part diff --git a/src/calibre/ebooks/mobi/reader/mobi8.py b/src/calibre/ebooks/mobi/reader/mobi8.py index cdbea325fa..b6fe7d9aa0 100644 --- a/src/calibre/ebooks/mobi/reader/mobi8.py +++ b/src/calibre/ebooks/mobi/reader/mobi8.py @@ -44,6 +44,18 @@ def locate_beg_end_of_tag(ml, aid): return plt, pgt return 0, 0 +def reverse_tag_iter(block): + ''' Iterate over all tags in block in reverse order, i.e. last tag + to first tag. ''' + end = len(block) + while True: + pgt = block.rfind(b'>', 0, end) + if pgt == -1: break + plt = block.rfind(b'<', 0, pgt) + if plt == -1: break + yield block[plt:pgt+1] + end = plt + class Mobi8Reader(object): def __init__(self, mobi6_reader, log): @@ -275,13 +287,12 @@ class Mobi8Reader(object): return '%s/%s'%(fi.type, fi.filename), idtext def get_id_tag(self, pos): - # find the correct tag by actually searching in the destination - # textblock at position + # Find the first tag with a named anchor (name or id attribute) before + # pos fi = self.get_file_info(pos) if fi.num is None and fi.start is None: raise ValueError('No file contains pos: %d'%pos) textblock = self.parts[fi.num] - id_map = [] npos = pos - fi.start pgt = textblock.find(b'>', npos) plt = textblock.find(b'<', npos) @@ -290,28 +301,15 @@ class Mobi8Reader(object): if plt == npos or pgt < plt: npos = pgt + 1 textblock = textblock[0:npos] - # find id links only inside of tags - # inside any < > pair find all "id=' and return whatever is inside - # the quotes - id_pattern = re.compile(br'''<[^>]*\sid\s*=\s*['"]([^'"]*)['"][^>]*>''', - re.IGNORECASE) - for m in re.finditer(id_pattern, textblock): - id_map.append((m.start(), m.group(1))) + id_re = re.compile(br'''<[^>]+\sid\s*=\s*['"]([^'"]+)['"]''') + name_re = re.compile(br'''<\s*a\s*\sname\s*=\s*['"]([^'"]+)['"]''') + for tag in reverse_tag_iter(textblock): + m = id_re.match(tag) or name_re.match(tag) + if m is not None: + return m.group(1) - if not id_map: - # Found no id in the textblock, link must be to top of file - return b'' - # if npos is before first id= inside a tag, return the first - if npos < id_map[0][0]: - return id_map[0][1] - # if npos is after the last id= inside a tag, return the last - if npos > id_map[-1][0]: - return id_map[-1][1] - # otherwise find last id before npos - for i, item in enumerate(id_map): - if npos < item[0]: - return id_map[i-1][1] - return id_map[0][1] + # No tag found, link to start of file + return b'' def create_guide(self): guide = Guide() diff --git a/src/calibre/ebooks/oeb/display/indexing.coffee b/src/calibre/ebooks/oeb/display/indexing.coffee index 48f0697506..cd4a5a83e5 100644 --- a/src/calibre/ebooks/oeb/display/indexing.coffee +++ b/src/calibre/ebooks/oeb/display/indexing.coffee @@ -92,6 +92,31 @@ class BookIndexing this.last_check = [body.scrollWidth, body.scrollHeight] return ans + all_links_and_anchors: () -> + body = document.body + links = [] + anchors = {} + for a in document.querySelectorAll("body a[href], body [id], body a[name]") + if window.paged_display?.in_paged_mode + geom = window.paged_display.column_location(a) + else + br = a.getBoundingClientRect() + [left, top] = viewport_to_document(br.left, br.top, a.ownerDocument) + geom = {'left':left, 'top':top, 'width':br.right-br.left, 'height':br.bottom-br.top} + + href = a.getAttribute('href') + if href + links.push([href, geom]) + id = a.getAttribute("id") + if id and id not in anchors + anchors[id] = geom + if a.tagName in ['A', "a"] + name = a.getAttribute("name") + if name and name not in anchors + anchors[name] = geom + + return {'links':links, 'anchors':anchors} + if window? window.book_indexing = new BookIndexing() diff --git a/src/calibre/ebooks/oeb/display/paged.coffee b/src/calibre/ebooks/oeb/display/paged.coffee index c5f2dbc97a..aea51b5b23 100644 --- a/src/calibre/ebooks/oeb/display/paged.coffee +++ b/src/calibre/ebooks/oeb/display/paged.coffee @@ -242,6 +242,18 @@ class PagedDisplay # Return the number of the column that contains xpos return Math.floor(xpos/this.page_width) + column_location: (elem) -> + # Return the location of elem relative to its containing column + br = elem.getBoundingClientRect() + [left, top] = calibre_utils.viewport_to_document(br.left, br.top, elem.ownerDocument) + c = this.column_at(left) + width = Math.min(br.right, (c+1)*this.page_width) - br.left + if br.bottom < br.top + br.bottom = window.innerHeight + height = Math.min(br.bottom, window.innerHeight) - br.top + left -= c*this.page_width + return {'column':c, 'left':left, 'top':top, 'width':width, 'height':height} + column_boundaries: () -> # Return the column numbers at the left edge and after the right edge # of the viewport diff --git a/src/calibre/ebooks/oeb/reader.py b/src/calibre/ebooks/oeb/reader.py index 8124d49c6a..0461491d2f 100644 --- a/src/calibre/ebooks/oeb/reader.py +++ b/src/calibre/ebooks/oeb/reader.py @@ -320,13 +320,11 @@ class OEBReader(object): self.logger.warn(u'Spine item %r not found' % idref) continue item = manifest.ids[idref] - spine.add(item, elem.get('linear')) - for item in spine: - if item.media_type.lower() not in OEB_DOCS: - if not hasattr(item.data, 'xpath'): - self.oeb.log.warn('The item %s is not a XML document.' - ' Removing it from spine.'%item.href) - spine.remove(item) + if item.media_type.lower() in OEB_DOCS and hasattr(item.data, 'xpath'): + spine.add(item, elem.get('linear')) + else: + self.oeb.log.warn('The item %s is not a XML document.' + ' Removing it from spine.'%item.href) if len(spine) == 0: raise OEBError("Spine is empty") self._spine_add_extra() diff --git a/src/calibre/ebooks/oeb/transforms/flatcss.py b/src/calibre/ebooks/oeb/transforms/flatcss.py index 28ab4a362c..12fbd3b7f1 100644 --- a/src/calibre/ebooks/oeb/transforms/flatcss.py +++ b/src/calibre/ebooks/oeb/transforms/flatcss.py @@ -356,7 +356,7 @@ class CSSFlattener(object): if 'bgcolor' in node.attrib: try: cssdict['background-color'] = Property('background-color', node.attrib['bgcolor']).value - except ValueError: + except (ValueError, SyntaxErr): pass del node.attrib['bgcolor'] if cssdict.get('font-weight', '').lower() == 'medium': diff --git a/src/calibre/ebooks/oeb/transforms/structure.py b/src/calibre/ebooks/oeb/transforms/structure.py index 3af4d87a13..cd376b4ec4 100644 --- a/src/calibre/ebooks/oeb/transforms/structure.py +++ b/src/calibre/ebooks/oeb/transforms/structure.py @@ -114,7 +114,9 @@ class DetectStructure(object): def find_matches(expr, doc): try: - return XPath(expr)(doc) + ans = XPath(expr)(doc) + len(ans) + return ans except: self.log.warn('Invalid chapter expression, ignoring: %s'%expr) return [] @@ -203,7 +205,9 @@ class DetectStructure(object): def find_matches(expr, doc): try: - return XPath(expr)(doc) + ans = XPath(expr)(doc) + len(ans) + return ans except: self.log.warn('Invalid ToC expression, ignoring: %s'%expr) return [] diff --git a/src/calibre/ebooks/pdf/render/__init__.py b/src/calibre/ebooks/pdf/render/__init__.py new file mode 100644 index 0000000000..743a9d0561 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/__init__.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + + + diff --git a/src/calibre/ebooks/pdf/render/common.py b/src/calibre/ebooks/pdf/render/common.py new file mode 100644 index 0000000000..5be06b1b98 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/common.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import codecs, zlib +from io import BytesIO +from struct import pack +from decimal import Decimal + +EOL = b'\n' + +# Sizes {{{ +inch = 72.0 +cm = inch / 2.54 +mm = cm * 0.1 +pica = 12.0 +didot = 0.375 * mm +cicero = 12 * didot + +_W, _H = (21*cm, 29.7*cm) + +A6 = (_W*.5, _H*.5) +A5 = (_H*.5, _W) +A4 = (_W, _H) +A3 = (_H, _W*2) +A2 = (_W*2, _H*2) +A1 = (_H*2, _W*4) +A0 = (_W*4, _H*4) + +LETTER = (8.5*inch, 11*inch) +LEGAL = (8.5*inch, 14*inch) +ELEVENSEVENTEEN = (11*inch, 17*inch) + +_BW, _BH = (25*cm, 35.3*cm) +B6 = (_BW*.5, _BH*.5) +B5 = (_BH*.5, _BW) +B4 = (_BW, _BH) +B3 = (_BH*2, _BW) +B2 = (_BW*2, _BH*2) +B1 = (_BH*4, _BW*2) +B0 = (_BW*4, _BH*4) + +PAPER_SIZES = {k:globals()[k.upper()] for k in ('a0 a1 a2 a3 a4 a5 a6 b0 b1 b2' + ' b3 b4 b5 b6 letter legal').split()} + +# }}} + +# Basic PDF datatypes {{{ + +def format_float(f): + if abs(f) < 1e-7: + return '0' + places = 6 + a, b = type(u'')(Decimal(f).quantize(Decimal(10)**-places)).partition('.')[0::2] + b = b.rstrip('0') + if not b: + return '0' if a == '-0' else a + return '%s.%s'%(a, b) + +def fmtnum(o): + if isinstance(o, (int, long)): + return type(u'')(o) + return format_float(o) + +def serialize(o, stream): + if hasattr(o, 'pdf_serialize'): + o.pdf_serialize(stream) + elif isinstance(o, bool): + stream.write(b'true' if o else b'false') + elif isinstance(o, (int, long)): + stream.write(type(u'')(o).encode('ascii')) + elif isinstance(o, float): + stream.write(format_float(o).encode('ascii')) + elif o is None: + stream.write(b'null') + else: + raise ValueError('Unknown object: %r'%o) + +class Name(unicode): + + def pdf_serialize(self, stream): + raw = self.encode('ascii') + if len(raw) > 126: + raise ValueError('Name too long: %r'%self) + buf = [x if 33 < ord(x) < 126 and x != b'#' else b'#'+hex(ord(x)) for x + in raw] + stream.write(b'/'+b''.join(buf)) + +class String(unicode): + + def pdf_serialize(self, stream): + s = self.replace('\\', '\\\\').replace('(', r'\(').replace(')', r'\)') + try: + raw = s.encode('latin1') + if raw.startswith(codecs.BOM_UTF16_BE): + raise UnicodeEncodeError('') + except UnicodeEncodeError: + raw = codecs.BOM_UTF16_BE + s.encode('utf-16-be') + stream.write(b'('+raw+b')') + +class GlyphIndex(int): + + def pdf_serialize(self, stream): + byts = bytearray(pack(b'>H', self)) + stream.write('<%s>'%''.join(map( + lambda x: bytes(hex(x)[2:]).rjust(2, b'0'), byts))) + +class Dictionary(dict): + + def pdf_serialize(self, stream): + stream.write(b'<<' + EOL) + sorted_keys = sorted(self.iterkeys(), + key=lambda x:({'Type':'1', 'Subtype':'2'}.get( + x, x)+x)) + for k in sorted_keys: + serialize(Name(k), stream) + stream.write(b' ') + serialize(self[k], stream) + stream.write(EOL) + stream.write(b'>>' + EOL) + +class InlineDictionary(Dictionary): + + def pdf_serialize(self, stream): + stream.write(b'<< ') + for k, v in self.iteritems(): + serialize(Name(k), stream) + stream.write(b' ') + serialize(v, stream) + stream.write(b' ') + stream.write(b'>>') + +class Array(list): + + def pdf_serialize(self, stream): + stream.write(b'[') + for i, o in enumerate(self): + if i != 0: + stream.write(b' ') + serialize(o, stream) + stream.write(b']') + +class Stream(BytesIO): + + def __init__(self, compress=False): + BytesIO.__init__(self) + self.compress = compress + self.filters = Array() + + def add_extra_keys(self, d): + pass + + def pdf_serialize(self, stream): + raw = self.getvalue() + dl = len(raw) + filters = self.filters + if self.compress: + filters.append(Name('FlateDecode')) + raw = zlib.compress(raw) + + d = InlineDictionary({'Length':len(raw), 'DL':dl}) + self.add_extra_keys(d) + if filters: + d['Filter'] = filters + serialize(d, stream) + stream.write(EOL+b'stream'+EOL) + stream.write(raw) + stream.write(EOL+b'endstream'+EOL) + + def write_line(self, raw=b''): + self.write(raw if isinstance(raw, bytes) else raw.encode('ascii')) + self.write(EOL) + + def write(self, raw): + super(Stream, self).write(raw if isinstance(raw, bytes) else + raw.encode('ascii')) + +class Reference(object): + + def __init__(self, num, obj): + self.num, self.obj = num, obj + + def pdf_serialize(self, stream): + raw = '%d 0 R'%self.num + stream.write(raw.encode('ascii')) + + def __repr__(self): + return '%d 0 R'%self.num + + def __str__(self): + return repr(self) +# }}} + diff --git a/src/calibre/ebooks/pdf/render/engine.py b/src/calibre/ebooks/pdf/render/engine.py new file mode 100644 index 0000000000..aa1fa17cc3 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/engine.py @@ -0,0 +1,465 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import sys, traceback +from collections import namedtuple +from functools import wraps, partial +from future_builtins import map + +import sip +from PyQt4.Qt import (QPaintEngine, QPaintDevice, Qt, QApplication, QPainter, + QTransform, QImage, QByteArray, QBuffer, + qRgba) + +from calibre.constants import plugins +from calibre.ebooks.pdf.render.serialize import (PDFStream, Path) +from calibre.ebooks.pdf.render.common import inch, A4, fmtnum +from calibre.ebooks.pdf.render.graphics import convert_path, Graphics +from calibre.utils.fonts.sfnt.container import Sfnt +from calibre.utils.fonts.sfnt.metrics import FontMetrics + +Point = namedtuple('Point', 'x y') +ColorState = namedtuple('ColorState', 'color opacity do') + +def repr_transform(t): + vals = map(fmtnum, (t.m11(), t.m12(), t.m21(), t.m22(), t.dx(), t.dy())) + return '[%s]'%' '.join(vals) + +def store_error(func): + + @wraps(func) + def errh(self, *args, **kwargs): + try: + func(self, *args, **kwargs) + except: + self.errors_occurred = True + self.errors(traceback.format_exc()) + + return errh + +class Font(FontMetrics): + + def __init__(self, sfnt): + FontMetrics.__init__(self, sfnt) + self.glyph_map = {} + +class PdfEngine(QPaintEngine): + + def __init__(self, file_object, page_width, page_height, left_margin, + top_margin, right_margin, bottom_margin, width, height, + errors=print, debug=print, compress=True, + mark_links=False): + QPaintEngine.__init__(self, self.features) + self.file_object = file_object + self.compress, self.mark_links = compress, mark_links + self.page_height, self.page_width = page_height, page_width + self.left_margin, self.top_margin = left_margin, top_margin + self.right_margin, self.bottom_margin = right_margin, bottom_margin + self.pixel_width, self.pixel_height = width, height + # Setup a co-ordinate transform that allows us to use co-ords + # from Qt's pixel based co-ordinate system with its origin at the top + # left corner. PDF's co-ordinate system is based on pts and has its + # origin in the bottom left corner. We also have to implement the page + # margins. Therefore, we need to translate, scale and reflect about the + # x-axis. + dy = self.page_height - self.top_margin + dx = self.left_margin + sx = (self.page_width - self.left_margin - + self.right_margin) / self.pixel_width + sy = (self.page_height - self.top_margin - + self.bottom_margin) / self.pixel_height + + self.pdf_system = QTransform(sx, 0, 0, -sy, dx, dy) + self.graphics = Graphics() + self.errors_occurred = False + self.errors, self.debug = errors, debug + self.fonts = {} + i = QImage(1, 1, QImage.Format_ARGB32) + i.fill(qRgba(0, 0, 0, 255)) + self.alpha_bit = i.constBits().asstring(4).find(b'\xff') + self.current_page_num = 1 + self.current_page_inited = False + self.qt_hack, err = plugins['qt_hack'] + if err: + raise RuntimeError('Failed to load qt_hack with err: %s'%err) + + def apply_graphics_state(self): + self.graphics(self.pdf, self.pdf_system, self.painter()) + + @property + def do_fill(self): + return self.graphics.current_state.do_fill + + @property + def do_stroke(self): + return self.graphics.current_state.do_stroke + + def init_page(self): + self.pdf.transform(self.pdf_system) + self.pdf.set_rgb_colorspace() + self.graphics.reset() + self.pdf.save_stack() + self.current_page_inited = True + + @property + def features(self): + # gradient_flags = self.MaskedBrush | self.PatternBrush | self.PatternTransform + return (self.Antialiasing | self.AlphaBlend | self.ConstantOpacity | + self.PainterPaths | self.PaintOutsidePaintEvent | + self.PrimitiveTransform | self.PixmapTransform) #| gradient_flags + + def begin(self, device): + if not hasattr(self, 'pdf'): + try: + self.pdf = PDFStream(self.file_object, (self.page_width, + self.page_height), compress=self.compress, + mark_links=self.mark_links, + debug=self.debug) + except: + self.errors(traceback.format_exc()) + self.errors_occurred = True + return False + return True + + def end_page(self): + if self.current_page_inited: + self.pdf.restore_stack() + self.pdf.end_page() + self.current_page_inited = False + self.current_page_num += 1 + + def end(self): + try: + self.end_page() + self.pdf.end() + except: + self.errors(traceback.format_exc()) + self.errors_occurred = True + return False + finally: + self.pdf = self.file_object = None + return True + + def type(self): + return QPaintEngine.Pdf + + # TODO: Tiled pixmap + + @store_error + def drawPixmap(self, rect, pixmap, source_rect): + self.apply_graphics_state() + source_rect = source_rect.toRect() + pixmap = (pixmap if source_rect == pixmap.rect() else + pixmap.copy(source_rect)) + image = pixmap.toImage() + ref = self.add_image(image, pixmap.cacheKey()) + if ref is not None: + self.pdf.draw_image(rect.x(), rect.height()+rect.y(), rect.width(), + -rect.height(), ref) + + @store_error + def drawImage(self, rect, image, source_rect, flags=Qt.AutoColor): + self.apply_graphics_state() + source_rect = source_rect.toRect() + image = (image if source_rect == image.rect() else + image.copy(source_rect)) + ref = self.add_image(image, image.cacheKey()) + if ref is not None: + self.pdf.draw_image(rect.x(), rect.height()+rect.y(), rect.width(), + -rect.height(), ref) + + def add_image(self, img, cache_key): + if img.isNull(): return + ref = self.pdf.get_image(cache_key) + if ref is not None: + return ref + + fmt = img.format() + image = QImage(img) + if (image.depth() == 1 and img.colorTable().size() == 2 and + img.colorTable().at(0) == QColor(Qt.black).rgba() and + img.colorTable().at(1) == QColor(Qt.white).rgba()): + if fmt == QImage.Format_MonoLSB: + image = image.convertToFormat(QImage.Format_Mono) + fmt = QImage.Format_Mono + else: + if (fmt != QImage.Format_RGB32 and fmt != QImage.Format_ARGB32): + image = image.convertToFormat(QImage.Format_ARGB32) + fmt = QImage.Format_ARGB32 + + w = image.width() + h = image.height() + d = image.depth() + + if fmt == QImage.Format_Mono: + bytes_per_line = (w + 7) >> 3 + data = image.constBits().asstring(bytes_per_line * h) + return self.pdf.write_image(data, w, h, d, cache_key=cache_key) + + ba = QByteArray() + buf = QBuffer(ba) + image.save(buf, 'jpeg', 94) + data = bytes(ba.data()) + has_alpha = has_mask = False + soft_mask = mask = None + + if fmt == QImage.Format_ARGB32: + tmask = image.constBits().asstring(4*w*h)[self.alpha_bit::4] + sdata = bytearray(tmask) + vals = set(sdata) + vals.discard(255) + has_mask = bool(vals) + vals.discard(0) + has_alpha = bool(vals) + + if has_alpha: + soft_mask = self.pdf.write_image(tmask, w, h, 8) + elif has_mask: + # dither the soft mask to 1bit and add it. This also helps PDF + # viewers without transparency support + bytes_per_line = (w + 7) >> 3 + mdata = bytearray(0 for i in xrange(bytes_per_line * h)) + spos = mpos = 0 + for y in xrange(h): + for x in xrange(w): + if sdata[spos]: + mdata[mpos + x>>3] |= (0x80 >> (x&7)) + spos += 1 + mpos += bytes_per_line + mdata = bytes(mdata) + mask = self.pdf.write_image(mdata, w, h, 1) + + return self.pdf.write_image(data, w, h, 32, mask=mask, dct=True, + soft_mask=soft_mask, cache_key=cache_key) + + @store_error + def updateState(self, state): + self.graphics.update_state(state, self.painter()) + + @store_error + def drawPath(self, path): + self.apply_graphics_state() + p = convert_path(path) + fill_rule = {Qt.OddEvenFill:'evenodd', + Qt.WindingFill:'winding'}[path.fillRule()] + self.pdf.draw_path(p, stroke=self.do_stroke, + fill=self.do_fill, fill_rule=fill_rule) + + @store_error + def drawPoints(self, points): + self.apply_graphics_state() + p = Path() + for point in points: + p.move_to(point.x(), point.y()) + p.line_to(point.x(), point.y() + 0.001) + self.pdf.draw_path(p, stroke=self.do_stroke, fill=False) + + @store_error + def drawRects(self, rects): + self.apply_graphics_state() + for rect in rects: + bl = rect.topLeft() + self.pdf.draw_rect(bl.x(), bl.y(), rect.width(), rect.height(), + stroke=self.do_stroke, fill=self.do_fill) + + def create_sfnt(self, text_item): + get_table = partial(self.qt_hack.get_sfnt_table, text_item) + ans = Font(Sfnt(get_table)) + glyph_map = self.qt_hack.get_glyph_map(text_item) + gm = {} + for uc, glyph_id in enumerate(glyph_map): + if glyph_id not in gm: + gm[glyph_id] = unichr(uc) + ans.full_glyph_map = gm + return ans + + @store_error + def drawTextItem(self, point, text_item): + # super(PdfEngine, self).drawTextItem(point, text_item) + self.apply_graphics_state() + gi = self.qt_hack.get_glyphs(point, text_item) + if not gi.indices: + sip.delete(gi) + return + name = hash(bytes(gi.name)) + if name not in self.fonts: + self.fonts[name] = self.create_sfnt(text_item) + metrics = self.fonts[name] + for glyph_id in gi.indices: + try: + metrics.glyph_map[glyph_id] = metrics.full_glyph_map[glyph_id] + except (KeyError, ValueError): + pass + glyphs = [] + pdf_pos = point + first_baseline = None + for i, pos in enumerate(gi.positions): + if first_baseline is None: + first_baseline = pos.y() + glyph_pos = pos + delta = glyph_pos - pdf_pos + glyphs.append((delta.x(), pos.y()-first_baseline, gi.indices[i])) + pdf_pos = glyph_pos + + self.pdf.draw_glyph_run([1, 0, 0, -1, point.x(), + point.y()], gi.size, metrics, glyphs) + sip.delete(gi) + + @store_error + def drawPolygon(self, points, mode): + self.apply_graphics_state() + if not points: return + p = Path() + p.move_to(points[0].x(), points[0].y()) + for point in points[1:]: + p.line_to(point.x(), point.y()) + p.close() + fill_rule = {self.OddEvenMode:'evenodd', + self.WindingMode:'winding'}.get(mode, 'evenodd') + self.pdf.draw_path(p, stroke=True, fill_rule=fill_rule, + fill=(mode in (self.OddEvenMode, self.WindingMode, self.ConvexMode))) + + def set_metadata(self, *args, **kwargs): + self.pdf.set_metadata(*args, **kwargs) + + def add_outline(self, toc): + self.pdf.links.add_outline(toc) + + def add_links(self, current_item, start_page, links, anchors): + for pos in anchors.itervalues(): + pos['left'], pos['top'] = self.pdf_system.map(pos['left'], pos['top']) + for link in links: + pos = link[1] + llx = pos['left'] + lly = pos['top'] + pos['height'] + urx = pos['left'] + pos['width'] + ury = pos['top'] + llx, lly = self.pdf_system.map(llx, lly) + urx, ury = self.pdf_system.map(urx, ury) + link[1] = pos['column'] + start_page + link.append((llx, lly, urx, ury)) + self.pdf.links.add(current_item, start_page, links, anchors) + +class PdfDevice(QPaintDevice): # {{{ + + + def __init__(self, file_object, page_size=A4, left_margin=inch, + top_margin=inch, right_margin=inch, bottom_margin=inch, + xdpi=1200, ydpi=1200, errors=print, debug=print, + compress=True, mark_links=False): + QPaintDevice.__init__(self) + self.xdpi, self.ydpi = xdpi, ydpi + self.page_width, self.page_height = page_size + self.body_width = self.page_width - left_margin - right_margin + self.body_height = self.page_height - top_margin - bottom_margin + self.engine = PdfEngine(file_object, self.page_width, self.page_height, + left_margin, top_margin, right_margin, + bottom_margin, self.width(), self.height(), + errors=errors, debug=debug, compress=compress, + mark_links=mark_links) + self.add_outline = self.engine.add_outline + self.add_links = self.engine.add_links + + def paintEngine(self): + return self.engine + + def metric(self, m): + if m in (self.PdmDpiX, self.PdmPhysicalDpiX): + return self.xdpi + if m in (self.PdmDpiY, self.PdmPhysicalDpiY): + return self.ydpi + if m == self.PdmDepth: + return 32 + if m == self.PdmNumColors: + return sys.maxint + if m == self.PdmWidthMM: + return int(round(self.body_width * 0.35277777777778)) + if m == self.PdmHeightMM: + return int(round(self.body_height * 0.35277777777778)) + if m == self.PdmWidth: + return int(round(self.body_width * self.xdpi / 72.0)) + if m == self.PdmHeight: + return int(round(self.body_height * self.ydpi / 72.0)) + return 0 + + def end_page(self): + self.engine.end_page() + + def init_page(self): + self.engine.init_page() + + @property + def current_page_num(self): + return self.engine.current_page_num + + @property + def errors_occurred(self): + return self.engine.errors_occurred + + def to_px(self, pt, vertical=True): + return pt * (self.height()/self.page_height if vertical else + self.width()/self.page_width) + + def set_metadata(self, *args, **kwargs): + self.engine.set_metadata(*args, **kwargs) + +# }}} + +if __name__ == '__main__': + from PyQt4.Qt import (QBrush, QColor, QPoint, QPixmap, QPainterPath) + QBrush, QColor, QPoint, QPixmap, QPainterPath + app = QApplication([]) + p = QPainter() + with open('/t/painter.pdf', 'wb') as f: + dev = PdfDevice(f, compress=False) + p.begin(dev) + dev.init_page() + xmax, ymax = p.viewport().width(), p.viewport().height() + b = p.brush() + try: + p.drawRect(0, 0, xmax, ymax) + # p.drawPolyline(QPoint(0, 0), QPoint(xmax, 0), QPoint(xmax, ymax), + # QPoint(0, ymax), QPoint(0, 0)) + # pp = QPainterPath() + # pp.addRect(0, 0, xmax, ymax) + # p.drawPath(pp) + p.save() + for i in xrange(3): + col = [0, 0, 0, 200] + col[i] = 255 + p.setOpacity(0.3) + p.fillRect(0, 0, xmax/10, xmax/10, QBrush(QColor(*col))) + p.setOpacity(1) + p.drawRect(0, 0, xmax/10, xmax/10) + p.translate(xmax/10, xmax/10) + p.scale(1, 1.5) + p.restore() + + # p.scale(2, 2) + # p.rotate(45) + p.drawPixmap(0, 0, 2048, 2048, QPixmap(I('library.png'))) + p.drawRect(0, 0, 2048, 2048) + + f = p.font() + f.setPointSize(20) + # f.setLetterSpacing(f.PercentageSpacing, 200) + # f.setUnderline(True) + # f.setOverline(True) + # f.setStrikeOut(True) + f.setFamily('Calibri') + p.setFont(f) + # p.setPen(QColor(0, 0, 255)) + # p.scale(2, 2) + # p.rotate(45) + p.drawText(QPoint(300, 300), 'Some—text not By’s ū --- Д AV ff ff') + finally: + p.end() + if dev.engine.errors_occurred: + raise SystemExit(1) + diff --git a/src/calibre/ebooks/pdf/render/fonts.py b/src/calibre/ebooks/pdf/render/fonts.py new file mode 100644 index 0000000000..e99cc7c218 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/fonts.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import re +from itertools import izip, groupby +from operator import itemgetter +from collections import Counter, OrderedDict +from future_builtins import map + +from calibre.ebooks.pdf.render.common import (Array, String, Stream, + Dictionary, Name) +from calibre.utils.fonts.sfnt.subset import pdf_subset + +STANDARD_FONTS = { + 'Times-Roman', 'Helvetica', 'Courier', 'Symbol', 'Times-Bold', + 'Helvetica-Bold', 'Courier-Bold', 'ZapfDingbats', 'Times-Italic', + 'Helvetica-Oblique', 'Courier-Oblique', 'Times-BoldItalic', + 'Helvetica-BoldOblique', 'Courier-BoldOblique', } + +''' +Notes +======= + +We must use Type 0 CID keyed fonts to represent unicode text. + +For TrueType +-------------- + +The mapping from the text strings to glyph ids is defined by two things: + + The /Encoding key of the Type-0 font dictionary + The /CIDToGIDMap key of the descendant font dictionary (for TrueType fonts) + +We set /Encoding to /Identity-H and /CIDToGIDMap to /Identity. This means that +text strings are interpreted as a sequence of two-byte numbers, high order byte +first. Each number gets mapped to a glyph id equal to itself by the +/CIDToGIDMap. + +''' + +import textwrap + +class FontStream(Stream): + + def __init__(self, is_otf, compress=False): + Stream.__init__(self, compress=compress) + self.is_otf = is_otf + + def add_extra_keys(self, d): + d['Length1'] = d['DL'] + if self.is_otf: + d['Subtype'] = Name('CIDFontType0C') + +def to_hex_string(c): + return bytes(hex(int(c))[2:]).rjust(4, b'0').decode('ascii') + +class CMap(Stream): + + skeleton = textwrap.dedent('''\ + /CIDInit /ProcSet findresource begin + 12 dict begin + begincmap + /CMapName {name}-cmap def + /CMapType 2 def + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (UCS) + /Supplement 0 + >> def + 1 begincodespacerange + <0000> + endcodespacerange + {mapping} + endcmap + CMapName currentdict /CMap defineresource pop + end + end + ''') + + + def __init__(self, name, glyph_map, compress=False): + Stream.__init__(self, compress) + current_map = OrderedDict() + maps = [] + for glyph_id in sorted(glyph_map): + if len(current_map) > 99: + maps.append(current_map) + current_map = OrderedDict() + val = [] + for c in glyph_map[glyph_id]: + c = ord(c) + val.append(to_hex_string(c)) + glyph_id = '<%s>'%to_hex_string(glyph_id) + current_map[glyph_id] = '<%s>'%''.join(val) + if current_map: + maps.append(current_map) + mapping = [] + for m in maps: + meat = '\n'.join('%s %s'%(k, v) for k, v in m.iteritems()) + mapping.append('%d beginbfchar\n%s\nendbfchar'%(len(m), meat)) + self.write(self.skeleton.format(name=name, mapping='\n'.join(mapping))) + +class Font(object): + + def __init__(self, metrics, num, objects, compress): + self.metrics, self.compress = metrics, compress + self.is_otf = self.metrics.is_otf + self.subset_tag = bytes(re.sub('.', lambda m: chr(int(m.group())+ord('A')), + oct(num))).rjust(6, b'A').decode('ascii') + self.font_stream = FontStream(metrics.is_otf, compress=compress) + self.font_descriptor = Dictionary({ + 'Type': Name('FontDescriptor'), + 'FontName': Name('%s+%s'%(self.subset_tag, metrics.postscript_name)), + 'Flags': 0b100, # Symbolic font + 'FontBBox': Array(metrics.pdf_bbox), + 'ItalicAngle': metrics.post.italic_angle, + 'Ascent': metrics.pdf_ascent, + 'Descent': metrics.pdf_descent, + 'CapHeight': metrics.pdf_capheight, + 'AvgWidth': metrics.pdf_avg_width, + 'StemV': metrics.pdf_stemv, + }) + self.descendant_font = Dictionary({ + 'Type':Name('Font'), + 'Subtype':Name('CIDFontType' + ('0' if metrics.is_otf else '2')), + 'BaseFont': self.font_descriptor['FontName'], + 'FontDescriptor':objects.add(self.font_descriptor), + 'CIDSystemInfo':Dictionary({ + 'Registry':String('Adobe'), + 'Ordering':String('Identity'), + 'Supplement':0, + }), + }) + if not self.is_otf: + self.descendant_font['CIDToGIDMap'] = Name('Identity') + + self.font_dict = Dictionary({ + 'Type':Name('Font'), + 'Subtype':Name('Type0'), + 'Encoding':Name('Identity-H'), + 'BaseFont':self.descendant_font['BaseFont'], + 'DescendantFonts':Array([objects.add(self.descendant_font)]), + }) + + self.used_glyphs = set() + + def embed(self, objects): + self.font_descriptor['FontFile'+('3' if self.is_otf else '2') + ] = objects.add(self.font_stream) + self.write_widths(objects) + self.write_to_unicode(objects) + pdf_subset(self.metrics.sfnt, self.used_glyphs) + if self.is_otf: + self.font_stream.write(self.metrics.sfnt['CFF '].raw) + else: + self.metrics.os2.zero_fstype() + self.metrics.sfnt(self.font_stream) + + def write_to_unicode(self, objects): + cmap = CMap(self.metrics.postscript_name, self.metrics.glyph_map, + compress=self.compress) + self.font_dict['ToUnicode'] = objects.add(cmap) + + def write_widths(self, objects): + glyphs = sorted(self.used_glyphs|{0}) + widths = {g:self.metrics.pdf_scale(w) for g, w in izip(glyphs, + self.metrics.glyph_widths(glyphs))} + counter = Counter() + for g, w in widths.iteritems(): + counter[w] += 1 + most_common = counter.most_common(1)[0][0] + self.descendant_font['DW'] = most_common + widths = {g:w for g, w in widths.iteritems() if w != most_common} + + groups = Array() + for k, g in groupby(enumerate(widths.iterkeys()), lambda (i,x):i-x): + group = list(map(itemgetter(1), g)) + gwidths = [widths[g] for g in group] + if len(set(gwidths)) == 1 and len(group) > 1: + w = (min(group), max(group), gwidths[0]) + else: + w = (min(group), Array(gwidths)) + groups.extend(w) + self.descendant_font['W'] = objects.add(groups) + + +class FontManager(object): + + def __init__(self, objects, compress): + self.objects = objects + self.compress = compress + self.std_map = {} + self.font_map = {} + self.fonts = [] + + def add_font(self, font_metrics, glyph_ids): + if font_metrics not in self.font_map: + self.fonts.append(Font(font_metrics, len(self.fonts), + self.objects, self.compress)) + d = self.objects.add(self.fonts[-1].font_dict) + self.font_map[font_metrics] = (d, self.fonts[-1]) + + fontref, font = self.font_map[font_metrics] + font.used_glyphs |= glyph_ids + return fontref + + def add_standard_font(self, name): + if name not in STANDARD_FONTS: + raise ValueError('%s is not a standard font'%name) + if name not in self.std_map: + self.std_map[name] = self.objects.add(Dictionary({ + 'Type':Name('Font'), + 'Subtype':Name('Type1'), + 'BaseFont':Name(name) + })) + return self.std_map[name] + + def embed_fonts(self): + for font in self.fonts: + font.embed(self.objects) + diff --git a/src/calibre/ebooks/pdf/render/from_html.py b/src/calibre/ebooks/pdf/render/from_html.py new file mode 100644 index 0000000000..47aa295743 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/from_html.py @@ -0,0 +1,283 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import json, os +from future_builtins import map +from math import floor + +from PyQt4.Qt import (QObject, QPainter, Qt, QSize, QString, QTimer, + pyqtProperty, QEventLoop, QPixmap, QRect) +from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings + +from calibre import fit_image +from calibre.ebooks.oeb.display.webview import load_html +from calibre.ebooks.pdf.render.common import (inch, cm, mm, pica, cicero, + didot, PAPER_SIZES) +from calibre.ebooks.pdf.render.engine import PdfDevice + +def get_page_size(opts, for_comic=False): # {{{ + use_profile = not (opts.override_profile_size or + opts.output_profile.short_name == 'default' or + opts.output_profile.width > 9999) + if use_profile: + w = (opts.output_profile.comic_screen_size[0] if for_comic else + opts.output_profile.width) + h = (opts.output_profile.comic_screen_size[1] if for_comic else + opts.output_profile.height) + dpi = opts.output_profile.dpi + factor = 72.0 / dpi + page_size = (factor * w, factor * h) + else: + page_size = None + if opts.custom_size != None: + width, sep, height = opts.custom_size.partition('x') + if height: + try: + width = float(width) + height = float(height) + except: + pass + else: + if opts.unit == 'devicepixel': + factor = 72.0 / opts.output_profile.dpi + else: + {'point':1.0, 'inch':inch, 'cicero':cicero, + 'didot':didot, 'pica':pica, 'millimeter':mm, + 'centimeter':cm}[opts.unit] + page_size = (factor*width, factor*height) + if page_size is None: + page_size = PAPER_SIZES[opts.paper_size] + return page_size +# }}} + +class Page(QWebPage): # {{{ + + def __init__(self, opts, log): + self.log = log + QWebPage.__init__(self) + settings = self.settings() + settings.setFontSize(QWebSettings.DefaultFontSize, + opts.pdf_default_font_size) + settings.setFontSize(QWebSettings.DefaultFixedFontSize, + opts.pdf_mono_font_size) + settings.setFontSize(QWebSettings.MinimumLogicalFontSize, 8) + settings.setFontSize(QWebSettings.MinimumFontSize, 8) + + std = {'serif':opts.pdf_serif_family, 'sans':opts.pdf_sans_family, + 'mono':opts.pdf_mono_family}.get(opts.pdf_standard_font, + opts.pdf_serif_family) + if std: + settings.setFontFamily(QWebSettings.StandardFont, std) + if opts.pdf_serif_family: + settings.setFontFamily(QWebSettings.SerifFont, opts.pdf_serif_family) + if opts.pdf_sans_family: + settings.setFontFamily(QWebSettings.SansSerifFont, + opts.pdf_sans_family) + if opts.pdf_mono_family: + settings.setFontFamily(QWebSettings.FixedFont, opts.pdf_mono_family) + + def javaScriptConsoleMessage(self, msg, lineno, msgid): + self.log.debug(u'JS:', unicode(msg)) + + def javaScriptAlert(self, frame, msg): + self.log(unicode(msg)) +# }}} + +def draw_image_page(page_rect, painter, p, preserve_aspect_ratio=True): + if preserve_aspect_ratio: + aspect_ratio = float(p.width())/p.height() + nw, nh = page_rect.width(), page_rect.height() + if aspect_ratio > 1: + nh = int(page_rect.width()/aspect_ratio) + else: # Width is smaller than height + nw = page_rect.height()*aspect_ratio + __, nnw, nnh = fit_image(nw, nh, page_rect.width(), + page_rect.height()) + dx = int((page_rect.width() - nnw)/2.) + dy = int((page_rect.height() - nnh)/2.) + page_rect.moveTo(dx, dy) + page_rect.setHeight(nnh) + page_rect.setWidth(nnw) + painter.drawPixmap(page_rect, p, p.rect()) + +class PDFWriter(QObject): + + def _pass_json_value_getter(self): + val = json.dumps(self.bridge_value) + return QString(val) + + def _pass_json_value_setter(self, value): + self.bridge_value = json.loads(unicode(value)) + + _pass_json_value = pyqtProperty(QString, fget=_pass_json_value_getter, + fset=_pass_json_value_setter) + + def __init__(self, opts, log, cover_data=None, toc=None): + from calibre.gui2 import is_ok_to_use_qt + if not is_ok_to_use_qt(): + raise Exception('Not OK to use Qt') + QObject.__init__(self) + + self.logger = self.log = log + self.opts = opts + self.cover_data = cover_data + self.paged_js = None + self.toc = toc + + self.loop = QEventLoop() + self.view = QWebView() + self.page = Page(opts, self.log) + self.view.setPage(self.page) + self.view.setRenderHints(QPainter.Antialiasing| + QPainter.TextAntialiasing|QPainter.SmoothPixmapTransform) + self.view.loadFinished.connect(self.render_html, + type=Qt.QueuedConnection) + for x in (Qt.Horizontal, Qt.Vertical): + self.view.page().mainFrame().setScrollBarPolicy(x, + Qt.ScrollBarAlwaysOff) + self.report_progress = lambda x, y: x + + def dump(self, items, out_stream, pdf_metadata): + opts = self.opts + page_size = get_page_size(self.opts) + xdpi, ydpi = self.view.logicalDpiX(), self.view.logicalDpiY() + ml, mr = opts.margin_left, opts.margin_right + margin_side = min(ml, mr) + ml, mr = ml - margin_side, mr - margin_side + self.doc = PdfDevice(out_stream, page_size=page_size, left_margin=ml, + top_margin=0, right_margin=mr, bottom_margin=0, + xdpi=xdpi, ydpi=ydpi, errors=self.log.error, + debug=self.log.debug, compress=not + opts.uncompressed_pdf, + mark_links=opts.pdf_mark_links) + + self.page.setViewportSize(QSize(self.doc.width(), self.doc.height())) + self.render_queue = items + self.total_items = len(items) + + mt, mb = map(self.doc.to_px, (opts.margin_top, opts.margin_bottom)) + ms = self.doc.to_px(margin_side, vertical=False) + self.margin_top, self.margin_size, self.margin_bottom = map( + lambda x:int(floor(x)), (mt, ms, mb)) + + self.painter = QPainter(self.doc) + self.doc.set_metadata(title=pdf_metadata.title, + author=pdf_metadata.author, + tags=pdf_metadata.tags) + self.painter.save() + try: + if self.cover_data is not None: + p = QPixmap() + p.loadFromData(self.cover_data) + if not p.isNull(): + draw_image_page(QRect(0, 0, self.doc.width(), self.doc.height()), + self.painter, p, + preserve_aspect_ratio=self.opts.preserve_cover_aspect_ratio) + self.doc.end_page() + finally: + self.painter.restore() + + QTimer.singleShot(0, self.render_book) + self.loop.exec_() + + if self.toc is not None and len(self.toc) > 0: + self.doc.add_outline(self.toc) + + self.painter.end() + + if self.doc.errors_occurred: + raise Exception('PDF Output failed, see log for details') + + def render_book(self): + if self.doc.errors_occurred: + return self.loop.exit(1) + try: + if not self.render_queue: + self.loop.exit() + else: + self.render_next() + except: + self.logger.exception('Rendering failed') + self.loop.exit(1) + + def render_next(self): + item = unicode(self.render_queue.pop(0)) + + self.logger.debug('Processing %s...' % item) + self.current_item = item + load_html(item, self.view) + + def render_html(self, ok): + if ok: + try: + self.do_paged_render() + except: + self.log.exception('Rendering failed') + self.loop.exit(1) + else: + # The document is so corrupt that we can't render the page. + self.logger.error('Document cannot be rendered.') + self.loop.exit(1) + return + done = self.total_items - len(self.render_queue) + self.report_progress(done/self.total_items, + _('Rendered %s'%os.path.basename(self.current_item))) + self.render_book() + + @property + def current_page_num(self): + return self.doc.current_page_num + + def do_paged_render(self): + if self.paged_js is None: + from calibre.utils.resources import compiled_coffeescript + self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils') + self.paged_js += compiled_coffeescript('ebooks.oeb.display.indexing') + self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged') + + self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self) + evaljs = self.view.page().mainFrame().evaluateJavaScript + evaljs(self.paged_js) + evaljs(''' + py_bridge.__defineGetter__('value', function() { + return JSON.parse(this._pass_json_value); + }); + py_bridge.__defineSetter__('value', function(val) { + this._pass_json_value = JSON.stringify(val); + }); + + document.body.style.backgroundColor = "white"; + paged_display.set_geometry(1, %d, %d, %d); + paged_display.layout(); + paged_display.fit_images(); + py_bridge.value = book_indexing.all_links_and_anchors(); + '''%(self.margin_top, self.margin_size, self.margin_bottom)) + + amap = self.bridge_value + if not isinstance(amap, dict): + amap = {'links':[], 'anchors':{}} # Some javascript error occurred + start_page = self.current_page_num + + mf = self.view.page().mainFrame() + while True: + self.doc.init_page() + self.painter.save() + mf.render(self.painter) + self.painter.restore() + nsl = evaljs('paged_display.next_screen_location()').toInt() + self.doc.end_page() + if not nsl[1] or nsl[0] <= 0: + break + evaljs('window.scrollTo(%d, 0)'%nsl[0]) + if self.doc.errors_occurred: + break + + self.doc.add_links(self.current_item, start_page, amap['links'], + amap['anchors']) + diff --git a/src/calibre/ebooks/pdf/render/graphics.py b/src/calibre/ebooks/pdf/render/graphics.py new file mode 100644 index 0000000000..68efb2514a --- /dev/null +++ b/src/calibre/ebooks/pdf/render/graphics.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +from math import sqrt + +from PyQt4.Qt import (QBrush, QPen, Qt, QPointF, QTransform, QPainterPath, + QPaintEngine) + +from calibre.ebooks.pdf.render.common import Array +from calibre.ebooks.pdf.render.serialize import Path, Color + +def convert_path(path): + p = Path() + i = 0 + while i < path.elementCount(): + elem = path.elementAt(i) + em = (elem.x, elem.y) + i += 1 + if elem.isMoveTo(): + p.move_to(*em) + elif elem.isLineTo(): + p.line_to(*em) + elif elem.isCurveTo(): + added = False + if path.elementCount() > i+1: + c1, c2 = path.elementAt(i), path.elementAt(i+1) + if (c1.type == path.CurveToDataElement and c2.type == + path.CurveToDataElement): + i += 2 + p.curve_to(em[0], em[1], c1.x, c1.y, c2.x, c2.y) + added = True + if not added: + raise ValueError('Invalid curve to operation') + return p + + +class GraphicsState(object): + + FIELDS = ('fill', 'stroke', 'opacity', 'transform', 'brush_origin', + 'clip', 'do_fill', 'do_stroke') + + def __init__(self): + self.fill = QBrush() + self.stroke = QPen() + self.opacity = 1.0 + self.transform = QTransform() + self.brush_origin = QPointF() + self.clip = QPainterPath() + self.do_fill = False + self.do_stroke = True + + def __eq__(self, other): + for x in self.FIELDS: + if getattr(other, x) != getattr(self, x): + return False + return True + + def copy(self): + ans = GraphicsState() + ans.fill = QBrush(self.fill) + ans.stroke = QPen(self.stroke) + ans.opacity = self.opacity + ans.transform = self.transform * QTransform() + ans.brush_origin = QPointF(self.brush_origin) + ans.clip = self.clip + ans.do_fill, ans.do_stroke = self.do_fill, self.do_stroke + return ans + +class Graphics(object): + + def __init__(self): + self.base_state = GraphicsState() + self.current_state = GraphicsState() + self.pending_state = None + + def update_state(self, state, painter): + flags = state.state() + if self.pending_state is None: + self.pending_state = self.current_state.copy() + + s = self.pending_state + + if flags & QPaintEngine.DirtyTransform: + s.transform = state.transform() + + if flags & QPaintEngine.DirtyBrushOrigin: + s.brush_origin = state.brushOrigin() + + if flags & QPaintEngine.DirtyBrush: + s.fill = state.brush() + + if flags & QPaintEngine.DirtyPen: + s.stroke = state.pen() + + if flags & QPaintEngine.DirtyOpacity: + s.opacity = state.opacity() + + if flags & QPaintEngine.DirtyClipPath or flags & QPaintEngine.DirtyClipRegion: + s.clip = painter.clipPath() + + def reset(self): + self.current_state = GraphicsState() + self.pending_state = None + + def __call__(self, pdf, pdf_system, painter): + # Apply the currently pending state to the PDF + if self.pending_state is None: + return + + pdf_state = self.current_state + ps = self.pending_state + + if (ps.transform != pdf_state.transform or ps.clip != pdf_state.clip): + pdf.restore_stack() + pdf.save_stack() + pdf_state = self.base_state + + if (pdf_state.transform != ps.transform): + pdf.transform(ps.transform) + + if (pdf_state.opacity != ps.opacity or pdf_state.stroke != ps.stroke): + self.apply_stroke(ps, pdf, pdf_system, painter) + + if (pdf_state.opacity != ps.opacity or pdf_state.fill != ps.fill or + pdf_state.brush_origin != ps.brush_origin): + self.apply_fill(ps, pdf, pdf_system, painter) + + if (pdf_state.clip != ps.clip): + p = convert_path(ps.clip) + fill_rule = {Qt.OddEvenFill:'evenodd', + Qt.WindingFill:'winding'}[ps.clip.fillRule()] + pdf.add_clip(p, fill_rule=fill_rule) + + self.current_state = self.pending_state + self.pending_state = None + + def apply_stroke(self, state, pdf, pdf_system, painter): + # TODO: Handle pens with non solid brushes by setting the colorspace + # for stroking to a pattern + # TODO: Support miter limit by using QPainterPathStroker + pen = state.stroke + self.pending_state.do_stroke = True + if pen.style() == Qt.NoPen: + self.pending_state.do_stroke = False + + # Width + w = pen.widthF() + if pen.isCosmetic(): + t = painter.transform() + w /= sqrt(t.m11()**2 + t.m22()**2) + pdf.serialize(w) + pdf.current_page.write(' w ') + + # Line cap + cap = {Qt.FlatCap:0, Qt.RoundCap:1, Qt.SquareCap: + 2}.get(pen.capStyle(), 0) + pdf.current_page.write('%d J '%cap) + + # Line join + join = {Qt.MiterJoin:0, Qt.RoundJoin:1, + Qt.BevelJoin:2}.get(pen.joinStyle(), 0) + pdf.current_page.write('%d j '%join) + + # Dash pattern + ps = {Qt.DashLine:[3], Qt.DotLine:[1,2], Qt.DashDotLine:[3,2,1,2], + Qt.DashDotDotLine:[3, 2, 1, 2, 1, 2]}.get(pen.style(), []) + if ps: + pdf.serialize(Array(ps)) + pdf.current_page.write(' d ') + + # Stroke fill + b = pen.brush() + vals = list(b.color().getRgbF()) + vals[-1] *= state.opacity + color = Color(*vals) + pdf.set_stroke_color(color) + + if vals[-1] < 1e-5 or b.style() == Qt.NoBrush: + self.pending_state.do_stroke = False + + def apply_fill(self, state, pdf, pdf_system, painter): + self.pending_state.do_fill = True + b = state.fill + if b.style() == Qt.NoBrush: + self.pending_state.do_fill = False + vals = list(b.color().getRgbF()) + vals[-1] *= state.opacity + color = Color(*vals) + pdf.set_fill_color(color) + diff --git a/src/calibre/ebooks/pdf/render/links.py b/src/calibre/ebooks/pdf/render/links.py new file mode 100644 index 0000000000..41b7fcfd39 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/links.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import os +from future_builtins import map +from urlparse import urlparse, urlunparse +from urllib2 import quote, unquote + +from calibre.ebooks.pdf.render.common import Array, Name, Dictionary, String + +class Destination(Array): + + def __init__(self, start_page, pos, get_pageref): + super(Destination, self).__init__( + [get_pageref(start_page + pos['column']), Name('XYZ'), pos['left'], + pos['top'], None] + ) + +class Links(object): + + def __init__(self, pdf, mark_links, page_size): + self.anchors = {} + self.links = [] + self.start = {'top':page_size[1], 'column':0, 'left':0} + self.pdf = pdf + self.mark_links = mark_links + + def add(self, base_path, start_page, links, anchors): + path = os.path.normcase(os.path.abspath(base_path)) + self.anchors[path] = a = {} + a[None] = Destination(start_page, self.start, self.pdf.get_pageref) + for anchor, pos in anchors.iteritems(): + a[anchor] = Destination(start_page, pos, self.pdf.get_pageref) + for link in links: + href, page, rect = link + p, frag = href.partition('#')[0::2] + link = ((path, p, frag or None), self.pdf.get_pageref(page).obj, Array(rect)) + self.links.append(link) + + def add_links(self): + for link in self.links: + path, href, frag = link[0] + page, rect = link[1:] + combined_path = os.path.abspath(os.path.join(os.path.dirname(path), *href.split('/'))) + is_local = not href or combined_path in self.anchors + annot = Dictionary({ + 'Type':Name('Annot'), 'Subtype':Name('Link'), + 'Rect':rect, 'Border':Array([0,0,0]), + }) + if self.mark_links: + annot.update({'Border':Array([16, 16, 1]), 'C':Array([1.0, 0, + 0])}) + if is_local: + path = combined_path if href else path + annot['Dest'] = self.anchors[path][frag] + else: + url = href + (('#'+frag) if frag else '') + purl = urlparse(url) + if purl.scheme and purl.scheme != 'file': + action = Dictionary({ + 'Type':Name('Action'), 'S':Name('URI'), + }) + parts = (x.encode('utf-8') if isinstance(x, type(u'')) else + x for x in purl) + url = urlunparse(map(quote, map(unquote, + parts))).decode('ascii') + action['URI'] = String(url) + annot['A'] = action + if 'A' in annot or 'Dest' in annot: + if 'Annots' not in page: + page['Annots'] = Array() + page['Annots'].append(self.pdf.objects.add(annot)) + else: + self.pdf.debug('Could not find destination for link: %s in file %s'% + (href, path)) + + def add_outline(self, toc): + parent = Dictionary({'Type':Name('Outlines')}) + parentref = self.pdf.objects.add(parent) + self.process_children(toc, parentref, parent_is_root=True) + self.pdf.catalog.obj['Outlines'] = parentref + + def process_children(self, toc, parentref, parent_is_root=False): + childrefs = [] + for child in toc: + childref = self.process_toc_item(child, parentref) + if childref is None: + continue + if childrefs: + childrefs[-1].obj['Next'] = childref + childref.obj['Prev'] = childrefs[-1] + childrefs.append(childref) + + if len(child) > 0: + self.process_children(child, childref) + if childrefs: + parentref.obj['First'] = childrefs[0] + parentref.obj['Last'] = childrefs[-1] + if not parent_is_root: + parentref.obj['Count'] = -len(childrefs) + + def process_toc_item(self, toc, parentref): + path = toc.abspath or None + frag = toc.fragment or None + if path is None: + return + path = os.path.normcase(os.path.abspath(path)) + if path not in self.anchors: + return None + a = self.anchors[path] + dest = a.get(frag, a[None]) + item = Dictionary({'Parent':parentref, 'Dest':dest, + 'Title':String(toc.text or _('Unknown'))}) + return self.pdf.objects.add(item) + + diff --git a/src/calibre/ebooks/pdf/render/qt_hack.cpp b/src/calibre/ebooks/pdf/render/qt_hack.cpp new file mode 100644 index 0000000000..f68f40c921 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/qt_hack.cpp @@ -0,0 +1,66 @@ +/* + * qt_hack.cpp + * Copyright (C) 2012 Kovid Goyal + * + * Distributed under terms of the GPL3 license. + */ + +#include "qt_hack.h" + +#include + +#include "private/qtextengine_p.h" +#include "private/qfontengine_p.h" + +GlyphInfo* get_glyphs(QPointF &p, const QTextItem &text_item) { + QTextItemInt ti = static_cast(text_item); + QFontEngine *fe = ti.fontEngine; + qreal size = ti.fontEngine->fontDef.pixelSize; +#ifdef Q_WS_WIN + if (ti.fontEngine->type() == QFontEngine::Win) { + QFontEngineWin *fe = static_cast(ti.fontEngine); + size = fe->tm.tmHeight; + } +#endif + QVarLengthArray glyphs; + QVarLengthArray positions; + QTransform m = QTransform::fromTranslate(p.x(), p.y()); + fe->getGlyphPositions(ti.glyphs, m, ti.flags, glyphs, positions); + QVector points = QVector(positions.count()); + for (int i = 0; i < positions.count(); i++) { + points[i].setX(positions[i].x.toReal()); + points[i].setY(positions[i].y.toReal()); + } + + QVector indices = QVector(glyphs.count()); + for (int i = 0; i < glyphs.count(); i++) + indices[i] = (unsigned int)glyphs[i]; + + const quint32 *tag = reinterpret_cast("name"); + + return new GlyphInfo(fe->getSfntTable(qToBigEndian(*tag)), size, points, indices); +} + +GlyphInfo::GlyphInfo(const QByteArray& name, qreal size, const QVector &positions, const QVector &indices) :name(name), positions(positions), size(size), indices(indices) { +} + +QByteArray get_sfnt_table(const QTextItem &text_item, const char* tag_name) { + QTextItemInt ti = static_cast(text_item); + const quint32 *tag = reinterpret_cast(tag_name); + return ti.fontEngine->getSfntTable(qToBigEndian(*tag)); +} + +QVector* get_glyph_map(const QTextItem &text_item) { + QTextItemInt ti = static_cast(text_item); + QVector *ans = new QVector(0x10000); + QGlyphLayoutArray<10> glyphs; + int nglyphs = 10; + + for (uint uc = 0; uc < 0x10000; ++uc) { + QChar ch(uc); + ti.fontEngine->stringToCMap(&ch, 1, &glyphs, &nglyphs, QTextEngine::GlyphIndicesOnly); + (*ans)[uc] = glyphs.glyphs[0]; + } + return ans; +} + diff --git a/src/calibre/ebooks/pdf/render/qt_hack.h b/src/calibre/ebooks/pdf/render/qt_hack.h new file mode 100644 index 0000000000..d1cb5e208d --- /dev/null +++ b/src/calibre/ebooks/pdf/render/qt_hack.h @@ -0,0 +1,34 @@ +/* + * qt_hack.h + * Copyright (C) 2012 Kovid Goyal + * + * Distributed under terms of the GPL3 license. + */ + +#pragma once + +#include +#include +#include + + +class GlyphInfo { + public: + QByteArray name; + QVector positions; + qreal size; + QVector indices; + + GlyphInfo(const QByteArray &name, qreal size, const QVector &positions, const QVector &indices); + + private: + GlyphInfo(const GlyphInfo&); + GlyphInfo &operator=(const GlyphInfo&); +}; + +GlyphInfo* get_glyphs(QPointF &p, const QTextItem &text_item); + +QByteArray get_sfnt_table(const QTextItem &text_item, const char* tag_name); + +QVector* get_glyph_map(const QTextItem &text_item); + diff --git a/src/calibre/ebooks/pdf/render/qt_hack.sip b/src/calibre/ebooks/pdf/render/qt_hack.sip new file mode 100644 index 0000000000..b5a6fcf55e --- /dev/null +++ b/src/calibre/ebooks/pdf/render/qt_hack.sip @@ -0,0 +1,28 @@ +//Define the SIP wrapper to the qt_hack code +//Author - Kovid Goyal + +%Module(name=qt_hack, version=1) + +%Import QtCore/QtCoremod.sip +%Import QtGui/QtGuimod.sip + +class GlyphInfo { +%TypeHeaderCode +#include +%End +public: + QByteArray name; + qreal size; + QVector &positions; + QVector indices; + GlyphInfo(const QByteArray &name, qreal size, const QVector &positions, const QVector &indices); +private: + GlyphInfo(const GlyphInfo& g); + +}; + +GlyphInfo* get_glyphs(QPointF &p, const QTextItem &text_item); + +QByteArray get_sfnt_table(const QTextItem &text_item, const char* tag_name); + +QVector* get_glyph_map(const QTextItem &text_item); diff --git a/src/calibre/ebooks/pdf/render/serialize.py b/src/calibre/ebooks/pdf/render/serialize.py new file mode 100644 index 0000000000..be78ddda66 --- /dev/null +++ b/src/calibre/ebooks/pdf/render/serialize.py @@ -0,0 +1,452 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:fdm=marker:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2012, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import hashlib +from future_builtins import map +from itertools import izip +from collections import namedtuple + +from calibre.constants import (__appname__, __version__) +from calibre.ebooks.pdf.render.common import ( + Reference, EOL, serialize, Stream, Dictionary, String, Name, Array, + GlyphIndex, fmtnum) +from calibre.ebooks.pdf.render.fonts import FontManager +from calibre.ebooks.pdf.render.links import Links + +PDFVER = b'%PDF-1.3' + +Color = namedtuple('Color', 'red green blue opacity') + +class IndirectObjects(object): + + def __init__(self): + self._list = [] + self._map = {} + self._offsets = [] + + def __len__(self): + return len(self._list) + + def add(self, o): + self._list.append(o) + ref = Reference(len(self._list), o) + self._map[id(o)] = ref + self._offsets.append(None) + return ref + + def commit(self, ref, stream): + self.write_obj(stream, ref.num, ref.obj) + + def write_obj(self, stream, num, obj): + stream.write(EOL) + self._offsets[num-1] = stream.tell() + stream.write('%d 0 obj'%num) + stream.write(EOL) + serialize(obj, stream) + if stream.last_char != EOL: + stream.write(EOL) + stream.write('endobj') + stream.write(EOL) + + def __getitem__(self, o): + try: + return self._map[id(self._list[o] if isinstance(o, int) else o)] + except (KeyError, IndexError): + raise KeyError('The object %r was not found'%o) + + def pdf_serialize(self, stream): + for i, obj in enumerate(self._list): + offset = self._offsets[i] + if offset is None: + self.write_obj(stream, i+1, obj) + + def write_xref(self, stream): + self.xref_offset = stream.tell() + stream.write(b'xref'+EOL) + stream.write('0 %d'%(1+len(self._offsets))) + stream.write(EOL) + stream.write('%010d 65535 f '%0) + stream.write(EOL) + + for offset in self._offsets: + line = '%010d 00000 n '%offset + stream.write(line.encode('ascii') + EOL) + return self.xref_offset + +class Page(Stream): + + def __init__(self, parentref, *args, **kwargs): + super(Page, self).__init__(*args, **kwargs) + self.page_dict = Dictionary({ + 'Type': Name('Page'), + 'Parent': parentref, + }) + self.opacities = {} + self.fonts = {} + self.xobjects = {} + + def set_opacity(self, opref): + if opref not in self.opacities: + self.opacities[opref] = 'Opa%d'%len(self.opacities) + name = self.opacities[opref] + serialize(Name(name), self) + self.write(b' gs ') + + def add_font(self, fontref): + if fontref not in self.fonts: + self.fonts[fontref] = 'F%d'%len(self.fonts) + return self.fonts[fontref] + + def add_image(self, imgref): + if imgref not in self.xobjects: + self.xobjects[imgref] = 'Image%d'%len(self.xobjects) + return self.xobjects[imgref] + + def add_resources(self): + r = Dictionary() + if self.opacities: + extgs = Dictionary() + for opref, name in self.opacities.iteritems(): + extgs[name] = opref + r['ExtGState'] = extgs + if self.fonts: + fonts = Dictionary() + for ref, name in self.fonts.iteritems(): + fonts[name] = ref + r['Font'] = fonts + if self.xobjects: + xobjects = Dictionary() + for ref, name in self.xobjects.iteritems(): + xobjects[name] = ref + r['XObject'] = xobjects + if r: + self.page_dict['Resources'] = r + + def end(self, objects, stream): + contents = objects.add(self) + objects.commit(contents, stream) + self.page_dict['Contents'] = contents + self.add_resources() + ret = objects.add(self.page_dict) + # objects.commit(ret, stream) + return ret + +class Path(object): + + def __init__(self): + self.ops = [] + + def move_to(self, x, y): + self.ops.append((x, y, 'm')) + + def line_to(self, x, y): + self.ops.append((x, y, 'l')) + + def curve_to(self, x1, y1, x2, y2, x, y): + self.ops.append((x1, y1, x2, y2, x, y, 'c')) + + def close(self): + self.ops.append(('h',)) + +class Text(object): + + def __init__(self): + self.transform = self.default_transform = [1, 0, 0, 1, 0, 0] + self.font_name = 'Times-Roman' + self.font_path = None + self.horizontal_scale = self.default_horizontal_scale = 100 + self.word_spacing = self.default_word_spacing = 0 + self.char_space = self.default_char_space = 0 + self.glyph_adjust = self.default_glyph_adjust = None + self.size = 12 + self.text = '' + + def set_transform(self, *args): + if len(args) == 1: + m = args[0] + vals = [m.m11(), m.m12(), m.m21(), m.m22(), m.dx(), m.dy()] + else: + vals = args + self.transform = vals + + def pdf_serialize(self, stream, font_name): + if not self.text: return + stream.write_line('BT ') + serialize(Name(font_name), stream) + stream.write(' %s Tf '%fmtnum(self.size)) + stream.write(' '.join(map(fmtnum, self.transform)) + ' Tm ') + if self.horizontal_scale != self.default_horizontal_scale: + stream.write('%s Tz '%fmtnum(self.horizontal_scale)) + if self.word_spacing != self.default_word_spacing: + stream.write('%s Tw '%fmtnum(self.word_spacing)) + if self.char_space != self.default_char_space: + stream.write('%s Tc '%fmtnum(self.char_space)) + stream.write_line() + if self.glyph_adjust is self.default_glyph_adjust: + serialize(String(self.text), stream) + stream.write(' Tj ') + else: + chars = Array() + frac, widths = self.glyph_adjust + for c, width in izip(self.text, widths): + chars.append(String(c)) + chars.append(int(width * frac)) + serialize(chars, stream) + stream.write(' TJ ') + stream.write_line('ET') + + +class Catalog(Dictionary): + + def __init__(self, pagetree): + super(Catalog, self).__init__({'Type':Name('Catalog'), + 'Pages': pagetree}) + +class PageTree(Dictionary): + + def __init__(self, page_size): + super(PageTree, self).__init__({'Type':Name('Pages'), + 'MediaBox':Array([0, 0, page_size[0], page_size[1]]), + 'Kids':Array(), 'Count':0, + }) + + def add_page(self, pageref): + self['Kids'].append(pageref) + self['Count'] += 1 + + def get_ref(self, num): + return self['Kids'][num-1] + +class HashingStream(object): + + def __init__(self, f): + self.f = f + self.tell = f.tell + self.hashobj = hashlib.sha256() + self.last_char = b'' + + def write(self, raw): + raw = raw if isinstance(raw, bytes) else raw.encode('ascii') + self.f.write(raw) + self.hashobj.update(raw) + if raw: + self.last_char = raw[-1] + +class Image(Stream): + + def __init__(self, data, w, h, depth, mask, soft_mask, dct): + Stream.__init__(self) + self.width, self.height, self.depth = w, h, depth + self.mask, self.soft_mask = mask, soft_mask + if dct: + self.filters.append(Name('DCTDecode')) + else: + self.compress = True + self.write(data) + + def add_extra_keys(self, d): + d['Type'] = Name('XObject') + d['Subtype']= Name('Image') + d['Width'] = self.width + d['Height'] = self.height + if self.depth == 1: + d['ImageMask'] = True + d['Decode'] = Array([1, 0]) + else: + d['BitsPerComponent'] = 8 + d['ColorSpace'] = Name('Device' + ('RGB' if self.depth == 32 else + 'Gray')) + if self.mask is not None: + d['Mask'] = self.mask + if self.soft_mask is not None: + d['SMask'] = self.soft_mask + +class PDFStream(object): + + PATH_OPS = { + # stroke fill fill-rule + ( False, False, 'winding') : 'n', + ( False, False, 'evenodd') : 'n', + ( False, True, 'winding') : 'f', + ( False, True, 'evenodd') : 'f*', + ( True, False, 'winding') : 'S', + ( True, False, 'evenodd') : 'S', + ( True, True, 'winding') : 'B', + ( True, True, 'evenodd') : 'B*', + } + + def __init__(self, stream, page_size, compress=False, mark_links=False, + debug=print): + self.stream = HashingStream(stream) + self.compress = compress + self.write_line(PDFVER) + self.write_line(b'%íì¦"') + creator = ('%s %s [http://calibre-ebook.com]'%(__appname__, + __version__)) + self.write_line('%% Created by %s'%creator) + self.objects = IndirectObjects() + self.objects.add(PageTree(page_size)) + self.objects.add(Catalog(self.page_tree)) + self.current_page = Page(self.page_tree, compress=self.compress) + self.info = Dictionary({'Creator':String(creator), + 'Producer':String(creator)}) + self.stroke_opacities, self.fill_opacities = {}, {} + self.font_manager = FontManager(self.objects, self.compress) + self.image_cache = {} + self.debug = debug + self.links = Links(self, mark_links, page_size) + + @property + def page_tree(self): + return self.objects[0] + + @property + def catalog(self): + return self.objects[1] + + def get_pageref(self, pagenum): + return self.page_tree.obj.get_ref(pagenum) + + def set_metadata(self, title=None, author=None, tags=None): + if title: + self.info['Title'] = String(title) + if author: + self.info['Author'] = String(author) + if tags: + self.info['Keywords'] = String(tags) + + def write_line(self, byts=b''): + byts = byts if isinstance(byts, bytes) else byts.encode('ascii') + self.stream.write(byts + EOL) + + def transform(self, *args): + if len(args) == 1: + m = args[0] + vals = [m.m11(), m.m12(), m.m21(), m.m22(), m.dx(), m.dy()] + else: + vals = args + cm = ' '.join(map(fmtnum, vals)) + self.current_page.write_line(cm + ' cm') + + def set_rgb_colorspace(self): + self.current_page.write_line('/DeviceRGB CS /DeviceRGB cs') + + def save_stack(self): + self.current_page.write_line('q') + + def restore_stack(self): + self.current_page.write_line('Q') + + def reset_stack(self): + self.current_page.write_line('Q q') + + def draw_rect(self, x, y, width, height, stroke=True, fill=False): + self.current_page.write('%s re '%' '.join(map(fmtnum, (x, y, width, height)))) + self.current_page.write_line(self.PATH_OPS[(stroke, fill, 'winding')]) + + def write_path(self, path): + for i, op in enumerate(path.ops): + if i != 0: + self.current_page.write_line() + for x in op: + self.current_page.write( + (fmtnum(x) if isinstance(x, (int, long, float)) else x) + ' ') + + def draw_path(self, path, stroke=True, fill=False, fill_rule='winding'): + if not path.ops: return + self.write_path(path) + self.current_page.write_line(self.PATH_OPS[(stroke, fill, fill_rule)]) + + def add_clip(self, path, fill_rule='winding'): + if not path.ops: return + self.write_path(path) + op = 'W' if fill_rule == 'winding' else 'W*' + self.current_page.write_line(op + ' ' + 'n') + + def serialize(self, o): + serialize(o, self.current_page) + + def set_stroke_color(self, color): + opacity = color.opacity + if opacity not in self.stroke_opacities: + op = Dictionary({'Type':Name('ExtGState'), 'CA': opacity}) + self.stroke_opacities[opacity] = self.objects.add(op) + self.current_page.set_opacity(self.stroke_opacities[opacity]) + self.current_page.write_line(' '.join(map(fmtnum, color[:3])) + ' SC') + + def set_fill_color(self, color): + opacity = color.opacity + if opacity not in self.fill_opacities: + op = Dictionary({'Type':Name('ExtGState'), 'ca': opacity}) + self.fill_opacities[opacity] = self.objects.add(op) + self.current_page.set_opacity(self.fill_opacities[opacity]) + self.current_page.write_line(' '.join(map(fmtnum, color[:3])) + ' sc') + + def end_page(self): + pageref = self.current_page.end(self.objects, self.stream) + self.page_tree.obj.add_page(pageref) + self.current_page = Page(self.page_tree, compress=self.compress) + + def draw_text(self, text_object): + if text_object.font_path is None: + fontref = self.font_manager.add_standard_font(text_object.font_name) + else: + raise NotImplementedError() + name = self.current_page.add_font(fontref) + text_object.pdf_serialize(self.current_page, name) + + def draw_glyph_run(self, transform, size, font_metrics, glyphs): + glyph_ids = {x[-1] for x in glyphs} + fontref = self.font_manager.add_font(font_metrics, glyph_ids) + name = self.current_page.add_font(fontref) + self.current_page.write(b'BT ') + serialize(Name(name), self.current_page) + self.current_page.write(' %s Tf '%fmtnum(size)) + self.current_page.write('%s Tm '%' '.join(map(fmtnum, transform))) + for x, y, glyph_id in glyphs: + self.current_page.write('%s %s Td '%(fmtnum(x), fmtnum(y))) + serialize(GlyphIndex(glyph_id), self.current_page) + self.current_page.write(' Tj ') + self.current_page.write_line(b' ET') + + def get_image(self, cache_key): + return self.image_cache.get(cache_key, None) + + def write_image(self, data, w, h, depth, dct=False, mask=None, + soft_mask=None, cache_key=None): + imgobj = Image(data, w, h, depth, mask, soft_mask, dct) + self.image_cache[cache_key] = r = self.objects.add(imgobj) + self.objects.commit(r, self.stream) + return r + + def draw_image(self, x, y, xscale, yscale, imgref): + name = self.current_page.add_image(imgref) + self.current_page.write('q %s 0 0 %s %s %s cm '%(fmtnum(xscale), + fmtnum(yscale), fmtnum(x), fmtnum(y))) + serialize(Name(name), self.current_page) + self.current_page.write_line(' Do Q') + + def end(self): + if self.current_page.getvalue(): + self.end_page() + self.font_manager.embed_fonts() + inforef = self.objects.add(self.info) + self.links.add_links() + self.objects.pdf_serialize(self.stream) + self.write_line() + startxref = self.objects.write_xref(self.stream) + file_id = String(self.stream.hashobj.hexdigest().decode('ascii')) + self.write_line('trailer') + trailer = Dictionary({'Root':self.catalog, 'Size':len(self.objects)+1, + 'ID':Array([file_id, file_id]), 'Info':inforef}) + serialize(trailer, self.stream) + self.write_line('startxref') + self.write_line('%d'%startxref) + self.stream.write('%%EOF') + diff --git a/src/calibre/ebooks/pdf/writer.py b/src/calibre/ebooks/pdf/writer.py index a9cb951e35..eaec0e79bc 100644 --- a/src/calibre/ebooks/pdf/writer.py +++ b/src/calibre/ebooks/pdf/writer.py @@ -9,28 +9,26 @@ Write content to PDF. ''' import os, shutil, json -from future_builtins import map from PyQt4.Qt import (QEventLoop, QObject, QPrinter, QSizeF, Qt, QPainter, QPixmap, QTimer, pyqtProperty, QString, QSize) from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings from calibre.ptempfile import PersistentTemporaryDirectory -from calibre.ebooks.pdf.pageoptions import (unit, paper_size, orientation) +from calibre.ebooks.pdf.pageoptions import (unit, paper_size) from calibre.ebooks.pdf.outline_writer import Outline -from calibre.ebooks.metadata import authors_to_string from calibre.ptempfile import PersistentTemporaryFile -from calibre import (__appname__, __version__, fit_image, isosx, force_unicode) +from calibre import (__appname__, __version__, fit_image, isosx) from calibre.ebooks.oeb.display.webview import load_html def get_custom_size(opts): custom_size = None if opts.custom_size != None: width, sep, height = opts.custom_size.partition('x') - if height != '': + if height: try: - width = int(width) - height = int(height) + width = float(width) + height = float(height) custom_size = (width, height) except: custom_size = None @@ -52,7 +50,7 @@ def get_pdf_printer(opts, for_comic=False, output_file_name=None): # {{{ printer.setPaperSize(paper_size(opts.paper_size)) else: if opts.output_profile.short_name == 'default' or \ - opts.output_profile.width > 9999: + opts.output_profile.width > 9999 or opts.override_profile_size: if custom_size is None: printer.setPaperSize(paper_size(opts.paper_size)) else: @@ -72,7 +70,6 @@ def get_pdf_printer(opts, for_comic=False, output_file_name=None): # {{{ else: printer.setPageMargins(opts.margin_left, opts.margin_top, opts.margin_right, opts.margin_bottom, QPrinter.Point) - printer.setOrientation(orientation(opts.orientation)) printer.setOutputFormat(QPrinter.PdfFormat) printer.setFullPage(for_comic) if output_file_name: @@ -103,24 +100,6 @@ def draw_image_page(printer, painter, p, preserve_aspect_ratio=True): painter.drawPixmap(page_rect, p, p.rect()) -class PDFMetadata(object): # {{{ - def __init__(self, oeb_metadata=None): - self.title = _(u'Unknown') - self.author = _(u'Unknown') - self.tags = u'' - - if oeb_metadata != None: - if len(oeb_metadata.title) >= 1: - self.title = oeb_metadata.title[0].value - if len(oeb_metadata.creator) >= 1: - self.author = authors_to_string([x.value for x in oeb_metadata.creator]) - if oeb_metadata.subject: - self.tags = u', '.join(map(unicode, oeb_metadata.subject)) - - self.title = force_unicode(self.title) - self.author = force_unicode(self.author) -# }}} - class Page(QWebPage): # {{{ def __init__(self, opts, log): diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index ddeba9e190..9dbf769511 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -106,6 +106,7 @@ gprefs.defaults['tag_browser_old_look'] = False gprefs.defaults['book_list_tooltips'] = True gprefs.defaults['bd_show_cover'] = True gprefs.defaults['bd_overlay_cover_size'] = False +gprefs.defaults['tags_browser_category_icons'] = {} # }}} NONE = QVariant() #: Null value to return from the data function of item models @@ -1034,7 +1035,9 @@ def build_forms(srcdir, info=None): dat = dat.replace('from widgets import', 'from calibre.gui2.widgets import') dat = dat.replace('from convert.xpath_wizard import', 'from calibre.gui2.convert.xpath_wizard import') - dat = re.compile(r'QtGui.QApplication.translate\(.+?,\s+"(.+?)(?Form - + + QFormLayout::ExpandingFieldsGrow + + + + + <b>Note:</b> The paper size settings below only take effect if you enable the "Override" checkbox below. Otherwise the size from the output profile will be used. + + + true + + + + + + + &Override paper size set in output profile + + + + &Paper Size: @@ -24,21 +44,8 @@ - - - - - - - &Orientation: - - - opt_orientation - - - - + @@ -51,7 +58,24 @@ - + + + + + + + + &Unit: + + + opt_unit + + + + + + + @@ -60,19 +84,6 @@ - - - - Qt::Vertical - - - - 20 - 213 - - - - @@ -159,15 +170,18 @@ - - - - <b>Note:</b> The paper size settings below only take effect if you have set the output profile to the default output profile. Otherwise the output profile will override these settings. + + + + Qt::Vertical - - true + + + 20 + 213 + - + diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index 2b45769185..89824dbc7a 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -372,7 +372,7 @@ class Series(Base): self.widgets.append(QLabel('&'+self.col_metadata['name']+_(' index:'), parent)) w = QDoubleSpinBox(parent) - w.setRange(-100., float(100000000)) + w.setRange(-10000., float(100000000)) w.setDecimals(2) w.setSingleStep(1) self.idx_widget=w diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 1047fef1b6..85e992e264 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -985,6 +985,12 @@ class DeviceMixin(object): # {{{ return except: pass + if getattr(job, 'exception', None).__class__.__name__ == 'MTPInvalidSendPathError': + try: + from calibre.gui2.device_drivers.mtp_config import SendError + return SendError(self, job.exception).exec_() + except: + traceback.print_exc() try: prints(job.details, file=sys.stderr) except: diff --git a/src/calibre/gui2/device_drivers/mtp_config.py b/src/calibre/gui2/device_drivers/mtp_config.py index 5ab1dd692e..b71766b7da 100644 --- a/src/calibre/gui2/device_drivers/mtp_config.py +++ b/src/calibre/gui2/device_drivers/mtp_config.py @@ -13,13 +13,13 @@ from PyQt4.Qt import (QWidget, QListWidgetItem, Qt, QToolButton, QLabel, QTabWidget, QGridLayout, QListWidget, QIcon, QLineEdit, QVBoxLayout, QPushButton, QGroupBox, QScrollArea, QHBoxLayout, QComboBox, pyqtSignal, QSizePolicy, QDialog, QDialogButtonBox, QPlainTextEdit, - QApplication) + QApplication, QSize) from calibre.ebooks import BOOK_EXTENSIONS from calibre.gui2 import error_dialog from calibre.gui2.dialogs.template_dialog import TemplateDialog from calibre.utils.date import parse_date -from calibre.gui2.device_drivers.mtp_folder_browser import Browser +from calibre.gui2.device_drivers.mtp_folder_browser import Browser, TopLevel class FormatsConfig(QWidget): # {{{ @@ -328,7 +328,7 @@ class FormatRules(QGroupBox): class MTPConfig(QTabWidget): - def __init__(self, device, parent=None): + def __init__(self, device, parent=None, highlight_ignored_folders=False): QTabWidget.__init__(self, parent) self._device = weakref.ref(device) @@ -373,23 +373,33 @@ class MTPConfig(QTabWidget): _('&Ignore the %s in calibre')%device.current_friendly_name, self.base) b.clicked.connect(self.ignore_device) + self.config_ign_folders_button = cif = QPushButton( + QIcon(I('tb_folder.png')), _('Change scanned &folders')) + cif.setStyleSheet( + 'QPushButton { font-weight: bold; }') + if highlight_ignored_folders: + cif.setIconSize(QSize(64, 64)) self.show_debug_button = bd = QPushButton(QIcon(I('debug.png')), _('Show device information')) bd.clicked.connect(self.show_debug_info) + cif.clicked.connect(self.change_ignored_folders) l.addWidget(b, 0, 0, 1, 2) l.addWidget(la, 1, 0, 1, 1) - l.addWidget(self.formats, 2, 0, 4, 1) - l.addWidget(self.send_to, 2, 1, 1, 1) + l.addWidget(self.formats, 2, 0, 5, 1) + l.addWidget(cif, 2, 1, 1, 1) l.addWidget(self.template, 3, 1, 1, 1) - l.addWidget(self.show_debug_button, 4, 1, 1, 1) - l.setRowStretch(5, 10) - l.addWidget(r, 6, 0, 1, 2) - l.setRowStretch(6, 100) + l.addWidget(self.send_to, 4, 1, 1, 1) + l.addWidget(self.show_debug_button, 5, 1, 1, 1) + l.setRowStretch(6, 10) + l.addWidget(r, 7, 0, 1, 2) + l.setRowStretch(7, 100) self.igntab = IgnoredDevices(self.device.prefs['history'], self.device.prefs['blacklist']) self.addTab(self.igntab, _('Ignored devices')) + self.current_ignored_folders = self.get_pref('ignored_folders') + self.initial_ignored_folders = self.current_ignored_folders self.setCurrentIndex(1 if msg else 0) @@ -413,6 +423,12 @@ class MTPConfig(QTabWidget): QApplication.clipboard().setText(v.toPlainText())) d.exec_() + def change_ignored_folders(self): + d = TopLevel(self.device, + self.current_ignored_folders, parent=self) + if d.exec_() == d.Accepted: + self.current_ignored_folders = d.ignored_folders + def ignore_device(self): self.igntab.ignore_device(self.device.current_serial_num) self.base.b.setEnabled(False) @@ -464,8 +480,42 @@ class MTPConfig(QTabWidget): if r and r != self.device.prefs['rules']: p['rules'] = r + if self.current_ignored_folders != self.initial_ignored_folders: + p['ignored_folders'] = self.current_ignored_folders + self.device.prefs[self.current_device_key] = p +class SendError(QDialog): + + def __init__(self, gui, error): + QDialog.__init__(self, gui) + self.l = l = QVBoxLayout() + self.setLayout(l) + self.la = la = QLabel('

    '+ + _('You are trying to send books into the %s folder. This ' + 'folder is currently ignored by calibre when scanning the ' + 'device. You have tell calibre you want this folder scanned ' + 'in order to be able to send books to it. Click the ' + 'configure button below to send books to it.')%error.folder) + la.setWordWrap(True) + la.setMinimumWidth(500) + l.addWidget(la) + self.bb = bb = QDialogButtonBox(QDialogButtonBox.Close) + self.b = bb.addButton(_('Configure'), bb.AcceptRole) + bb.accepted.connect(self.accept) + bb.rejected.connect(self.reject) + l.addWidget(bb) + self.setWindowTitle(_('Cannot send to %s')%error.folder) + self.setWindowIcon(QIcon(I('dialog_error.png'))) + + self.resize(self.sizeHint()) + + def accept(self): + QDialog.accept(self) + dev = self.parent().device_manager.connected_device + dev.highlight_ignored_folders = True + self.parent().configure_connected_device() + dev.highlight_ignored_folders = False if __name__ == '__main__': from calibre.gui2 import Application diff --git a/src/calibre/gui2/device_drivers/mtp_folder_browser.py b/src/calibre/gui2/device_drivers/mtp_folder_browser.py index 1e108ff117..6a54f65b38 100644 --- a/src/calibre/gui2/device_drivers/mtp_folder_browser.py +++ b/src/calibre/gui2/device_drivers/mtp_folder_browser.py @@ -10,7 +10,8 @@ __docformat__ = 'restructuredtext en' from operator import attrgetter from PyQt4.Qt import (QTabWidget, QTreeWidget, QTreeWidgetItem, Qt, QDialog, - QDialogButtonBox, QVBoxLayout, QSize, pyqtSignal, QIcon) + QDialogButtonBox, QVBoxLayout, QSize, pyqtSignal, QIcon, QLabel, + QListWidget, QListWidgetItem) from calibre.gui2 import file_icon_provider @@ -95,25 +96,105 @@ class Browser(QDialog): def current_item(self): return self.folders.current_item -def browse(): - from calibre.gui2 import Application +class TopLevel(QDialog): + + def __init__(self, dev, ignored_folders=None, parent=None): + QDialog.__init__(self, parent) + self.l = l = QVBoxLayout() + self.setLayout(l) + self.la = la = QLabel('

    '+ _('Scanned folders:') + ' ' + + _('You can select which top level folders calibre will ' + 'scan when searching this device for books.')) + la.setWordWrap(True) + l.addWidget(la) + self.tabs = QTabWidget(self) + l.addWidget(self.tabs) + self.widgets = [] + + for storage in dev.filesystem_cache.entries: + w = QListWidget(self) + w.storage = storage + self.tabs.addTab(w, storage.name) + self.widgets.append(w) + for child in sorted(storage.folders, key=attrgetter('name')): + i = QListWidgetItem(child.name) + i.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) + i.setCheckState(Qt.Unchecked if + dev.is_folder_ignored(storage, child.name, + ignored_folders=ignored_folders) else Qt.Checked) + w.addItem(i) + + self.bb = QDialogButtonBox(QDialogButtonBox.Ok | + QDialogButtonBox.Cancel) + self.bb.accepted.connect(self.accept) + self.bb.rejected.connect(self.reject) + self.sab = self.bb.addButton(_('Select &All'), self.bb.ActionRole) + self.sab.clicked.connect(self.select_all) + self.snb = self.bb.addButton(_('Select &None'), self.bb.ActionRole) + self.snb.clicked.connect(self.select_none) + l.addWidget(self.bb) + self.setWindowTitle(_('Choose folders to scan')) + self.setWindowIcon(QIcon(I('devices/tablet.png'))) + + self.resize(500, 500) + + def select_all(self): + w = self.tabs.currentWidget() + for i in xrange(w.count()): + x = w.item(i) + x.setCheckState(Qt.Checked) + + def select_none(self): + w = self.tabs.currentWidget() + for i in xrange(w.count()): + x = w.item(i) + x.setCheckState(Qt.Unchecked) + + @property + def ignored_folders(self): + ans = {} + for w in self.widgets: + ans[unicode(w.storage.object_id)] = folders = [] + for i in xrange(w.count()): + x = w.item(i) + if x.checkState() != Qt.Checked: + folders.append(unicode(x.text())) + return ans + +def setup_device(): from calibre.devices.mtp.driver import MTP_DEVICE from calibre.devices.scanner import DeviceScanner s = DeviceScanner() s.scan() - app = Application([]) - app dev = MTP_DEVICE(None) dev.startup() cd = dev.detect_managed_devices(s.devices) if cd is None: raise ValueError('No MTP device found') dev.open(cd, 'test') + return dev + +def browse(): + from calibre.gui2 import Application + app = Application([]) + app + dev = setup_device() d = Browser(dev.filesystem_cache) d.exec_() dev.shutdown() return d.current_item -if __name__ == '__main__': - print (browse()) +def top_level(): + from calibre.gui2 import Application + app = Application([]) + app + dev = setup_device() + d = TopLevel(dev, None) + d.exec_() + dev.shutdown() + return d.ignored_folders + +if __name__ == '__main__': + # print (browse()) + print ('Ignored:', top_level()) diff --git a/src/calibre/gui2/dialogs/add_empty_book.py b/src/calibre/gui2/dialogs/add_empty_book.py index 98992f85bb..185a3699e7 100644 --- a/src/calibre/gui2/dialogs/add_empty_book.py +++ b/src/calibre/gui2/dialogs/add_empty_book.py @@ -12,7 +12,7 @@ from calibre.utils.config import tweaks class AddEmptyBookDialog(QDialog): - def __init__(self, parent, db, author): + def __init__(self, parent, db, author, series=None): QDialog.__init__(self, parent) self.db = db @@ -45,6 +45,22 @@ class AddEmptyBookDialog(QDialog): self.clear_button.clicked.connect(self.reset_author) self._layout.addWidget(self.clear_button, 3, 1, 1, 1) + self.series_label = QLabel(_('Set the series of the new books to:')) + self._layout.addWidget(self.series_label, 4, 0, 1, 2) + + self.series_combo = EditWithComplete(self) + self.authors_combo.setSizeAdjustPolicy( + self.authors_combo.AdjustToMinimumContentsLengthWithIcon) + self.series_combo.setEditable(True) + self._layout.addWidget(self.series_combo, 5, 0, 1, 1) + self.initialize_series(db, series) + + self.sclear_button = QToolButton(self) + self.sclear_button.setIcon(QIcon(I('trash.png'))) + self.sclear_button.setToolTip(_('Reset series')) + self.sclear_button.clicked.connect(self.reset_series) + self._layout.addWidget(self.sclear_button, 5, 1, 1, 1) + button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) @@ -54,6 +70,9 @@ class AddEmptyBookDialog(QDialog): def reset_author(self, *args): self.authors_combo.setEditText(_('Unknown')) + def reset_series(self): + self.series_combo.setEditText('') + def initialize_authors(self, db, author): au = author if not au: @@ -65,6 +84,11 @@ class AddEmptyBookDialog(QDialog): self.authors_combo.set_add_separator(tweaks['authors_completer_append_separator']) self.authors_combo.update_items_cache(db.all_author_names()) + def initialize_series(self, db, series): + self.series_combo.show_initial_value(series or '') + self.series_combo.update_items_cache(db.all_series_names()) + self.series_combo.set_separator(None) + @property def qty_to_add(self): return self.qty_spinbox.value() @@ -73,6 +97,10 @@ class AddEmptyBookDialog(QDialog): def selected_authors(self): return string_to_authors(unicode(self.authors_combo.text())) + @property + def selected_series(self): + return unicode(self.series_combo.text()) + if __name__ == '__main__': app = QApplication([]) d = AddEmptyBookDialog() diff --git a/src/calibre/gui2/dialogs/user_profiles.ui b/src/calibre/gui2/dialogs/user_profiles.ui index 6493846c2b..1e29477e6c 100644 --- a/src/calibre/gui2/dialogs/user_profiles.ui +++ b/src/calibre/gui2/dialogs/user_profiles.ui @@ -227,7 +227,7 @@ p, li { white-space: pre-wrap; } 1 - 365 + 36500 7 diff --git a/src/calibre/gui2/email.py b/src/calibre/gui2/email.py index 4ecf28e519..f4164befe6 100644 --- a/src/calibre/gui2/email.py +++ b/src/calibre/gui2/email.py @@ -273,7 +273,10 @@ class EmailMixin(object): # {{{ 5000) if remove: try: + next_id = self.library_view.next_id self.library_view.model().delete_books_by_id(remove) + self.iactions['Remove Books'].library_ids_deleted2(remove, + next_id=next_id) except: import traceback # Probably the user deleted the files, in any case, failing diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index b2b2597434..891b775448 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -5,7 +5,7 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import functools, re, os, traceback, errno +import functools, re, os, traceback, errno, time from collections import defaultdict from PyQt4.Qt import (QAbstractTableModel, Qt, pyqtSignal, QIcon, QImage, @@ -27,6 +27,7 @@ from calibre import strftime, isbytestring from calibre.constants import filesystem_encoding, DEBUG from calibre.gui2.library import DEFAULT_SORT from calibre.utils.localization import calibre_langcode_to_name +from calibre.library.coloring import color_row_key def human_readable(size, precision=1): """ Convert a size in bytes into megabytes """ @@ -45,6 +46,30 @@ def default_image(): _default_image = QImage(I('default_cover.png')) return _default_image +class ColumnColor(object): + + def __init__(self): + self.mi = None + + def __call__(self, id_, key, fmt, db, formatter, color_cache, colors): + if id_ in color_cache and key in color_cache[id_]: + self.mi = None + return color_cache[id_][key] + try: + if self.mi is None: + self.mi = db.get_metadata(id_, index_is_id=True) + color = formatter.safe_format(fmt, self.mi, '', self.mi) + if color in colors: + color = QColor(color) + if color.isValid(): + color = QVariant(color) + color_cache[id_][key] = color + self.mi = None + return color + except: + pass + + class BooksModel(QAbstractTableModel): # {{{ about_to_be_sorted = pyqtSignal(object, name='aboutToBeSorted') @@ -72,6 +97,7 @@ class BooksModel(QAbstractTableModel): # {{{ def __init__(self, parent=None, buffer=40): QAbstractTableModel.__init__(self, parent) self.db = None + self.column_color = ColumnColor() self.book_on_device = None self.editable_cols = ['title', 'authors', 'rating', 'publisher', 'tags', 'series', 'timestamp', 'pubdate', @@ -84,6 +110,7 @@ class BooksModel(QAbstractTableModel): # {{{ self.headers = {} self.alignment_map = {} self.color_cache = defaultdict(dict) + self.color_row_fmt_cache = None self.buffer_size = buffer self.metadata_backup = None self.bool_yes_icon = QIcon(I('ok.png')) @@ -169,12 +196,14 @@ class BooksModel(QAbstractTableModel): # {{{ def refresh_ids(self, ids, current_row=-1): self.color_cache = defaultdict(dict) + self.color_row_fmt_cache = None rows = self.db.refresh_ids(ids) if rows: self.refresh_rows(rows, current_row=current_row) def refresh_rows(self, rows, current_row=-1): self.color_cache = defaultdict(dict) + self.color_row_fmt_cache = None for row in rows: if row == current_row: self.new_bookdisplay_data.emit( @@ -206,6 +235,7 @@ class BooksModel(QAbstractTableModel): # {{{ def count_changed(self, *args): self.color_cache = defaultdict(dict) + self.color_row_fmt_cache = None self.count_changed_signal.emit(self.db.count()) def row_indices(self, index): @@ -337,6 +367,7 @@ class BooksModel(QAbstractTableModel): # {{{ def reset(self): self.color_cache = defaultdict(dict) + self.color_row_fmt_cache = None QAbstractTableModel.reset(self) def resort(self, reset=True): @@ -727,26 +758,20 @@ class BooksModel(QAbstractTableModel): # {{{ return QVariant(QColor('lightgreen')) elif role == Qt.ForegroundRole: key = self.column_map[col] - mi = None + id_ = self.id(index) + self.column_color.mi = None + + if self.color_row_fmt_cache is None: + self.color_row_fmt_cache = tuple(fmt for key, fmt in + self.db.prefs['column_color_rules'] if key == color_row_key) + for k, fmt in self.db.prefs['column_color_rules']: - if k != key: - continue - id_ = self.id(index) - if id_ in self.color_cache: - if key in self.color_cache[id_]: - return self.color_cache[id_][key] - try: - if mi is None: - mi = self.db.get_metadata(id_, index_is_id=True) - color = self.formatter.safe_format(fmt, mi, '', mi) - if color in self.colors: - color = QColor(color) - if color.isValid(): - color = QVariant(color) - self.color_cache[id_][key] = color - return color - except: - continue + if k == key: + ccol = self.column_color(id_, key, fmt, self.db, + self.formatter, self.color_cache, self.colors) + if ccol is not None: + return ccol + if self.is_custom_column(key) and \ self.custom_columns[key]['datatype'] == 'enumeration': cc = self.custom_columns[self.column_map[col]]['display'] @@ -757,9 +782,18 @@ class BooksModel(QAbstractTableModel): # {{{ try: color = QColor(colors[values.index(txt)]) if color.isValid(): + self.column_color.mi = None return QVariant(color) except: pass + + for fmt in self.color_row_fmt_cache: + ccol = self.column_color(id_, color_row_key, fmt, self.db, + self.formatter, self.color_cache, self.colors) + if ccol is not None: + return ccol + + self.column_color.mi = None return NONE elif role == Qt.DecorationRole: if self.column_to_dc_decorator_map[col] is not None: @@ -1385,7 +1419,11 @@ class DeviceBooksModel(BooksModel): # {{{ return QVariant(human_readable(size)) elif cname == 'timestamp': dt = self.db[self.map[row]].datetime - dt = dt_factory(dt, assume_utc=True, as_utc=False) + try: + dt = dt_factory(dt, assume_utc=True, as_utc=False) + except OverflowError: + dt = dt_factory(time.gmtime(), assume_utc=True, + as_utc=False) return QVariant(strftime(TIME_FMT, dt.timetuple())) elif cname == 'collections': tags = self.db[self.map[row]].device_collections diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index 95255d4abb..2d1e1fe7c3 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -1094,6 +1094,9 @@ class RatingEdit(QSpinBox): # {{{ db.set_rating(id_, 2*self.current_val, notify=False, commit=False) return True + def zero(self): + self.setValue(0) + # }}} class TagsEdit(EditWithComplete): # {{{ diff --git a/src/calibre/gui2/metadata/single.py b/src/calibre/gui2/metadata/single.py index a736f9fb27..654a5a474e 100644 --- a/src/calibre/gui2/metadata/single.py +++ b/src/calibre/gui2/metadata/single.py @@ -181,6 +181,11 @@ class MetadataSingleDialogBase(ResizableDialog): self.basic_metadata_widgets.append(self.comments) self.rating = RatingEdit(self) + self.clear_ratings_button = QToolButton(self) + self.clear_ratings_button.setToolTip(_('Clear rating')) + self.clear_ratings_button.setIcon(QIcon(I('trash.png'))) + self.clear_ratings_button.clicked.connect(self.rating.zero) + self.basic_metadata_widgets.append(self.rating) self.tags = TagsEdit(self) @@ -659,8 +664,9 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{ QSizePolicy.Expanding) l.addItem(self.tabs[0].spc_one, 1, 0, 1, 3) sto(self.cover.buttons[-1], self.rating) - create_row2(1, self.rating) - sto(self.rating, self.tags_editor_button) + create_row2(1, self.rating, self.clear_ratings_button) + sto(self.rating, self.clear_ratings_button) + sto(self.clear_ratings_button, self.tags_editor_button) sto(self.tags_editor_button, self.tags) create_row2(2, self.tags, self.clear_tags_button, front_button=self.tags_editor_button) sto(self.clear_tags_button, self.paste_isbn_button) @@ -780,7 +786,7 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{ button=self.clear_series_button, icon='trash.png') create_row(5, self.series_index, self.tags) create_row(6, self.tags, self.rating, button=self.clear_tags_button) - create_row(7, self.rating, self.pubdate) + create_row(7, self.rating, self.pubdate, button=self.clear_ratings_button) create_row(8, self.pubdate, self.publisher, button=self.pubdate.clear_button, icon='trash.png') create_row(9, self.publisher, self.languages) @@ -917,7 +923,7 @@ class MetadataSingleDialogAlt2(MetadataSingleDialogBase): # {{{ button=self.clear_series_button, icon='trash.png') create_row(5, self.series_index, self.tags) create_row(6, self.tags, self.rating, button=self.clear_tags_button) - create_row(7, self.rating, self.pubdate) + create_row(7, self.rating, self.pubdate, button=self.clear_ratings_button) create_row(8, self.pubdate, self.publisher, button=self.pubdate.clear_button, icon='trash.png') create_row(9, self.publisher, self.languages) diff --git a/src/calibre/gui2/metadata/single_download.py b/src/calibre/gui2/metadata/single_download.py index cff1527b6f..ee8cd84261 100644 --- a/src/calibre/gui2/metadata/single_download.py +++ b/src/calibre/gui2/metadata/single_download.py @@ -17,10 +17,12 @@ from Queue import Queue, Empty from io import BytesIO from PyQt4.Qt import (QStyledItemDelegate, QTextDocument, QRectF, QIcon, Qt, - QApplication, QDialog, QVBoxLayout, QLabel, QDialogButtonBox, QStyle, - QStackedWidget, QWidget, QTableView, QGridLayout, QFontInfo, QPalette, - QTimer, pyqtSignal, QAbstractTableModel, QVariant, QSize, QListView, - QPixmap, QAbstractListModel, QColor, QRect, QTextBrowser, QModelIndex) + QApplication, QDialog, QVBoxLayout, QLabel, + QDialogButtonBox, QStyle, QStackedWidget, QWidget, + QTableView, QGridLayout, QFontInfo, QPalette, QTimer, + pyqtSignal, QAbstractTableModel, QVariant, QSize, + QListView, QPixmap, QAbstractListModel, QColor, QRect, + QTextBrowser, QStringListModel) from PyQt4.QtWebKit import QWebView from calibre.customize.ui import metadata_plugins @@ -44,6 +46,8 @@ class RichTextDelegate(QStyledItemDelegate): # {{{ def __init__(self, parent=None, max_width=160): QStyledItemDelegate.__init__(self, parent) self.max_width = max_width + self.dummy_model = QStringListModel([' '], self) + self.dummy_index = self.dummy_model.index(0) def to_doc(self, index, option=None): doc = QTextDocument() @@ -66,7 +70,7 @@ class RichTextDelegate(QStyledItemDelegate): # {{{ return ans def paint(self, painter, option, index): - QStyledItemDelegate.paint(self, painter, option, QModelIndex()) + QStyledItemDelegate.paint(self, painter, option, self.dummy_index) painter.save() painter.setClipRect(QRectF(option.rect)) painter.translate(option.rect.topLeft()) diff --git a/src/calibre/gui2/preferences/adding.ui b/src/calibre/gui2/preferences/adding.ui index bd06470383..b98a476864 100644 --- a/src/calibre/gui2/preferences/adding.ui +++ b/src/calibre/gui2/preferences/adding.ui @@ -158,36 +158,6 @@ Author matching is exact. &Automatic Adding - - - - If set, this option will causes calibre to check if a file - being auto-added is already in the calibre library. - If it is, a message will pop up asking you whether - you want to add it anyway. - - - Check for &duplicates when auto-adding files - - - - - - - Specify a folder. Any files you put into this folder will be automatically added to calibre (restart required). - - - true - - - - - - - <b>WARNING:</b> Files in the above folder will be deleted after being added to calibre. - - - @@ -214,6 +184,36 @@ Author matching is exact. + + + + Specify a folder. Any files you put into this folder will be automatically added to calibre (restart required). + + + true + + + + + + + <b>WARNING:</b> Files in the above folder will be deleted after being added to calibre. + + + + + + + If set, this option will causes calibre to check if a file + being auto-added is already in the calibre library. + If it is, a message will pop up asking you whether + you want to add it anyway. + + + Check for &duplicates when auto-adding files + + + @@ -259,6 +259,19 @@ Author matching is exact. + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/src/calibre/gui2/preferences/coloring.py b/src/calibre/gui2/preferences/coloring.py index 831e658b59..4b867f347d 100644 --- a/src/calibre/gui2/preferences/coloring.py +++ b/src/calibre/gui2/preferences/coloring.py @@ -19,10 +19,12 @@ from calibre.gui2 import error_dialog from calibre.gui2.dialogs.template_dialog import TemplateDialog from calibre.gui2.metadata.single_download import RichTextDelegate from calibre.library.coloring import (Rule, conditionable_columns, - displayable_columns, rule_from_template) + displayable_columns, rule_from_template, color_row_key) from calibre.utils.localization import lang_map from calibre.utils.icu import lower +all_columns_string = _('All Columns') + class ConditionEditor(QWidget): # {{{ ACTION_MAP = { @@ -104,8 +106,8 @@ class ConditionEditor(QWidget): # {{{ self.column_box.addItem('', '') for key in sorted( conditionable_columns(fm), - key=sort_key): - self.column_box.addItem(key, key) + key=lambda(key): sort_key(fm[key]['name'])): + self.column_box.addItem(fm[key]['name'], key) self.column_box.setCurrentIndex(0) self.column_box.currentIndexChanged.connect(self.init_action_box) @@ -312,12 +314,11 @@ class RuleEditor(QDialog): # {{{ b.setSizeAdjustPolicy(b.AdjustToMinimumContentsLengthWithIcon) b.setMinimumContentsLength(15) - for key in sorted( - displayable_columns(fm), - key=sort_key): - name = fm[key]['name'] + for key in sorted(displayable_columns(fm), + key=lambda(k): sort_key(fm[k]['name']) if k != color_row_key else 0): + name = all_columns_string if key == color_row_key else fm[key]['name'] if name: - self.column_box.addItem(key, key) + self.column_box.addItem(name, key) self.column_box.setCurrentIndex(0) self.color_box.addItems(QColor.colorNames()) @@ -427,8 +428,11 @@ class RulesModel(QAbstractListModel): # {{{ col, rule = self.rules[row] except: return None - if role == Qt.DisplayRole: + if col == color_row_key: + col = all_columns_string + else: + col = self.fm[col]['name'] return self.rule_to_html(col, rule) if role == Qt.UserRole: return (col, rule) @@ -485,6 +489,7 @@ class RulesModel(QAbstractListModel): # {{{ def condition_to_html(self, condition): c, a, v = condition + c = self.fm[c]['name'] action_name = a for actions in ConditionEditor.ACTION_MAP.itervalues(): for trans, ac in actions: @@ -568,9 +573,9 @@ class EditRules(QWidget): # {{{ self.changed.emit() def add_rule(self): - d = RuleEditor(self.model.fm) - d.add_blank_condition() - self._add_rule(d) + d = RuleEditor(self.model.fm) + d.add_blank_condition() + self._add_rule(d) def add_advanced(self): td = TemplateDialog(self, '', mi=self.mi, fm=self.fm, color_field='') diff --git a/src/calibre/gui2/store/stores/publio_plugin.py b/src/calibre/gui2/store/stores/publio_plugin.py index 868496366c..eb00f231ea 100644 --- a/src/calibre/gui2/store/stores/publio_plugin.py +++ b/src/calibre/gui2/store/stores/publio_plugin.py @@ -60,9 +60,9 @@ class PublioStore(BasicStoreConfig, StorePlugin): series = ''.join(data.xpath('./div[@class="desc"]/div[@class="detailShortList"]/div[last()]/a/@title')) title = title + ' (seria ' + series + ')' author = ', '.join(data.xpath('./div[@class="desc"]/div[@class="detailShortList"]/div[@class="row"][1]/a/@title')) - price = ''.join(data.xpath('.//div[@class="priceBoxContener "]/div/ins/text()')) + price = ''.join(data.xpath('.//div[@class="priceBox tk-museo-slab"]/ins/text()')) if not price: - price = ''.join(data.xpath('.//div[@class="priceBoxContener "]/div/text()')) + price = ''.join(data.xpath('.//div[@class="priceBox tk-museo-slab"]/text()')).strip() formats = ', '.join(data.xpath('.//div[@class="formats"]/a/img/@alt')) counter -= 1 diff --git a/src/calibre/gui2/tag_browser/model.py b/src/calibre/gui2/tag_browser/model.py index c39026859a..2d6f40690b 100644 --- a/src/calibre/gui2/tag_browser/model.py +++ b/src/calibre/gui2/tag_browser/model.py @@ -8,11 +8,12 @@ __license__ = 'GPL v3' __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import traceback, cPickle, copy +import traceback, cPickle, copy, os from PyQt4.Qt import (QAbstractItemModel, QIcon, QVariant, QFont, Qt, QMimeData, QModelIndex, pyqtSignal, QObject) +from calibre.constants import config_dir from calibre.gui2 import NONE, gprefs, config, error_dialog from calibre.library.database2 import Tag from calibre.utils.config import tweaks @@ -213,6 +214,11 @@ class TagsModel(QAbstractItemModel): # {{{ for key in category_icon_map: iconmap[key] = QIcon(I(category_icon_map[key])) self.category_icon_map = TagsIcons(iconmap) + self.category_custom_icons = dict() + for k, v in gprefs['tags_browser_category_icons'].iteritems(): + icon = QIcon(os.path.join(config_dir, 'tb_icons', v)) + if len(icon.availableSizes()) > 0: + self.category_custom_icons[k] = icon self.categories_with_ratings = ['authors', 'series', 'publisher', 'tags'] self.icon_state_map = [None, QIcon(I('plus.png')), QIcon(I('plusplus.png')), QIcon(I('minus.png')), QIcon(I('minusminus.png'))] @@ -231,6 +237,23 @@ class TagsModel(QAbstractItemModel): # {{{ def gui_parent(self): return QObject.parent(self) + def set_custom_category_icon(self, key, path): + d = gprefs['tags_browser_category_icons'] + if path: + d[key] = path + self.category_custom_icons[key] = QIcon(os.path.join(config_dir, + 'tb_icons', path)) + else: + if key in d: + path = os.path.join(config_dir, 'tb_icons', d[key]) + try: + os.remove(path) + except: + pass + del d[key] + del self.category_custom_icons[key] + gprefs['tags_browser_category_icons'] = d + def reread_collapse_model(self, state_map, rebuild=True): if gprefs['tags_browser_collapse_at'] == 0: self.collapse_model = 'disable' @@ -304,13 +327,18 @@ class TagsModel(QAbstractItemModel): # {{{ continue is_gst = False if key.startswith('@') and key[1:] in gst: - tt = _(u'The grouped search term name is "{0}"').format(key[1:]) + tt = _(u'The grouped search term name is "{0}"').format(key) is_gst = True elif key == 'news': tt = '' else: tt = _(u'The lookup/search name is "{0}"').format(key) + if self.category_custom_icons.get(key, None) is None: + self.category_custom_icons[key] = ( + self.category_icon_map['gst'] if is_gst else + self.category_icon_map.get(key, self.category_icon_map['custom:'])) + if key.startswith('@'): path_parts = [p for p in key.split('.')] path = '' @@ -319,14 +347,12 @@ class TagsModel(QAbstractItemModel): # {{{ for i,p in enumerate(path_parts): path += p if path not in category_node_map: - icon = self.category_icon_map['gst'] if is_gst else \ - self.category_icon_map[key] node = self.create_node(parent=last_category_node, - data=p[1:] if i == 0 else p, - category_icon=icon, - tooltip=tt if path == key else path, - category_key=path, - icon_map=self.icon_state_map) + data=p[1:] if i == 0 else p, + category_icon=self.category_custom_icons[key], + tooltip=tt if path == key else path, + category_key=path, + icon_map=self.icon_state_map) last_category_node = node category_node_map[path] = node self.category_nodes.append(node) @@ -343,7 +369,7 @@ class TagsModel(QAbstractItemModel): # {{{ else: node = self.create_node(parent=self.root_item, data=self.categories[key], - category_icon=self.category_icon_map[key], + category_icon=self.category_custom_icons[key], tooltip=tt, category_key=key, icon_map=self.icon_state_map) node.is_gst = False @@ -504,6 +530,7 @@ class TagsModel(QAbstractItemModel): # {{{ if (not tag.is_hierarchical) and (in_uc or (fm['is_custom'] and fm['display'].get('is_names', False)) or not category_is_hierarchical or len(components) == 1): + tag.icon = self.category_custom_icons[key] n = self.create_node(parent=node_parent, data=tag, tooltip=tt, icon_map=self.icon_state_map) if tag.id_set is not None: @@ -540,6 +567,7 @@ class TagsModel(QAbstractItemModel): # {{{ t.is_hierarchical = \ '5state' if t.category != 'search' else '3state' t.name = comp + t.icon = self.category_custom_icons[key] node_parent = self.create_node(parent=node_parent, data=t, tooltip=tt, icon_map=self.icon_state_map) child_map[(comp,tag.category)] = node_parent diff --git a/src/calibre/gui2/tag_browser/view.py b/src/calibre/gui2/tag_browser/view.py index a9882a1a35..ac9a937b65 100644 --- a/src/calibre/gui2/tag_browser/view.py +++ b/src/calibre/gui2/tag_browser/view.py @@ -7,7 +7,7 @@ __license__ = 'GPL v3' __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import cPickle +import cPickle, os from functools import partial from itertools import izip @@ -15,9 +15,11 @@ from PyQt4.Qt import (QStyledItemDelegate, Qt, QTreeView, pyqtSignal, QSize, QIcon, QApplication, QMenu, QPoint, QModelIndex, QToolTip, QCursor, QDrag) +from calibre import sanitize_file_name_unicode +from calibre.constants import config_dir from calibre.gui2.tag_browser.model import (TagTreeItem, TAG_SEARCH_STATES, TagsModel) -from calibre.gui2 import config, gprefs +from calibre.gui2 import config, gprefs, choose_files, pixmap_to_data from calibre.utils.search_query_parser import saved_searches from calibre.utils.icu import sort_key @@ -296,6 +298,33 @@ class TagsView(QTreeView): # {{{ if not action: return try: + if action == 'set_icon': + try: + path = choose_files(self, 'choose_category_icon', + _('Change Icon for: %s')%key, filters=[ + ('Images', ['png', 'gif', 'jpg', 'jpeg'])], + all_files=False, select_only_single_file=True) + if path: + path = path[0] + p = QIcon(path).pixmap(QSize(128, 128)) + d = os.path.join(config_dir, 'tb_icons') + if not os.path.exists(d): + os.makedirs(d) + with open(os.path.join(d, 'icon_'+ + sanitize_file_name_unicode(key)+'.png'), 'wb') as f: + f.write(pixmap_to_data(p, format='PNG')) + path = os.path.basename(f.name) + self._model.set_custom_category_icon(key, unicode(path)) + self.recount() + except: + import traceback + traceback.print_exc() + return + if action == 'clear_icon': + self._model.set_custom_category_icon(key, None) + self.recount() + return + if action == 'edit_item': self.edit(index) return @@ -533,6 +562,12 @@ class TagsView(QTreeView): # {{{ partial(self.context_menu_handler, action='manage_searches', category=tag.name if tag else None)) + self.context_menu.addSeparator() + self.context_menu.addAction(_('Change category icon'), + partial(self.context_menu_handler, action='set_icon', key=key)) + self.context_menu.addAction(_('Restore default icon'), + partial(self.context_menu_handler, action='clear_icon', key=key)) + # Always show the user categories editor self.context_menu.addSeparator() if key.startswith('@') and \ @@ -551,6 +586,7 @@ class TagsView(QTreeView): # {{{ self.context_menu.addAction(_('Show all categories'), partial(self.context_menu_handler, action='defaults')) + m = self.context_menu.addMenu(_('Change sub-categorization scheme')) da = m.addAction(_('Disable'), partial(self.context_menu_handler, action='categorization', category='disable')) diff --git a/src/calibre/gui2/update.py b/src/calibre/gui2/update.py index 2a155547e6..40bbc78266 100644 --- a/src/calibre/gui2/update.py +++ b/src/calibre/gui2/update.py @@ -8,7 +8,7 @@ from PyQt4.Qt import (QThread, pyqtSignal, Qt, QUrl, QDialog, QGridLayout, import mechanize from calibre.constants import (__appname__, __version__, iswindows, isosx, - isportable) + isportable, is64bit) from calibre import browser, prints, as_unicode from calibre.utils.config import prefs from calibre.gui2 import config, dynamic, open_url @@ -19,6 +19,13 @@ URL = 'http://status.calibre-ebook.com/latest' NO_CALIBRE_UPDATE = '-0.0.0' VSEP = '|' +def get_download_url(): + which = ('portable' if isportable else 'windows' if iswindows + else 'osx' if isosx else 'linux') + if which == 'windows' and is64bit: + which += '64' + return 'http://calibre-ebook.com/download_' + which + def get_newest_version(): br = browser() req = mechanize.Request(URL) @@ -116,10 +123,7 @@ class UpdateNotification(QDialog): config.set('new_version_notification', bool(self.cb.isChecked())) def accept(self): - url = ('http://calibre-ebook.com/download_' + - ('portable' if isportable else 'windows' if iswindows - else 'osx' if isosx else 'linux')) - open_url(QUrl(url)) + open_url(QUrl(get_download_url())) QDialog.accept(self) diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 69704de1c7..6f6f202619 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -544,7 +544,7 @@ class DocumentView(QWebView): # {{{ self.goto_location_action.setMenu(self.goto_location_menu) self.grabGesture(Qt.SwipeGesture) - self.restore_fonts_action = QAction(_('Normal font size'), self) + self.restore_fonts_action = QAction(_('Default font size'), self) self.restore_fonts_action.setCheckable(True) self.restore_fonts_action.triggered.connect(self.restore_font_size) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 0ca35ebf46..cb1d978c0e 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -697,11 +697,11 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.view.shrink_fonts() def magnification_changed(self, val): - tt = _('Make font size %(which)s\nCurrent magnification: %(mag).1f') + tt = _('%(which)s font size\nCurrent magnification: %(mag).1f') self.action_font_size_larger.setToolTip( - tt %dict(which=_('larger'), mag=val)) + tt %dict(which=_('Increase'), mag=val)) self.action_font_size_smaller.setToolTip( - tt %dict(which=_('smaller'), mag=val)) + tt %dict(which=_('Decrease'), mag=val)) self.action_font_size_larger.setEnabled(self.view.multiplier < 3) self.action_font_size_smaller.setEnabled(self.view.multiplier > 0.2) diff --git a/src/calibre/gui2/viewer/main.ui b/src/calibre/gui2/viewer/main.ui index d6deb315b2..d6eb7e2fd9 100644 --- a/src/calibre/gui2/viewer/main.ui +++ b/src/calibre/gui2/viewer/main.ui @@ -198,7 +198,7 @@ :/images/font_size_larger.png:/images/font_size_larger.png - Font size larger + Increase font size @@ -207,7 +207,7 @@ :/images/font_size_smaller.png:/images/font_size_smaller.png - Font size smaller + Decrease font size diff --git a/src/calibre/library/catalogs/csv_xml.py b/src/calibre/library/catalogs/csv_xml.py index 49df903320..fd2bb5113b 100644 --- a/src/calibre/library/catalogs/csv_xml.py +++ b/src/calibre/library/catalogs/csv_xml.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -__license__ = 'GPL v3' +__license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' @@ -12,6 +12,7 @@ from calibre.customize import CatalogPlugin from calibre.library.catalogs import FIELDS from calibre.customize.conversion import DummyReporter + class CSV_XML(CatalogPlugin): 'CSV/XML catalog generator' @@ -22,27 +23,27 @@ class CSV_XML(CatalogPlugin): supported_platforms = ['windows', 'osx', 'linux'] author = 'Greg Riker' version = (1, 0, 0) - file_types = set(['csv','xml']) + file_types = set(['csv', 'xml']) cli_options = [ Option('--fields', - default = 'all', - dest = 'fields', - action = None, - help = _('The fields to output when cataloging books in the ' + default='all', + dest='fields', + action=None, + help=_('The fields to output when cataloging books in the ' 'database. Should be a comma-separated list of fields.\n' 'Available fields: %(fields)s,\n' 'plus user-created custom fields.\n' 'Example: %(opt)s=title,authors,tags\n' "Default: '%%default'\n" - "Applies to: CSV, XML output formats")%dict( + "Applies to: CSV, XML output formats") % dict( fields=', '.join(FIELDS), opt='--fields')), Option('--sort-by', - default = 'id', - dest = 'sort_by', - action = None, - help = _('Output field to sort on.\n' + default='id', + dest='sort_by', + action=None, + help=_('Output field to sort on.\n' 'Available fields: author_sort, id, rating, size, timestamp, title_sort\n' "Default: '%default'\n" "Applies to: CSV, XML output formats"))] @@ -97,7 +98,7 @@ class CSV_XML(CatalogPlugin): for entry in data: entry['ondevice'] = db.catalog_plugin_on_device_temp_mapping[entry['id']]['ondevice'] - fm = {x:db.field_metadata.get(x, {}) for x in fields} + fm = {x: db.field_metadata.get(x, {}) for x in fields} if self.fmt == 'csv': outfile = codecs.open(path_to_output, 'w', 'utf8') @@ -113,7 +114,7 @@ class CSV_XML(CatalogPlugin): outstr = [] for field in fields: if field.startswith('#'): - item = db.get_field(entry['id'],field,index_is_id=True) + item = db.get_field(entry['id'], field, index_is_id=True) elif field == 'library_name': item = current_library elif field == 'title_sort': @@ -129,7 +130,7 @@ class CSV_XML(CatalogPlugin): for format in item: fmt_list.append(format.rpartition('.')[2].lower()) item = ', '.join(fmt_list) - elif field in ['authors','tags']: + elif field in ['authors', 'tags']: item = ', '.join(item) elif field == 'isbn': # Could be 9, 10 or 13 digits @@ -137,20 +138,20 @@ class CSV_XML(CatalogPlugin): elif field in ['pubdate', 'timestamp']: item = isoformat(item) elif field == 'comments': - item = item.replace(u'\r\n',u' ') - item = item.replace(u'\n',u' ') + item = item.replace(u'\r\n', u' ') + item = item.replace(u'\n', u' ') elif fm.get(field, {}).get('datatype', None) == 'rating' and item: - item = u'%.2g'%(item/2.0) + item = u'%.2g' % (item / 2.0) # Convert HTML to markdown text if type(item) is unicode: - opening_tag = re.search('<(\w+)(\x20|>)',item) + opening_tag = re.search('<(\w+)(\x20|>)', item) if opening_tag: closing_tag = re.search('<\/%s>$' % opening_tag.group(1), item) if closing_tag: item = html2text(item) - outstr.append(u'"%s"' % unicode(item).replace('"','""')) + outstr.append(u'"%s"' % unicode(item).replace('"', '""')) outfile.write(u','.join(outstr) + u'\n') outfile.close() @@ -165,14 +166,14 @@ class CSV_XML(CatalogPlugin): for field in fields: if field.startswith('#'): - val = db.get_field(r['id'],field,index_is_id=True) + val = db.get_field(r['id'], field, index_is_id=True) if not isinstance(val, (str, unicode)): val = unicode(val) - item = getattr(E, field.replace('#','_'))(val) + item = getattr(E, field.replace('#', '_'))(val) record.append(item) for field in ('id', 'uuid', 'publisher', 'rating', 'size', - 'isbn','ondevice', 'identifiers'): + 'isbn', 'ondevice', 'identifiers'): if field in fields: val = r[field] if not val: @@ -180,7 +181,7 @@ class CSV_XML(CatalogPlugin): if not isinstance(val, (str, unicode)): if (fm.get(field, {}).get('datatype', None) == 'rating' and val): - val = u'%.2g'%(val/2.0) + val = u'%.2g' % (val / 2.0) val = unicode(val) item = getattr(E, field)(val) record.append(item) @@ -227,4 +228,3 @@ class CSV_XML(CatalogPlugin): with open(path_to_output, 'w') as f: f.write(etree.tostring(root, encoding='utf-8', xml_declaration=True, pretty_print=True)) - diff --git a/src/calibre/library/catalogs/epub_mobi.py b/src/calibre/library/catalogs/epub_mobi.py index a50c7ba861..9a7e728220 100644 --- a/src/calibre/library/catalogs/epub_mobi.py +++ b/src/calibre/library/catalogs/epub_mobi.py @@ -3,7 +3,7 @@ from __future__ import (unicode_literals, division, absolute_import, print_function) -__license__ = 'GPL v3' +__license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' @@ -21,6 +21,7 @@ from calibre.utils.localization import get_lang Option = namedtuple('Option', 'option, default, dest, action, help') + class EPUB_MOBI(CatalogPlugin): 'ePub catalog generator' @@ -30,29 +31,29 @@ class EPUB_MOBI(CatalogPlugin): minimum_calibre_version = (0, 7, 40) author = 'Greg Riker' version = (1, 0, 0) - file_types = set(['azw3','epub','mobi']) + file_types = set(['azw3', 'epub', 'mobi']) THUMB_SMALLEST = "1.0" THUMB_LARGEST = "2.0" - cli_options = [Option('--catalog-title', # {{{ - default = 'My Books', - dest = 'catalog_title', - action = None, - help = _('Title of generated catalog used as title in metadata.\n' + cli_options = [Option('--catalog-title', # {{{ + default='My Books', + dest='catalog_title', + action=None, + help=_('Title of generated catalog used as title in metadata.\n' "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--cross-reference-authors', default=False, dest='cross_reference_authors', - action = 'store_true', + action='store_true', help=_("Create cross-references in Authors section for books with multiple authors.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--debug-pipeline', default=None, dest='debug_pipeline', - action = None, + action=None, help=_("Save the output from different stages of the conversion " "pipeline to the specified " "directory. Useful if you are unsure at which stage " @@ -62,7 +63,7 @@ class EPUB_MOBI(CatalogPlugin): Option('--exclude-genre', default='\[.+\]|^\+$', dest='exclude_genre', - action = None, + action=None, help=_("Regex describing tags to exclude as genres.\n" "Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and '+', the default tag for read books.\n" "Applies to: AZW3, ePub, MOBI output formats")), @@ -82,63 +83,63 @@ class EPUB_MOBI(CatalogPlugin): Option('--generate-authors', default=False, dest='generate_authors', - action = 'store_true', + action='store_true', help=_("Include 'Authors' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--generate-descriptions', default=False, dest='generate_descriptions', - action = 'store_true', + action='store_true', help=_("Include 'Descriptions' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--generate-genres', default=False, dest='generate_genres', - action = 'store_true', + action='store_true', help=_("Include 'Genres' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--generate-titles', default=False, dest='generate_titles', - action = 'store_true', + action='store_true', help=_("Include 'Titles' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--generate-series', default=False, dest='generate_series', - action = 'store_true', + action='store_true', help=_("Include 'Series' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--generate-recently-added', default=False, dest='generate_recently_added', - action = 'store_true', + action='store_true', help=_("Include 'Recently Added' section in catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--genre-source-field', default='Tags', dest='genre_source_field', - action = None, + action=None, help=_("Source field for Genres section.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--header-note-source-field', default='', dest='header_note_source_field', - action = None, + action=None, help=_("Custom field containing note text to insert in Description header.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--merge-comments-rule', default='::', dest='merge_comments_rule', - action = None, + action=None, help=_("#:[before|after]:[True|False] specifying:\n" " Custom field containing notes to merge with Comments\n" " [before|after] Placement of notes with respect to Comments\n" @@ -148,7 +149,7 @@ class EPUB_MOBI(CatalogPlugin): Option('--output-profile', default=None, dest='output_profile', - action = None, + action=None, help=_("Specifies the output profile. In some cases, an output profile is required to optimize the catalog for the device. For example, 'kindle' or 'kindle_dx' creates a structured Table of Contents with Sections and Articles.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), @@ -164,14 +165,14 @@ class EPUB_MOBI(CatalogPlugin): Option('--use-existing-cover', default=False, dest='use_existing_cover', - action = 'store_true', + action='store_true', help=_("Replace existing cover when generating the catalog.\n" "Default: '%default'\n" "Applies to: AZW3, ePub, MOBI output formats")), Option('--thumb-width', default='1.0', dest='thumb_width', - action = None, + action=None, help=_("Size hint (in inches) for book covers in catalog.\n" "Range: 1.0 - 2.0\n" "Default: '%default'\n" @@ -199,7 +200,7 @@ class EPUB_MOBI(CatalogPlugin): if opts.connected_device['name'] and 'kindle' in opts.connected_device['name'].lower(): opts.connected_kindle = True if opts.connected_device['serial'] and \ - opts.connected_device['serial'][:4] in ['B004','B005']: + opts.connected_device['serial'][:4] in ['B004', 'B005']: op = "kindle_dx" else: op = "kindle" @@ -209,7 +210,7 @@ class EPUB_MOBI(CatalogPlugin): opts.output_profile = op opts.basename = "Catalog" - opts.cli_environment = not hasattr(opts,'sync') + opts.cli_environment = not hasattr(opts, 'sync') # Hard-wired to always sort descriptions by author, with series after non-series opts.sort_descriptions_by_author = True @@ -278,14 +279,14 @@ class EPUB_MOBI(CatalogPlugin): opts.generate_genres = True opts.generate_recently_added = True opts.generate_descriptions = True - sections_list = ['Authors','Titles','Series','Genres','Recently Added','Descriptions'] + sections_list = ['Authors', 'Titles', 'Series', 'Genres', 'Recently Added', 'Descriptions'] else: opts.log.warn('\n*** No enabled Sections, terminating catalog generation ***') - return ["No Included Sections","No enabled Sections.\nCheck E-book options tab\n'Included sections'\n"] + return ["No Included Sections", "No enabled Sections.\nCheck E-book options tab\n'Included sections'\n"] if opts.fmt == 'mobi' and sections_list == ['Descriptions']: warning = _("\n*** Adding 'By Authors' Section required for MOBI output ***") opts.log.warn(warning) - sections_list.insert(0,'Authors') + sections_list.insert(0, 'Authors') opts.generate_authors = True opts.log(u" Sections: %s" % ', '.join(sections_list)) @@ -294,14 +295,14 @@ class EPUB_MOBI(CatalogPlugin): # Limit thumb_width to 1.0" - 2.0" try: if float(opts.thumb_width) < float(self.THUMB_SMALLEST): - log.warning("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width,self.THUMB_SMALLEST)) + log.warning("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width, self.THUMB_SMALLEST)) opts.thumb_width = self.THUMB_SMALLEST if float(opts.thumb_width) > float(self.THUMB_LARGEST): - log.warning("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width,self.THUMB_LARGEST)) + log.warning("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width, self.THUMB_LARGEST)) opts.thumb_width = self.THUMB_LARGEST opts.thumb_width = "%.2f" % float(opts.thumb_width) except: - log.error("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width,self.THUMB_SMALLEST)) + log.error("coercing thumb_width from '%s' to '%s'" % (opts.thumb_width, self.THUMB_SMALLEST)) opts.thumb_width = "1.0" # eval prefix_rules if passed from command line @@ -331,13 +332,13 @@ class EPUB_MOBI(CatalogPlugin): keys.sort() build_log.append(" opts:") for key in keys: - if key in ['catalog_title','author_clip','connected_kindle','creator', - 'cross_reference_authors','description_clip','exclude_book_marker', - 'exclude_genre','exclude_tags','exclusion_rules', 'fmt', - 'genre_source_field', 'header_note_source_field','merge_comments_rule', - 'output_profile','prefix_rules','read_book_marker', - 'search_text','sort_by','sort_descriptions_by_author','sync', - 'thumb_width','use_existing_cover','wishlist_tag']: + if key in ['catalog_title', 'author_clip', 'connected_kindle', 'creator', + 'cross_reference_authors', 'description_clip', 'exclude_book_marker', + 'exclude_genre', 'exclude_tags', 'exclusion_rules', 'fmt', + 'genre_source_field', 'header_note_source_field', 'merge_comments_rule', + 'output_profile', 'prefix_rules', 'read_book_marker', + 'search_text', 'sort_by', 'sort_descriptions_by_author', 'sync', + 'thumb_width', 'use_existing_cover', 'wishlist_tag']: build_log.append(" %s: %s" % (key, repr(opts_dict[key]))) if opts.verbose: log('\n'.join(line for line in build_log)) @@ -370,8 +371,8 @@ class EPUB_MOBI(CatalogPlugin): """ GENERATE_DEBUG_EPUB = False if GENERATE_DEBUG_EPUB: - catalog_debug_path = os.path.join(os.path.expanduser('~'),'Desktop','Catalog debug') - setattr(opts,'debug_pipeline',os.path.expanduser(catalog_debug_path)) + catalog_debug_path = os.path.join(os.path.expanduser('~'), 'Desktop', 'Catalog debug') + setattr(opts, 'debug_pipeline', os.path.expanduser(catalog_debug_path)) dp = getattr(opts, 'debug_pipeline', None) if dp is not None: @@ -381,11 +382,13 @@ class EPUB_MOBI(CatalogPlugin): if opts.output_profile and opts.output_profile.startswith("kindle"): recommendations.append(('output_profile', opts.output_profile, OptionRecommendation.HIGH)) - recommendations.append(('book_producer',opts.output_profile, + recommendations.append(('book_producer', opts.output_profile, OptionRecommendation.HIGH)) if opts.fmt == 'mobi': recommendations.append(('no_inline_toc', True, OptionRecommendation.HIGH)) + recommendations.append(('verbose', 2, + OptionRecommendation.HIGH)) # Use existing cover or generate new cover cpath = None @@ -432,14 +435,13 @@ class EPUB_MOBI(CatalogPlugin): from calibre.ebooks.epub import initialize_container from calibre.ebooks.tweak import zip_rebuilder from calibre.utils.zipfile import ZipFile - input_path = os.path.join(catalog_debug_path,'input') - epub_shell = os.path.join(catalog_debug_path,'epub_shell.zip') + input_path = os.path.join(catalog_debug_path, 'input') + epub_shell = os.path.join(catalog_debug_path, 'epub_shell.zip') initialize_container(epub_shell, opf_name='content.opf') with ZipFile(epub_shell, 'r') as zf: zf.extractall(path=input_path) os.remove(epub_shell) - zip_rebuilder(input_path, os.path.join(catalog_debug_path,'input.epub')) + zip_rebuilder(input_path, os.path.join(catalog_debug_path, 'input.epub')) # returns to gui2.actions.catalog:catalog_generated() return catalog.error - diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py index fa38b2ba83..65ed89da5c 100644 --- a/src/calibre/library/catalogs/epub_mobi_builder.py +++ b/src/calibre/library/catalogs/epub_mobi_builder.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -__license__ = 'GPL v3' +__license__ = 'GPL v3' __copyright__ = '2010, Greg Riker' import datetime, htmlentitydefs, os, platform, re, shutil, unicodedata, zlib @@ -25,6 +25,7 @@ from calibre.utils.icu import capitalize, collation_order, sort_key from calibre.utils.magick.draw import thumbnail from calibre.utils.zipfile import ZipFile + class CatalogBuilder(object): ''' Generates catalog source files from calibre database @@ -50,7 +51,7 @@ class CatalogBuilder(object): # Multiple numbers create 'Last x days', 'x to y days ago' ... # e.g, [7,15,30,60] or [30] # [] = No date ranges added - DATE_RANGE=[30] + DATE_RANGE = [30] # Text used in generated catalog for title section with other-than-ASCII leading letter SYMBOLS = _('Symbols') @@ -98,7 +99,6 @@ class CatalogBuilder(object): else: return ' ' - def __init__(self, db, _opts, plugin, report_progress=DummyReporter(), stylesheet="content/stylesheet.css", @@ -120,11 +120,13 @@ class CatalogBuilder(object): _opts.output_profile and _opts.output_profile.startswith("kindle")) else False + self.all_series = set() self.authors = None self.bookmarked_books = None self.bookmarked_books_by_date_read = None self.books_by_author = None self.books_by_date_range = None + self.books_by_description = [] self.books_by_month = None self.books_by_series = None self.books_by_title = None @@ -135,11 +137,12 @@ class CatalogBuilder(object): self.generate_recently_read = False self.genres = [] self.genre_tags_dict = \ - self.filter_genre_tags(max_len = 245 - len("%s/Genre_.html" % self.content_dir)) \ + self.filter_genre_tags(max_len=245 - len("%s/Genre_.html" % self.content_dir)) \ if self.opts.generate_genres else None self.html_filelist_1 = [] self.html_filelist_2 = [] - self.merge_comments_rule = dict(zip(['field','position','hr'], + self.individual_authors = None + self.merge_comments_rule = dict(zip(['field', 'position', 'hr'], _opts.merge_comments_rule.split(':'))) self.ncx_soup = None self.output_profile = self.get_output_profile(_opts) @@ -154,6 +157,7 @@ class CatalogBuilder(object): self.total_steps = 6.0 self.use_series_prefix_in_titles_section = False + self.dump_custom_fields() self.books_to_catalog = self.fetch_books_to_catalog() self.compute_total_steps() self.calculate_thumbnail_dimensions() @@ -202,7 +206,7 @@ class CatalogBuilder(object): else: index = book['series_index'] integer = int(index) - fraction = index-integer + fraction = index - integer series_index = '%04d%s' % (integer, str('%0.4f' % fraction).lstrip('0')) key = '%s ~%s %s' % (self._kf_author_to_author_sort(book['author']), self.generate_sort_title(book['series']), @@ -228,7 +232,7 @@ class CatalogBuilder(object): else: index = book['series_index'] integer = int(index) - fraction = index-integer + fraction = index - integer series_index = u'%04d%s' % (integer, str(u'%0.4f' % fraction).lstrip(u'0')) fs = u'{:<%d}~{!s}{!s}' % longest_author_sort key = fs.format(capitalize(book['author_sort']), @@ -239,7 +243,7 @@ class CatalogBuilder(object): def _kf_books_by_series_sorter(self, book): index = book['series_index'] integer = int(index) - fraction = index-integer + fraction = index - integer series_index = '%04d%s' % (integer, str('%0.4f' % fraction).lstrip('0')) key = '%s %s' % (self.generate_sort_title(book['series']), series_index) @@ -335,8 +339,8 @@ class CatalogBuilder(object): self.thumb_height = self.thumb_width * 1.33 if 'kindle' in x.short_name and self.opts.fmt == 'mobi': # Kindle DPI appears to be off by a factor of 2 - self.thumb_width = self.thumb_width/2 - self.thumb_height = self.thumb_height/2 + self.thumb_width = self.thumb_width / 2 + self.thumb_height = self.thumb_height / 2 break if self.opts.verbose: self.opts.log(" Thumbnails:") @@ -395,7 +399,7 @@ class CatalogBuilder(object): self.opts.log.info(' creating thumbnail archive, thumb_width: %1.2f"' % float(self.opts.thumb_width)) with ZipFile(self.thumbs_path, mode='w') as zfw: - zfw.writestr("Catalog Thumbs Archive",'') + zfw.writestr("Catalog Thumbs Archive", '') else: try: with ZipFile(self.thumbs_path, mode='r') as zfr: @@ -410,9 +414,9 @@ class CatalogBuilder(object): if float(cached_thumb_width) != float(self.opts.thumb_width): self.opts.log.warning(" invalidating cache at '%s'" % self.thumbs_path) self.opts.log.warning(' thumb_width changed: %1.2f" => %1.2f"' % - (float(cached_thumb_width),float(self.opts.thumb_width))) + (float(cached_thumb_width), float(self.opts.thumb_width))) with ZipFile(self.thumbs_path, mode='w') as zfw: - zfw.writestr("Catalog Thumbs Archive",'') + zfw.writestr("Catalog Thumbs Archive", '') else: self.opts.log.info(' existing thumb cache at %s, cached_thumb_width: %1.2f"' % (self.thumbs_path, float(cached_thumb_width))) @@ -447,7 +451,7 @@ class CatalogBuilder(object): hits.remove(amp) for hit in hits: name = hit[1:-1] - if htmlentitydefs.name2codepoint.has_key(name): + if htmlentitydefs.name2codepoint in name: s = s.replace(hit, unichr(htmlentitydefs.name2codepoint[name])) s = s.replace(amp, "&") return s @@ -468,17 +472,17 @@ class CatalogBuilder(object): self.create_catalog_directory_structure() catalog_resources = P("catalog") - files_to_copy = [('','DefaultCover.jpg'), - ('content','stylesheet.css')] + files_to_copy = [('', 'DefaultCover.jpg'), + ('content', 'stylesheet.css')] if self.generate_for_kindle_mobi: - files_to_copy.extend([('images','mastheadImage.gif')]) + files_to_copy.extend([('images', 'mastheadImage.gif')]) for file in files_to_copy: if file[0] == '': - shutil.copy(os.path.join(catalog_resources,file[1]), + shutil.copy(os.path.join(catalog_resources, file[1]), self.catalog_path) else: - shutil.copy(os.path.join(catalog_resources,file[1]), + shutil.copy(os.path.join(catalog_resources, file[1]), os.path.join(self.catalog_path, file[0])) if self.generate_for_kindle_mobi: @@ -530,14 +534,14 @@ class CatalogBuilder(object): authors = [(record['author'], record['author_sort']) for record in books_by_author] current_author = authors[0] - for (i,author) in enumerate(authors): + for (i, author) in enumerate(authors): if author != current_author and i: if author[0] == current_author[0]: if self.opts.fmt == 'mobi': # Exit if building MOBI error_msg = _("

    Inconsistent Author Sort values for Author
    " + "'{!s}':

    ".format(author[0]) + - "

    {!s} != {!s}

    ".format(author[1],current_author[1]) + + "

    {!s} != {!s}

    ".format(author[1], current_author[1]) + "

    Unable to build MOBI catalog.
    " + "Select all books by '{!s}', apply correct Author Sort value in Edit Metadata dialog, then rebuild the catalog.\n

    ".format(author[0])) @@ -553,7 +557,7 @@ class CatalogBuilder(object): self.error.append('Author Sort mismatch') error_msg = _("Warning: Inconsistent Author Sort values for Author '{!s}':\n".format(author[0]) + - " {!s} != {!s}\n".format(author[1],current_author[1])) + " {!s} != {!s}\n".format(author[1], current_author[1])) self.opts.log.warn('\n*** Metadata warning ***') self.opts.log.warn(error_msg) self.error.append(error_msg) @@ -576,7 +580,7 @@ class CatalogBuilder(object): """ def _log_prefix_rule_match_info(rule, record, matched): self.opts.log.info(" %s '%s' by %s (%s: '%s' contains '%s')" % - (rule['prefix'],record['title'], + (rule['prefix'], record['title'], record['authors'][0], rule['name'], self.db.metadata_for_field(rule['field'])['name'], matched)) @@ -585,10 +589,10 @@ class CatalogBuilder(object): for rule in self.prefix_rules: # Literal comparison for Tags field if rule['field'].lower() == 'tags': - if rule['pattern'].lower() in map(unicode.lower,record['tags']): - if self.opts.verbose: + if rule['pattern'].lower() in map(unicode.lower, record['tags']): + if self.DEBUG and self.opts.verbose: self.opts.log.info(" %s '%s' by %s (%s: Tags includes '%s')" % - (rule['prefix'],record['title'], + (rule['prefix'], record['title'], record['authors'][0], rule['name'], rule['pattern'])) return rule['prefix'] @@ -602,7 +606,7 @@ class CatalogBuilder(object): if field_contents == '': field_contents = None - if (self.db.metadata_for_field(rule['field'])['datatype'] == 'bool' and + if (self.db.metadata_for_field(rule['field'])['datatype'] == 'bool' and field_contents is None): # Handle condition where field is a bool and contents is None, # which is displayed as No @@ -616,7 +620,7 @@ class CatalogBuilder(object): try: if re.search(rule['pattern'], unicode(field_contents), re.IGNORECASE) is not None: - if self.opts.verbose: + if self.DEBUG: _log_prefix_rule_match_info(rule, record, field_contents) return rule['prefix'] except: @@ -624,12 +628,24 @@ class CatalogBuilder(object): self.opts.log.error("pattern failed to compile: %s" % rule['pattern']) pass elif field_contents is None and rule['pattern'] == 'None': - if self.opts.verbose: + if self.DEBUG: _log_prefix_rule_match_info(rule, record, field_contents) return rule['prefix'] return None + def dump_custom_fields(self): + """ + Dump custom field mappings for debugging + """ + if self.opts.verbose: + self.opts.log.info(" Custom fields:") + all_custom_fields = self.db.custom_field_keys() + for cf in all_custom_fields: + self.opts.log.info(" %-20s %-20s %s" % + (cf, "'%s'" % self.db.metadata_for_field(cf)['name'], + self.db.metadata_for_field(cf)['datatype'])) + def establish_equivalencies(self, item_list, key=None): """ Return icu equivalent sort letter. @@ -647,9 +663,9 @@ class CatalogBuilder(object): # Hack to force the cataloged leading letter to be # an unadorned character if the accented version sorts before the unaccented exceptions = { - u'Ä':u'A', - u'Ö':u'O', - u'Ü':u'U' + u'Ä': u'A', + u'Ö': u'O', + u'Ü': u'U' } if key is not None: @@ -697,7 +713,7 @@ class CatalogBuilder(object): print(" establish_equivalencies():") if key: for idx, item in enumerate(item_list): - print(" %s %s" % (cl_list[idx],item[sort_field])) + print(" %s %s" % (cl_list[idx], item[sort_field])) else: print(" %s %s" % (cl_list[idx], item)) @@ -716,7 +732,8 @@ class CatalogBuilder(object): Outputs: books_by_author: database, sorted by author - authors: list of unique authors + authors: list of book authors. Two credited authors are considered an + individual entity error: author_sort mismatches Return: @@ -728,6 +745,13 @@ class CatalogBuilder(object): books_by_author = list(self.books_to_catalog) self.detect_author_sort_mismatches(books_by_author) + + # Assumes books_by_title already populated + # init books_by_description before relisting multiple authors + if self.opts.generate_descriptions: + books_by_description = list(books_by_author) if self.opts.sort_descriptions_by_author \ + else list(self.books_by_title) + if self.opts.cross_reference_authors: books_by_author = self.relist_multiple_authors(books_by_author) @@ -737,16 +761,20 @@ class CatalogBuilder(object): asl = [i['author_sort'] for i in books_by_author] las = max(asl, key=len) + if self.opts.generate_descriptions: + self.books_by_description = sorted(books_by_description, + key=lambda x: sort_key(self._kf_books_by_author_sorter_author_sort(x, len(las)))) + books_by_author = sorted(books_by_author, key=lambda x: sort_key(self._kf_books_by_author_sorter_author_sort(x, len(las)))) if self.DEBUG and self.opts.verbose: tl = [i['title'] for i in books_by_author] lt = max(tl, key=len) - fs = '{:<6}{:<%d} {:<%d} {!s}' % (len(lt),len(las)) - print(fs.format('','Title','Author','Series')) + fs = '{:<6}{:<%d} {:<%d} {!s}' % (len(lt), len(las)) + print(fs.format('', 'Title', 'Author', 'Series')) for i in books_by_author: - print(fs.format('', i['title'],i['author_sort'],i['series'])) + print(fs.format('', i['title'], i['author_sort'], i['series'])) # Build the unique_authors set from existing data authors = [(record['author'], capitalize(record['author_sort'])) for record in books_by_author] @@ -758,7 +786,8 @@ class CatalogBuilder(object): current_author = authors[0] multiple_authors = False unique_authors = [] - for (i,author) in enumerate(authors): + individual_authors = set() + for (i, author) in enumerate(authors): if author != current_author: # Note that current_author and author are tuples: (friendly, sort) multiple_authors = True @@ -768,7 +797,7 @@ class CatalogBuilder(object): books_by_current_author)) current_author = author books_by_current_author = 1 - elif i==0 and len(authors) == 1: + elif i == 0 and len(authors) == 1: # Allow for single-book lists unique_authors.append((current_author[0], icu_title(current_author[1]), books_by_current_author)) @@ -780,14 +809,23 @@ class CatalogBuilder(object): unique_authors.append((current_author[0], icu_title(current_author[1]), books_by_current_author)) + self.authors = list(unique_authors) + self.books_by_author = books_by_author + + for ua in unique_authors: + for ia in ua[0].replace(' & ', ' & ').split(' & '): + individual_authors.add(ia) + self.individual_authors = list(individual_authors) + if self.DEBUG and self.opts.verbose: self.opts.log.info("\nfetch_books_by_author(): %d unique authors" % len(unique_authors)) for author in unique_authors: self.opts.log.info((u" %-50s %-25s %2d" % (author[0][0:45], author[1][0:20], author[2])).encode('utf-8')) + self.opts.log.info("\nfetch_books_by_author(): %d individual authors" % len(individual_authors)) + for author in sorted(individual_authors): + self.opts.log.info("%s" % author) - self.authors = unique_authors - self.books_by_author = books_by_author return True def fetch_books_by_title(self): @@ -869,6 +907,7 @@ class CatalogBuilder(object): this_title['title'] = self.convert_html_entities(record['title']) if record['series']: this_title['series'] = record['series'] + self.all_series.add(this_title['series']) this_title['series_index'] = record['series_index'] else: this_title['series'] = None @@ -969,11 +1008,11 @@ class CatalogBuilder(object): index_is_id=True) if notes: if field_md['datatype'] == 'text': - if isinstance(notes,list): + if isinstance(notes, list): notes = ' · '.join(notes) elif field_md['datatype'] == 'datetime': - notes = format_date(notes,'dd MMM yyyy') - this_title['notes'] = {'source':field_md['name'],'content':notes} + notes = format_date(notes, 'dd MMM yyyy') + this_title['notes'] = {'source': field_md['name'], 'content': notes} return this_title @@ -1000,7 +1039,7 @@ class CatalogBuilder(object): data = self.plugin.search_sort_db(self.db, self.opts) data = self.process_exclusions(data) - if self.opts.verbose and self.prefix_rules: + if self.prefix_rules and self.DEBUG: self.opts.log.info(" Added prefixes:") # Populate this_title{} from data[{},{}] @@ -1042,6 +1081,7 @@ class CatalogBuilder(object): def initialize(self, save_template): self._save_template = save_template self.SUPPORTS_SUB_DIRS = True + def save_template(self): return self._save_template @@ -1069,8 +1109,8 @@ class CatalogBuilder(object): if bookmark_extension: for vol in storage: - bkmk_path = path_map[id]['path'].replace(os.path.abspath('/'),vol) - bkmk_path = bkmk_path.replace('bookmark',bookmark_extension) + bkmk_path = path_map[id]['path'].replace(os.path.abspath('/'), vol) + bkmk_path = bkmk_path.replace('bookmark', bookmark_extension) if os.path.exists(bkmk_path): path_map[id] = bkmk_path book_ext[id] = book_extension @@ -1109,14 +1149,14 @@ class CatalogBuilder(object): bookmark_ext = path_map[id].rpartition('.')[2] myBookmark = Bookmark(path_map[id], id, book_ext[id], bookmark_ext) try: - book['percent_read'] = min(float(100*myBookmark.last_read / myBookmark.book_length),100) + book['percent_read'] = min(float(100 * myBookmark.last_read / myBookmark.book_length), 100) except: book['percent_read'] = 0 - dots = int((book['percent_read'] + 5)/10) + dots = int((book['percent_read'] + 5) / 10) dot_string = self.SYMBOL_PROGRESS_READ * dots empty_dots = self.SYMBOL_PROGRESS_UNREAD * (10 - dots) - book['reading_progress'] = '%s%s' % (dot_string,empty_dots) - bookmarks[id] = ((myBookmark,book)) + book['reading_progress'] = '%s%s' % (dot_string, empty_dots) + bookmarks[id] = ((myBookmark, book)) self.bookmarked_books = bookmarks @@ -1142,7 +1182,7 @@ class CatalogBuilder(object): else: yield tag - ans = '%s%d %s:\n' % (' ' * indent, len(tags), header) + ans = '%s%d %s:\n' % (' ' * indent, len(tags), header) ans += ' ' * (indent + 1) out_str = '' sorted_tags = sorted(tags, key=sort_key) @@ -1167,11 +1207,11 @@ class CatalogBuilder(object): clipped to max_len """ - normalized = massaged = re.sub('\s','',ascii_text(tag).lower()) - if re.search('\W',normalized): + normalized = massaged = re.sub('\s', '', ascii_text(tag).lower()) + if re.search('\W', normalized): normalized = '' for c in massaged: - if re.search('\W',c): + if re.search('\W', c): normalized += self.generate_unicode_name(c) else: normalized += c @@ -1190,11 +1230,11 @@ class CatalogBuilder(object): else: # Validate custom field is usable as a genre source field_md = self.db.metadata_for_field(self.opts.genre_source_field) - if not field_md['datatype'] in ['enumeration','text']: + if not field_md['datatype'] in ['enumeration', 'text']: all_custom_fields = self.db.custom_field_keys() eligible_custom_fields = [] for cf in all_custom_fields: - if self.db.metadata_for_field(cf)['datatype'] in ['enumeration','text']: + if self.db.metadata_for_field(cf)['datatype'] in ['enumeration', 'text']: eligible_custom_fields.append(cf) self.opts.log.error("Custom genre_source_field must be either:\n" " 'Comma separated text, like tags, shown in the browser',\n" @@ -1224,7 +1264,7 @@ class CatalogBuilder(object): normalized_tags.append(_normalize_tag(tag, max_len)) friendly_tags.append(tag) - genre_tags_dict = dict(zip(friendly_tags,normalized_tags)) + genre_tags_dict = dict(zip(friendly_tags, normalized_tags)) # Test for multiple genres resolving to same normalized form normalized_set = set(normalized_tags) @@ -1286,7 +1326,7 @@ class CatalogBuilder(object): massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)) # Replace '&' with '&' - massaged = re.sub("&","&", massaged) + massaged = re.sub("&", "&", massaged) if massaged.strip() and dest: #print traceback.print_stack(limit=3) @@ -1311,16 +1351,16 @@ class CatalogBuilder(object): if self.opts.fmt == 'mobi': codeTag = Tag(soup, "code") if prefix_char is None: - codeTag.insert(0,NavigableString(' ')) + codeTag.insert(0, NavigableString(' ')) else: - codeTag.insert(0,NavigableString(prefix_char)) + codeTag.insert(0, NavigableString(prefix_char)) return codeTag else: spanTag = Tag(soup, "span") spanTag['class'] = "prefix" if prefix_char is None: prefix_char = " " - spanTag.insert(0,NavigableString(prefix_char)) + spanTag.insert(0, NavigableString(prefix_char)) return spanTag def generate_author_anchor(self, author): @@ -1335,7 +1375,7 @@ class CatalogBuilder(object): Return: (str): asciized version of author """ - return re.sub("\W","", ascii_text(author)) + return re.sub("\W", "", ascii_text(author)) def generate_format_args(self, book): """ Generate the format args for template substitution. @@ -1399,11 +1439,11 @@ class CatalogBuilder(object): current_letter = '' current_series = None # Establish initial letter equivalencies - sort_equivalents = self.establish_equivalencies(self.books_by_author,key='author_sort') + sort_equivalents = self.establish_equivalencies(self.books_by_author, key='author_sort') for idx, book in enumerate(self.books_by_author): book_count += 1 - if self.letter_or_symbol(sort_equivalents[idx]) != current_letter : + if self.letter_or_symbol(sort_equivalents[idx]) != current_letter: # Start a new letter with Index letter if divOpeningTag is not None: divTag.insert(dtc, divOpeningTag) @@ -1427,13 +1467,13 @@ class CatalogBuilder(object): current_letter = self.letter_or_symbol(sort_equivalents[idx]) if current_letter == self.SYMBOLS: aTag['id'] = self.SYMBOLS + '_authors' - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(self.SYMBOLS)) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(self.SYMBOLS)) else: aTag['id'] = self.generate_unicode_name(current_letter) + '_authors' - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(sort_equivalents[idx])) - divOpeningTag.insert(dotc,pIndexTag) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(sort_equivalents[idx])) + divOpeningTag.insert(dotc, pIndexTag) dotc += 1 if book['author'] != current_author: @@ -1463,36 +1503,36 @@ class CatalogBuilder(object): pAuthorTag['class'] = "author_index" aTag = Tag(soup, "a") aTag['id'] = "%s" % self.generate_author_anchor(current_author) - aTag.insert(0,NavigableString(current_author)) - pAuthorTag.insert(0,aTag) + aTag.insert(0, NavigableString(current_author)) + pAuthorTag.insert(0, aTag) if author_count == 1: divOpeningTag.insert(dotc, pAuthorTag) dotc += 1 else: - divRunningTag.insert(drtc,pAuthorTag) + divRunningTag.insert(drtc, pAuthorTag) drtc += 1 # Check for series if book['series'] and book['series'] != current_series: # Start a new series current_series = book['series'] - pSeriesTag = Tag(soup,'p') + pSeriesTag = Tag(soup, 'p') pSeriesTag['class'] = "series" if self.opts.fmt == 'mobi': pSeriesTag['class'] = "series_mobi" if self.opts.generate_series: - aTag = Tag(soup,'a') - aTag['href'] = "%s.html#%s" % ('BySeries',self.generate_series_anchor(book['series'])) + aTag = Tag(soup, 'a') + aTag['href'] = "%s.html#%s" % ('BySeries', self.generate_series_anchor(book['series'])) aTag.insert(0, book['series']) pSeriesTag.insert(0, aTag) else: - pSeriesTag.insert(0,NavigableString('%s' % book['series'])) + pSeriesTag.insert(0, NavigableString('%s' % book['series'])) if author_count == 1: divOpeningTag.insert(dotc, pSeriesTag) dotc += 1 elif divRunningTag is not None: - divRunningTag.insert(drtc,pSeriesTag) + divRunningTag.insert(drtc, pSeriesTag) drtc += 1 if current_series and not book['series']: current_series = None @@ -1522,7 +1562,7 @@ class CatalogBuilder(object): #aTag.insert(0,'%s%s' % (escape(book['title']), pubyear)) formatted_title = self.by_authors_normal_title_template.format(**args).rstrip() non_series_books += 1 - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(ptc, aTag) stc += 1 @@ -1533,7 +1573,7 @@ class CatalogBuilder(object): divOpeningTag.insert(dotc, pBookTag) dotc += 1 elif divRunningTag: - divRunningTag.insert(drtc,pBookTag) + divRunningTag.insert(drtc, pBookTag) drtc += 1 # loop ends here @@ -1541,7 +1581,7 @@ class CatalogBuilder(object): pTag = Tag(soup, "p") pTag['class'] = 'title' ptc = 0 - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['id'] = 'section_start' pTag.insert(ptc, aTag) ptc += 1 @@ -1550,12 +1590,12 @@ class CatalogBuilder(object): # Kindle don't need this because it shows section titles in Periodical format aTag = Tag(soup, "a") anchor_name = friendly_name.lower() - aTag['id'] = anchor_name.replace(" ","") - pTag.insert(ptc,aTag) + aTag['id'] = anchor_name.replace(" ", "") + pTag.insert(ptc, aTag) ptc += 1 - pTag.insert(ptc,NavigableString('%s' % (friendly_name))) + pTag.insert(ptc, NavigableString('%s' % (friendly_name))) - body.insert(btc,pTag) + body.insert(btc, pTag) btc += 1 if author_count == 1: @@ -1601,9 +1641,9 @@ class CatalogBuilder(object): pIndexTag['class'] = "date_index" aTag = Tag(soup, "a") aTag['id'] = "bda_%s-%s" % (current_date.year, current_date.month) - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(date_string)) - divTag.insert(dtc,pIndexTag) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(date_string)) + divTag.insert(dtc, pIndexTag) dtc += 1 current_author = None current_series = None @@ -1619,27 +1659,27 @@ class CatalogBuilder(object): aTag = Tag(soup, "a") if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(current_author)) - aTag.insert(0,NavigableString(current_author)) - pAuthorTag.insert(0,aTag) - divTag.insert(dtc,pAuthorTag) + aTag.insert(0, NavigableString(current_author)) + pAuthorTag.insert(0, aTag) + divTag.insert(dtc, pAuthorTag) dtc += 1 # Check for series if new_entry['series'] and new_entry['series'] != current_series: # Start a new series current_series = new_entry['series'] - pSeriesTag = Tag(soup,'p') + pSeriesTag = Tag(soup, 'p') pSeriesTag['class'] = "series" if self.opts.fmt == 'mobi': pSeriesTag['class'] = "series_mobi" if self.opts.generate_series: - aTag = Tag(soup,'a') - aTag['href'] = "%s.html#%s" % ('BySeries',self.generate_series_anchor(new_entry['series'])) + aTag = Tag(soup, 'a') + aTag['href'] = "%s.html#%s" % ('BySeries', self.generate_series_anchor(new_entry['series'])) aTag.insert(0, new_entry['series']) pSeriesTag.insert(0, aTag) else: - pSeriesTag.insert(0,NavigableString('%s' % new_entry['series'])) - divTag.insert(dtc,pSeriesTag) + pSeriesTag.insert(0, NavigableString('%s' % new_entry['series'])) + divTag.insert(dtc, pSeriesTag) dtc += 1 if current_series and not new_entry['series']: current_series = None @@ -1667,7 +1707,7 @@ class CatalogBuilder(object): else: formatted_title = self.by_month_added_normal_title_template.format(**args).rstrip() non_series_books += 1 - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(stc, aTag) stc += 1 @@ -1683,10 +1723,10 @@ class CatalogBuilder(object): pIndexTag = Tag(soup, "p") pIndexTag['class'] = "date_index" aTag = Tag(soup, "a") - aTag['id'] = "bda_%s" % date_range.replace(' ','') - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(date_range)) - divTag.insert(dtc,pIndexTag) + aTag['id'] = "bda_%s" % date_range.replace(' ', '') + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(date_range)) + divTag.insert(dtc, pIndexTag) dtc += 1 for new_entry in date_range_list: @@ -1712,7 +1752,7 @@ class CatalogBuilder(object): formatted_title = self.by_recently_added_series_title_template.format(**args).rstrip() else: formatted_title = self.by_recently_added_normal_title_template.format(**args).rstrip() - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(stc, aTag) stc += 1 @@ -1726,7 +1766,7 @@ class CatalogBuilder(object): if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(new_entry['author'])) aTag.insert(0, NavigableString(new_entry['author'])) - emTag.insert(0,aTag) + emTag.insert(0, aTag) spanTag.insert(stc, emTag) stc += 1 @@ -1749,7 +1789,7 @@ class CatalogBuilder(object): pTag['class'] = 'title' ptc = 0 - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['id'] = 'section_start' pTag.insert(ptc, aTag) ptc += 1 @@ -1758,13 +1798,13 @@ class CatalogBuilder(object): # Kindle don't need this because it shows section titles in Periodical format aTag = Tag(soup, "a") anchor_name = friendly_name.lower() - aTag['id'] = anchor_name.replace(" ","") + aTag['id'] = anchor_name.replace(" ", "") - pTag.insert(ptc,aTag) + pTag.insert(ptc, aTag) ptc += 1 pTag.insert(ptc, NavigableString('%s' % friendly_name)) - body.insert(btc,pTag) + body.insert(btc, pTag) btc += 1 divTag = Tag(soup, "div") @@ -1773,23 +1813,23 @@ class CatalogBuilder(object): # >>> Books by date range <<< if self.use_series_prefix_in_titles_section: self.books_by_date_range = sorted(self.books_to_catalog, - key=lambda x:(x['timestamp'], x['timestamp']),reverse=True) + key=lambda x: (x['timestamp'], x['timestamp']), reverse=True) else: nspt = deepcopy(self.books_to_catalog) - self.books_by_date_range = sorted(nspt, key=lambda x:(x['timestamp'], x['timestamp']),reverse=True) + self.books_by_date_range = sorted(nspt, key=lambda x: (x['timestamp'], x['timestamp']), reverse=True) date_range_list = [] today_time = nowf().replace(hour=23, minute=59, second=59) for (i, date) in enumerate(self.DATE_RANGE): date_range_limit = self.DATE_RANGE[i] if i: - date_range = '%d to %d days ago' % (self.DATE_RANGE[i-1], self.DATE_RANGE[i]) + date_range = '%d to %d days ago' % (self.DATE_RANGE[i - 1], self.DATE_RANGE[i]) else: date_range = 'Last %d days' % (self.DATE_RANGE[i]) for book in self.books_by_date_range: book_time = book['timestamp'] - delta = today_time-book_time + delta = today_time - book_time if delta.days <= date_range_limit: date_range_list.append(book) else: @@ -1801,7 +1841,7 @@ class CatalogBuilder(object): # >>>> Books by month <<<< # Sort titles case-insensitive for by month using series prefix self.books_by_month = sorted(self.books_to_catalog, - key=lambda x:(x['timestamp'], x['timestamp']),reverse=True) + key=lambda x: (x['timestamp'], x['timestamp']), reverse=True) # Loop through books by date current_date = datetime.date.fromordinal(1) @@ -1848,9 +1888,9 @@ class CatalogBuilder(object): pIndexTag['class'] = "date_index" aTag = Tag(soup, "a") aTag['name'] = "bdr_%s-%s-%s" % (current_date.year, current_date.month, current_date.day) - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(date_string)) - divTag.insert(dtc,pIndexTag) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(date_string)) + divTag.insert(dtc, pIndexTag) dtc += 1 for new_entry in todays_list: @@ -1865,7 +1905,7 @@ class CatalogBuilder(object): aTag = Tag(soup, "a") if self.opts.generate_descriptions: aTag['href'] = "book_%d.html" % (int(float(new_entry['id']))) - aTag.insert(0,escape(new_entry['title'])) + aTag.insert(0, escape(new_entry['title'])) pBookTag.insert(ptc, aTag) ptc += 1 @@ -1879,7 +1919,7 @@ class CatalogBuilder(object): if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(new_entry['author'])) aTag.insert(0, NavigableString(new_entry['author'])) - emTag.insert(0,aTag) + emTag.insert(0, aTag) pBookTag.insert(ptc, emTag) ptc += 1 @@ -1892,10 +1932,10 @@ class CatalogBuilder(object): pIndexTag = Tag(soup, "p") pIndexTag['class'] = "date_index" aTag = Tag(soup, "a") - aTag['name'] = "bdr_%s" % date_range.replace(' ','') - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(date_range)) - divTag.insert(dtc,pIndexTag) + aTag['name'] = "bdr_%s" % date_range.replace(' ', '') + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(date_range)) + divTag.insert(dtc, pIndexTag) dtc += 1 for new_entry in date_range_list: @@ -1905,16 +1945,16 @@ class CatalogBuilder(object): ptc = 0 # Percent read - dots = int((new_entry['percent_read'] + 5)/10) + dots = int((new_entry['percent_read'] + 5) / 10) dot_string = self.SYMBOL_PROGRESS_READ * dots empty_dots = self.SYMBOL_PROGRESS_UNREAD * (10 - dots) - pBookTag.insert(ptc, NavigableString('%s%s' % (dot_string,empty_dots))) + pBookTag.insert(ptc, NavigableString('%s%s' % (dot_string, empty_dots))) ptc += 1 aTag = Tag(soup, "a") if self.opts.generate_descriptions: aTag['href'] = "book_%d.html" % (int(float(new_entry['id']))) - aTag.insert(0,escape(new_entry['title'])) + aTag.insert(0, escape(new_entry['title'])) pBookTag.insert(ptc, aTag) ptc += 1 @@ -1928,7 +1968,7 @@ class CatalogBuilder(object): if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(new_entry['author'])) aTag.insert(0, NavigableString(new_entry['author'])) - emTag.insert(0,aTag) + emTag.insert(0, aTag) pBookTag.insert(ptc, emTag) ptc += 1 @@ -1948,7 +1988,7 @@ class CatalogBuilder(object): btc = 0 # Insert section tag - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['name'] = 'section_start' body.insert(btc, aTag) btc += 1 @@ -1956,7 +1996,7 @@ class CatalogBuilder(object): # Insert the anchor aTag = Tag(soup, "a") anchor_name = friendly_name.lower() - aTag['name'] = anchor_name.replace(" ","") + aTag['name'] = anchor_name.replace(" ", "") body.insert(btc, aTag) btc += 1 @@ -1970,13 +2010,13 @@ class CatalogBuilder(object): #print "bm_book: %s" % bm_book book[1]['bookmark_timestamp'] = book[0].timestamp try: - book[1]['percent_read'] = min(float(100*book[0].last_read / book[0].book_length),100) + book[1]['percent_read'] = min(float(100 * book[0].last_read / book[0].book_length), 100) except: book[1]['percent_read'] = 0 bookmarked_books.append(book[1]) self.bookmarked_books_by_date_read = sorted(bookmarked_books, - key=lambda x:(x['bookmark_timestamp'], x['bookmark_timestamp']),reverse=True) + key=lambda x: (x['bookmark_timestamp'], x['bookmark_timestamp']), reverse=True) # >>>> Recently read by day <<<< current_date = datetime.date.fromordinal(1) @@ -2070,7 +2110,6 @@ class CatalogBuilder(object): len(genre[key]), 'titles' if len(genre[key]) > 1 else 'title')) - # Write the results # genre_list = [ {friendly_tag:[{book},{book}]}, {friendly_tag:[{book},{book}]}, ...] master_genre_list = [] @@ -2081,19 +2120,19 @@ class CatalogBuilder(object): # Create sorted_authors[0] = friendly, [1] = author_sort for NCX creation authors = [] for book in genre_tag_set[genre]: - authors.append((book['author'],book['author_sort'])) + authors.append((book['author'], book['author_sort'])) # authors[] contains a list of all book authors, with multiple entries for multiple books by author # Create unique_authors with a count of books per author as the third tuple element books_by_current_author = 1 current_author = authors[0] unique_authors = [] - for (i,author) in enumerate(authors): + for (i, author) in enumerate(authors): if author != current_author and i: unique_authors.append((current_author[0], current_author[1], books_by_current_author)) current_author = author books_by_current_author = 1 - elif i==0 and len(authors) == 1: + elif i == 0 and len(authors) == 1: # Allow for single-book lists unique_authors.append((current_author[0], current_author[1], books_by_current_author)) else: @@ -2102,16 +2141,17 @@ class CatalogBuilder(object): # Write the genre book list as an article outfile = "%s/Genre_%s.html" % (self.content_dir, genre) titles_spanned = self.generate_html_by_genre(genre, - True if index==0 else False, + True if index == 0 else False, genre_tag_set[genre], outfile) tag_file = "content/Genre_%s.html" % genre - master_genre_list.append({'tag':genre, - 'file':tag_file, - 'authors':unique_authors, - 'books':genre_tag_set[genre], - 'titles_spanned':titles_spanned}) + master_genre_list.append({ + 'tag': genre, + 'file': tag_file, + 'authors': unique_authors, + 'books': genre_tag_set[genre], + 'titles_spanned': titles_spanned}) self.genres = master_genre_list @@ -2142,7 +2182,7 @@ class CatalogBuilder(object): # Insert section tag if this is the section start - first article only if section_head: - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['id'] = 'section_start' divTag.insert(dtc, aTag) dtc += 1 @@ -2153,14 +2193,14 @@ class CatalogBuilder(object): aTag = Tag(soup, 'a') aTag['id'] = "Genre_%s" % genre divTag.insert(dtc, aTag) - body.insert(btc,divTag) + body.insert(btc, divTag) btc += 1 - titleTag = body.find(attrs={'class':'title'}) - titleTag.insert(0,NavigableString('%s' % escape(self.get_friendly_genre_tag(genre)))) + titleTag = body.find(attrs={'class': 'title'}) + titleTag.insert(0, NavigableString('%s' % escape(self.get_friendly_genre_tag(genre)))) # Insert the books by author list - divTag = body.find(attrs={'class':'authors'}) + divTag = body.find(attrs={'class': 'authors'}) dtc = 0 current_author = '' @@ -2177,26 +2217,26 @@ class CatalogBuilder(object): if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(book['author'])) aTag.insert(0, book['author']) - pAuthorTag.insert(0,aTag) - divTag.insert(dtc,pAuthorTag) + pAuthorTag.insert(0, aTag) + divTag.insert(dtc, pAuthorTag) dtc += 1 # Check for series if book['series'] and book['series'] != current_series: # Start a new series current_series = book['series'] - pSeriesTag = Tag(soup,'p') + pSeriesTag = Tag(soup, 'p') pSeriesTag['class'] = "series" if self.opts.fmt == 'mobi': pSeriesTag['class'] = "series_mobi" if self.opts.generate_series: - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['href'] = "%s.html#%s" % ('BySeries', self.generate_series_anchor(book['series'])) aTag.insert(0, book['series']) pSeriesTag.insert(0, aTag) else: - pSeriesTag.insert(0,NavigableString('%s' % book['series'])) - divTag.insert(dtc,pSeriesTag) + pSeriesTag.insert(0, NavigableString('%s' % book['series'])) + divTag.insert(dtc, pSeriesTag) dtc += 1 if current_series and not book['series']: @@ -2228,7 +2268,7 @@ class CatalogBuilder(object): #aTag.insert(0,escape(book['title'])) formatted_title = self.by_genres_normal_title_template.format(**args).rstrip() non_series_books += 1 - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(stc, aTag) stc += 1 @@ -2245,9 +2285,9 @@ class CatalogBuilder(object): outfile.close() if len(books) > 1: - titles_spanned = [(books[0]['author'],books[0]['title']), (books[-1]['author'],books[-1]['title'])] + titles_spanned = [(books[0]['author'], books[0]['title']), (books[-1]['author'], books[-1]['title'])] else: - titles_spanned = [(books[0]['author'],books[0]['title'])] + titles_spanned = [(books[0]['author'], books[0]['title'])] return titles_spanned @@ -2297,7 +2337,7 @@ class CatalogBuilder(object): series_count = 0 for idx, book in enumerate(self.books_by_series): # Check for initial letter change - if self.letter_or_symbol(sort_equivalents[idx]) != current_letter : + if self.letter_or_symbol(sort_equivalents[idx]) != current_letter: # Start a new letter with Index letter current_letter = self.letter_or_symbol(sort_equivalents[idx]) pIndexTag = Tag(soup, "p") @@ -2305,28 +2345,28 @@ class CatalogBuilder(object): aTag = Tag(soup, "a") if current_letter == self.SYMBOLS: aTag['id'] = self.SYMBOLS + "_series" - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(self.SYMBOLS)) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(self.SYMBOLS)) else: aTag['id'] = self.generate_unicode_name(current_letter) + "_series" - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(sort_equivalents[idx])) - divTag.insert(dtc,pIndexTag) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(sort_equivalents[idx])) + divTag.insert(dtc, pIndexTag) dtc += 1 # Check for series change if book['series'] != current_series: # Start a new series series_count += 1 current_series = book['series'] - pSeriesTag = Tag(soup,'p') + pSeriesTag = Tag(soup, 'p') pSeriesTag['class'] = "series" if self.opts.fmt == 'mobi': pSeriesTag['class'] = "series_mobi" aTag = Tag(soup, 'a') aTag['id'] = self.generate_series_anchor(book['series']) - pSeriesTag.insert(0,aTag) - pSeriesTag.insert(1,NavigableString('%s' % book['series'])) - divTag.insert(dtc,pSeriesTag) + pSeriesTag.insert(0, aTag) + pSeriesTag.insert(1, NavigableString('%s' % book['series'])) + divTag.insert(dtc, pSeriesTag) dtc += 1 # Add books @@ -2350,7 +2390,7 @@ class CatalogBuilder(object): args = self.generate_format_args(book) formatted_title = self.by_series_title_template.format(**args).rstrip() - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(stc, aTag) stc += 1 @@ -2377,7 +2417,7 @@ class CatalogBuilder(object): pTag = Tag(soup, "p") pTag['class'] = 'title' ptc = 0 - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['id'] = 'section_start' pTag.insert(ptc, aTag) ptc += 1 @@ -2386,10 +2426,10 @@ class CatalogBuilder(object): # Insert the

    tag with book_count at the head aTag = Tag(soup, "a") anchor_name = friendly_name.lower() - aTag['id'] = anchor_name.replace(" ","") - pTag.insert(0,aTag) - pTag.insert(1,NavigableString('%s' % friendly_name)) - body.insert(btc,pTag) + aTag['id'] = anchor_name.replace(" ", "") + pTag.insert(0, aTag) + pTag.insert(1, NavigableString('%s' % friendly_name)) + body.insert(btc, pTag) btc += 1 # Add the divTag to the body @@ -2423,7 +2463,7 @@ class CatalogBuilder(object): pTag = Tag(soup, "p") pTag['class'] = 'title' ptc = 0 - aTag = Tag(soup,'a') + aTag = Tag(soup, 'a') aTag['id'] = 'section_start' pTag.insert(ptc, aTag) ptc += 1 @@ -2432,11 +2472,11 @@ class CatalogBuilder(object): # Kindle don't need this because it shows section titles in Periodical format aTag = Tag(soup, "a") aTag['id'] = "bytitle" - pTag.insert(ptc,aTag) + pTag.insert(ptc, aTag) ptc += 1 - pTag.insert(ptc,NavigableString(_('Titles'))) + pTag.insert(ptc, NavigableString(_('Titles'))) - body.insert(btc,pTag) + body.insert(btc, pTag) btc += 1 divTag = Tag(soup, "div") @@ -2478,13 +2518,13 @@ class CatalogBuilder(object): current_letter = self.letter_or_symbol(sort_equivalents[idx]) if current_letter == self.SYMBOLS: aTag['id'] = self.SYMBOLS + "_titles" - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(self.SYMBOLS)) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(self.SYMBOLS)) else: aTag['id'] = self.generate_unicode_name(current_letter) + "_titles" - pIndexTag.insert(0,aTag) - pIndexTag.insert(1,NavigableString(sort_equivalents[idx])) - divRunningTag.insert(dtc,pIndexTag) + pIndexTag.insert(0, aTag) + pIndexTag.insert(1, NavigableString(sort_equivalents[idx])) + divRunningTag.insert(dtc, pIndexTag) drtc += 1 # Add books @@ -2510,7 +2550,7 @@ class CatalogBuilder(object): formatted_title = self.by_titles_series_title_template.format(**args).rstrip() else: formatted_title = self.by_titles_normal_title_template.format(**args).rstrip() - aTag.insert(0,NavigableString(escape(formatted_title))) + aTag.insert(0, NavigableString(escape(formatted_title))) spanTag.insert(stc, aTag) stc += 1 @@ -2524,7 +2564,7 @@ class CatalogBuilder(object): if self.opts.generate_authors: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(book['author'])) aTag.insert(0, NavigableString(book['author'])) - emTag.insert(0,aTag) + emTag.insert(0, aTag) spanTag.insert(stc, emTag) stc += 1 @@ -2611,7 +2651,7 @@ class CatalogBuilder(object): author = book['author'] if book['prefix']: - author_prefix = book['prefix'] + ' ' + _("by ") + author_prefix = book['prefix'] + ' ' + _("by ") elif self.opts.connected_kindle and book['id'] in self.bookmarked_books: author_prefix = self.SYMBOL_READING + ' ' + _("by ") else: @@ -2621,16 +2661,16 @@ class CatalogBuilder(object): genres = '' if 'genres' in book: _soup = BeautifulSoup('') - genresTag = Tag(_soup,'p') + genresTag = Tag(_soup, 'p') gtc = 0 for (i, tag) in enumerate(sorted(book.get('genres', []))): - aTag = Tag(_soup,'a') + aTag = Tag(_soup, 'a') if self.opts.generate_genres: aTag['href'] = "Genre_%s.html" % self.genre_tags_dict[tag] - aTag.insert(0,escape(NavigableString(tag))) + aTag.insert(0, escape(NavigableString(tag))) genresTag.insert(gtc, aTag) gtc += 1 - if i < len(book['genres'])-1: + if i < len(book['genres']) - 1: genresTag.insert(gtc, NavigableString(' · ')) gtc += 1 genres = genresTag.renderContents() @@ -2650,12 +2690,12 @@ class CatalogBuilder(object): pubdate = pubyear = pubmonth = '' # Thumb - _soup = BeautifulSoup('',selfClosingTags=['img']) - thumb = Tag(_soup,"img") + _soup = BeautifulSoup('', selfClosingTags=['img']) + thumb = Tag(_soup, "img") if 'cover' in book and book['cover']: - thumb['src'] = "../images/thumbnail_%d.jpg" % int(book['id']) + thumb['src'] = "../images/thumbnail_%d.jpg" % int(book['id']) else: - thumb['src'] = "../images/thumbnail_default.jpg" + thumb['src'] = "../images/thumbnail_default.jpg" thumb['alt'] = "cover thumbnail" # Publisher @@ -2669,7 +2709,7 @@ class CatalogBuilder(object): if stars: star_string = self.SYMBOL_FULL_RATING * stars empty_stars = self.SYMBOL_EMPTY_RATING * (5 - stars) - rating = '%s%s
    ' % (star_string,empty_stars) + rating = '%s%s
    ' % (star_string, empty_stars) # Notes note_source = '' @@ -2698,44 +2738,44 @@ class CatalogBuilder(object): btc += 1 # Insert the link to the series or remove - aTag = body.find('a', attrs={'class':'series_id'}) + aTag = body.find('a', attrs={'class': 'series_id'}) if aTag: if book['series']: if self.opts.generate_series: - aTag['href'] = "%s.html#%s" % ('BySeries',self.generate_series_anchor(book['series'])) + aTag['href'] = "%s.html#%s" % ('BySeries', self.generate_series_anchor(book['series'])) else: aTag.extract() # Insert the author link - aTag = body.find('a', attrs={'class':'author'}) + aTag = body.find('a', attrs={'class': 'author'}) if self.opts.generate_authors and aTag: aTag['href'] = "%s.html#%s" % ("ByAlphaAuthor", self.generate_author_anchor(book['author'])) if publisher == ' ': - publisherTag = body.find('td', attrs={'class':'publisher'}) + publisherTag = body.find('td', attrs={'class': 'publisher'}) if publisherTag: publisherTag.contents[0].replaceWith(' ') if not genres: - genresTag = body.find('p',attrs={'class':'genres'}) + genresTag = body.find('p', attrs={'class': 'genres'}) if genresTag: genresTag.extract() if not formats: - formatsTag = body.find('p',attrs={'class':'formats'}) + formatsTag = body.find('p', attrs={'class': 'formats'}) if formatsTag: formatsTag.extract() if note_content == '': - tdTag = body.find('td', attrs={'class':'notes'}) + tdTag = body.find('td', attrs={'class': 'notes'}) if tdTag: tdTag.contents[0].replaceWith(' ') - emptyTags = body.findAll('td', attrs={'class':'empty'}) + emptyTags = body.findAll('td', attrs={'class': 'empty'}) for mt in emptyTags: - newEmptyTag = Tag(BeautifulSoup(),'td') - newEmptyTag.insert(0,NavigableString(' ')) + newEmptyTag = Tag(BeautifulSoup(), 'td') + newEmptyTag.insert(0, NavigableString(' ')) mt.replaceWith(newEmptyTag) return soup @@ -2758,7 +2798,7 @@ class CatalogBuilder(object): self.update_progress_micro_step("%s %d of %d" % (_("Description HTML"), title_num, len(self.books_by_title)), - float(title_num*100/len(self.books_by_title))/100) + float(title_num * 100 / len(self.books_by_title)) / 100) # Generate the header from user-customizable template soup = self.generate_html_description_header(title) @@ -2795,7 +2835,7 @@ class CatalogBuilder(object): # Insert the supplied title soup = BeautifulSoup(header) titleTag = soup.find('title') - titleTag.insert(0,NavigableString(title)) + titleTag.insert(0, NavigableString(title)) return soup def generate_html_genre_header(self, title): @@ -2814,10 +2854,10 @@ class CatalogBuilder(object): bodyTag = soup.find('body') pTag = Tag(soup, 'p') pTag['class'] = 'title' - bodyTag.insert(0,pTag) + bodyTag.insert(0, pTag) divTag = Tag(soup, 'div') divTag['class'] = 'authors' - bodyTag.insert(1,divTag) + bodyTag.insert(1, divTag) return soup def generate_masthead_image(self, out_path): @@ -2869,9 +2909,9 @@ class CatalogBuilder(object): font = ImageFont.truetype(default_font, 48) text = self.opts.catalog_title.encode('utf-8') width, height = draw.textsize(text, font=font) - left = max(int((MI_WIDTH - width)/2.), 0) - top = max(int((MI_HEIGHT - height)/2.), 0) - draw.text((left, top), text, fill=(0,0,0), font=font) + left = max(int((MI_WIDTH - width) / 2.), 0) + top = max(int((MI_HEIGHT - height) / 2.), 0) + draw.text((left, top), text, fill=(0, 0, 0), font=font) img.save(open(out_path, 'wb'), 'GIF') def generate_ncx_header(self): @@ -2896,7 +2936,7 @@ class CatalogBuilder(object): ''' - soup = BeautifulStoneSoup(header, selfClosingTags=['content','calibre:meta-img']) + soup = BeautifulStoneSoup(header, selfClosingTags=['content', 'calibre:meta-img']) ncx = soup.find('ncx') navMapTag = Tag(soup, 'navMap') @@ -2935,22 +2975,20 @@ class CatalogBuilder(object): contentTag = Tag(soup, 'content') contentTag['src'] = "content/ByDateAdded.html" navPointTag.insert(1, contentTag) - else: + elif self.opts.generate_descriptions: # Descriptions only - sort_descriptions_by = self.books_by_author if self.opts.sort_descriptions_by_author \ - else self.books_by_title contentTag = Tag(soup, 'content') - contentTag['src'] = "content/book_%d.html" % int(sort_descriptions_by[0]['id']) + contentTag['src'] = "content/book_%d.html" % int(self.books_by_description[0]['id']) navPointTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmiTag = Tag(soup, '%s' % 'calibre:meta-img') cmiTag['id'] = "mastheadImage" cmiTag['src'] = "images/mastheadImage.gif" - navPointTag.insert(2,cmiTag) - navMapTag.insert(0,navPointTag) + navPointTag.insert(2, cmiTag) + navMapTag.insert(0, navPointTag) - ncx.insert(0,navMapTag) + ncx.insert(0, navMapTag) self.ncx_soup = soup def generate_ncx_descriptions(self, tocTitle): @@ -2970,9 +3008,6 @@ class CatalogBuilder(object): self.update_progress_full_step(_("NCX for Descriptions")) - sort_descriptions_by = self.books_by_author if self.opts.sort_descriptions_by_author \ - else self.books_by_title - # --- Construct the 'Descriptions' section --- ncx_soup = self.ncx_soup if self.generate_for_kindle_mobi: @@ -2990,19 +3025,22 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - textTag.insert(0, NavigableString(tocTitle)) + section_header = '%s [%d]' % (tocTitle, len(self.books_by_description)) + if self.generate_for_kindle_mobi: + section_header = tocTitle + textTag.insert(0, NavigableString(section_header)) navLabelTag.insert(0, textTag) nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") - contentTag['src'] = "content/book_%d.html" % int(sort_descriptions_by[0]['id']) + contentTag = Tag(ncx_soup, "content") + contentTag['src'] = "content/book_%d.html" % int(self.books_by_description[0]['id']) navPointTag.insert(nptc, contentTag) nptc += 1 # Loop over the titles - for book in sort_descriptions_by: + for book in self.books_by_description: navPointVolumeTag = Tag(ncx_soup, 'navPoint') if self.generate_for_kindle_mobi: navPointVolumeTag['class'] = "article" @@ -3040,8 +3078,8 @@ class CatalogBuilder(object): # Include Author for non-Kindle textTag.insert(0, NavigableString(self.format_ncx_text('%s · %s' % \ (book['title'], book['author']), dest='title'))) - navLabelTag.insert(0,textTag) - navPointVolumeTag.insert(0,navLabelTag) + navLabelTag.insert(0, textTag) + navPointVolumeTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, "content") contentTag['src'] = "content/book_%d.html#book%d" % (int(book['id']), int(book['id'])) @@ -3119,12 +3157,15 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - textTag.insert(0, NavigableString(tocTitle)) + section_header = '%s [%d]' % (tocTitle, len(self.all_series)) + if self.generate_for_kindle_mobi: + section_header = tocTitle + textTag.insert(0, NavigableString(section_header)) navLabelTag.insert(0, textTag) nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "content/%s.html#section_start" % (output) navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3159,7 +3200,7 @@ class CatalogBuilder(object): current_series_list = [book['series']] else: if len(current_series_list) < self.opts.description_clip and \ - book['series'] != current_series : + book['series'] != current_series: current_series = book['series'] current_series_list.append(book['series']) @@ -3167,7 +3208,7 @@ class CatalogBuilder(object): _add_to_series_by_letter(current_series_list) # Add *article* entries for each populated series title letter - for (i,books) in enumerate(series_by_letter): + for (i, books) in enumerate(series_by_letter): navPointByLetterTag = Tag(ncx_soup, 'navPoint') if self.generate_for_kindle_mobi: navPointByLetterTag['class'] = "article" @@ -3176,14 +3217,14 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - if len(title_letters[i])>1: + if len(title_letters[i]) > 1: fmt_string = _(u"Series beginning with %s") else: fmt_string = _(u"Series beginning with '%s'") textTag.insert(0, NavigableString(fmt_string % - (title_letters[i] if len(title_letters[i])>1 else title_letters[i]))) + (title_letters[i] if len(title_letters[i]) > 1 else title_letters[i]))) navLabelTag.insert(0, textTag) - navPointByLetterTag.insert(0,navLabelTag) + navPointByLetterTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') #contentTag['src'] = "content/%s.html#%s_series" % (output, title_letters[i]) if title_letters[i] == self.SYMBOLS: @@ -3191,7 +3232,7 @@ class CatalogBuilder(object): else: contentTag['src'] = "content/%s.html#%s_series" % (output, self.generate_unicode_name(title_letters[i])) - navPointByLetterTag.insert(1,contentTag) + navPointByLetterTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3247,12 +3288,15 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - textTag.insert(0, NavigableString(tocTitle)) + section_header = '%s [%d]' % (tocTitle, len(self.books_by_title)) + if self.generate_for_kindle_mobi: + section_header = tocTitle + textTag.insert(0, NavigableString(section_header)) navLabelTag.insert(0, textTag) nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "content/%s.html#section_start" % (output) navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3289,7 +3333,7 @@ class CatalogBuilder(object): current_book_list = [book['title']] else: if len(current_book_list) < self.opts.description_clip and \ - book['title'] != current_book : + book['title'] != current_book: current_book = book['title'] current_book_list.append(book['title']) @@ -3297,7 +3341,7 @@ class CatalogBuilder(object): _add_to_books_by_letter(current_book_list) # Add *article* entries for each populated title letter - for (i,books) in enumerate(books_by_letter): + for (i, books) in enumerate(books_by_letter): navPointByLetterTag = Tag(ncx_soup, 'navPoint') if self.generate_for_kindle_mobi: navPointByLetterTag['class'] = "article" @@ -3306,20 +3350,20 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - if len(title_letters[i])>1: + if len(title_letters[i]) > 1: fmt_string = _(u"Titles beginning with %s") else: fmt_string = _(u"Titles beginning with '%s'") textTag.insert(0, NavigableString(fmt_string % - (title_letters[i] if len(title_letters[i])>1 else title_letters[i]))) + (title_letters[i] if len(title_letters[i]) > 1 else title_letters[i]))) navLabelTag.insert(0, textTag) - navPointByLetterTag.insert(0,navLabelTag) + navPointByLetterTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') if title_letters[i] == self.SYMBOLS: contentTag['src'] = "content/%s.html#%s_titles" % (output, self.SYMBOLS) else: contentTag['src'] = "content/%s.html#%s_titles" % (output, self.generate_unicode_name(title_letters[i])) - navPointByLetterTag.insert(1,contentTag) + navPointByLetterTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3371,18 +3415,21 @@ class CatalogBuilder(object): if self.generate_for_kindle_mobi: navPointTag['class'] = "section" file_ID = "%s" % tocTitle.lower() - file_ID = file_ID.replace(" ","") + file_ID = file_ID.replace(" ", "") navPointTag['id'] = "%s-ID" % file_ID navPointTag['playOrder'] = self.play_order self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - textTag.insert(0, NavigableString('%s' % tocTitle)) + section_header = '%s [%d]' % (tocTitle, len(self.individual_authors)) + if self.generate_for_kindle_mobi: + section_header = tocTitle + textTag.insert(0, NavigableString(section_header)) navLabelTag.insert(0, textTag) nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "%s#section_start" % HTML_file navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3426,19 +3473,19 @@ class CatalogBuilder(object): self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - if len(authors_by_letter[1])>1: + if len(authors_by_letter[1]) > 1: fmt_string = _(u"Authors beginning with %s") else: fmt_string = _(u"Authors beginning with '%s'") - textTag.insert(0, NavigableString(fmt_string % (authors_by_letter[1]))) + textTag.insert(0, NavigableString(fmt_string % authors_by_letter[1])) navLabelTag.insert(0, textTag) - navPointByLetterTag.insert(0,navLabelTag) + navPointByLetterTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') if authors_by_letter[1] == self.SYMBOLS: contentTag['src'] = "%s#%s_authors" % (HTML_file, authors_by_letter[1]) else: contentTag['src'] = "%s#%s_authors" % (HTML_file, self.generate_unicode_name(authors_by_letter[1])) - navPointByLetterTag.insert(1,contentTag) + navPointByLetterTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3497,7 +3544,7 @@ class CatalogBuilder(object): if self.generate_for_kindle_mobi: navPointTag['class'] = "section" file_ID = "%s" % tocTitle.lower() - file_ID = file_ID.replace(" ","") + file_ID = file_ID.replace(" ", "") navPointTag['id'] = "%s-ID" % file_ID navPointTag['playOrder'] = self.play_order self.play_order += 1 @@ -3508,7 +3555,7 @@ class CatalogBuilder(object): nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "%s#section_start" % HTML_file navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3518,15 +3565,15 @@ class CatalogBuilder(object): master_date_range_list = [] today = datetime.datetime.now() today_time = datetime.datetime(today.year, today.month, today.day) - for (i,date) in enumerate(self.DATE_RANGE): + for (i, date) in enumerate(self.DATE_RANGE): if i: - date_range = '%d to %d days ago' % (self.DATE_RANGE[i-1], self.DATE_RANGE[i]) + date_range = '%d to %d days ago' % (self.DATE_RANGE[i - 1], self.DATE_RANGE[i]) else: date_range = 'Last %d days' % (self.DATE_RANGE[i]) date_range_limit = self.DATE_RANGE[i] for book in self.books_by_date_range: book_time = datetime.datetime(book['timestamp'].year, book['timestamp'].month, book['timestamp'].day) - if (today_time-book_time).days <= date_range_limit: + if (today_time - book_time).days <= date_range_limit: #print "generate_ncx_by_date_added: %s added %d days ago" % (book['title'], (today_time-book_time).days) current_titles_list.append(book['title']) else: @@ -3541,19 +3588,19 @@ class CatalogBuilder(object): navPointByDateRangeTag = Tag(ncx_soup, 'navPoint') if self.generate_for_kindle_mobi: navPointByDateRangeTag['class'] = "article" - navPointByDateRangeTag['id'] = "%s-ID" % books_by_date_range[1].replace(' ','') + navPointByDateRangeTag['id'] = "%s-ID" % books_by_date_range[1].replace(' ', '') navPointTag['playOrder'] = self.play_order self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') textTag.insert(0, NavigableString(books_by_date_range[1])) navLabelTag.insert(0, textTag) - navPointByDateRangeTag.insert(0,navLabelTag) + navPointByDateRangeTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') contentTag['src'] = "%s#bda_%s" % (HTML_file, - books_by_date_range[1].replace(' ','')) + books_by_date_range[1].replace(' ', '')) - navPointByDateRangeTag.insert(1,contentTag) + navPointByDateRangeTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3601,19 +3648,19 @@ class CatalogBuilder(object): navPointByMonthTag = Tag(ncx_soup, 'navPoint') if self.generate_for_kindle_mobi: navPointByMonthTag['class'] = "article" - navPointByMonthTag['id'] = "bda_%s-%s-ID" % (books_by_month[1].year,books_by_month[1].month ) + navPointByMonthTag['id'] = "bda_%s-%s-ID" % (books_by_month[1].year, books_by_month[1].month) navPointTag['playOrder'] = self.play_order self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') textTag.insert(0, NavigableString(datestr)) navLabelTag.insert(0, textTag) - navPointByMonthTag.insert(0,navLabelTag) + navPointByMonthTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') contentTag['src'] = "%s#bda_%s-%s" % (HTML_file, - books_by_month[1].year,books_by_month[1].month) + books_by_month[1].year, books_by_month[1].month) - navPointByMonthTag.insert(1,contentTag) + navPointByMonthTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3681,7 +3728,7 @@ class CatalogBuilder(object): if self.generate_for_kindle_mobi: navPointTag['class'] = "section" file_ID = "%s" % tocTitle.lower() - file_ID = file_ID.replace(" ","") + file_ID = file_ID.replace(" ", "") navPointTag['id'] = "%s-ID" % file_ID navPointTag['playOrder'] = self.play_order self.play_order += 1 @@ -3692,7 +3739,7 @@ class CatalogBuilder(object): nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "%s#section_start" % HTML_file navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3702,15 +3749,15 @@ class CatalogBuilder(object): master_date_range_list = [] today = datetime.datetime.now() today_time = datetime.datetime(today.year, today.month, today.day) - for (i,date) in enumerate(self.DATE_RANGE): + for (i, date) in enumerate(self.DATE_RANGE): if i: - date_range = '%d to %d days ago' % (self.DATE_RANGE[i-1], self.DATE_RANGE[i]) + date_range = '%d to %d days ago' % (self.DATE_RANGE[i - 1], self.DATE_RANGE[i]) else: date_range = 'Last %d days' % (self.DATE_RANGE[i]) date_range_limit = self.DATE_RANGE[i] for book in self.bookmarked_books_by_date_read: bookmark_time = datetime.datetime.utcfromtimestamp(book['bookmark_timestamp']) - if (today_time-bookmark_time).days <= date_range_limit: + if (today_time - bookmark_time).days <= date_range_limit: #print "generate_ncx_by_date_added: %s added %d days ago" % (book['title'], (today_time-book_time).days) current_titles_list.append(book['title']) else: @@ -3753,21 +3800,21 @@ class CatalogBuilder(object): navPointByDayTag['class'] = "article" navPointByDayTag['id'] = "bdr_%s-%s-%sID" % (books_by_day[1].year, books_by_day[1].month, - books_by_day[1].day ) + books_by_day[1].day) navPointTag['playOrder'] = self.play_order self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') textTag.insert(0, NavigableString(datestr)) navLabelTag.insert(0, textTag) - navPointByDayTag.insert(0,navLabelTag) + navPointByDayTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, 'content') contentTag['src'] = "%s#bdr_%s-%s-%s" % (HTML_file, books_by_day[1].year, books_by_day[1].month, books_by_day[1].day) - navPointByDayTag.insert(1,contentTag) + navPointByDayTag.insert(1, contentTag) if self.generate_for_kindle_mobi: cmTag = Tag(ncx_soup, '%s' % 'calibre:meta') @@ -3808,7 +3855,7 @@ class CatalogBuilder(object): self.update_progress_full_step(_("NCX for Genres")) if not len(self.genres): - self.opts.log.warn(" No genres found in tags.\n" + self.opts.log.warn(" No genres found\n" " No Genre section added to Catalog") return @@ -3824,19 +3871,21 @@ class CatalogBuilder(object): if self.generate_for_kindle_mobi: navPointTag['class'] = "section" file_ID = "%s" % tocTitle.lower() - file_ID = file_ID.replace(" ","") + file_ID = file_ID.replace(" ", "") navPointTag['id'] = "%s-ID" % file_ID navPointTag['playOrder'] = self.play_order self.play_order += 1 navLabelTag = Tag(ncx_soup, 'navLabel') textTag = Tag(ncx_soup, 'text') - # textTag.insert(0, NavigableString('%s (%d)' % (section_title, len(genre_list)))) - textTag.insert(0, NavigableString('%s' % tocTitle)) + section_header = '%s [%d]' % (tocTitle, len(self.genres)) + if self.generate_for_kindle_mobi: + section_header = tocTitle + textTag.insert(0, NavigableString(section_header)) navLabelTag.insert(0, textTag) nptc = 0 navPointTag.insert(nptc, navLabelTag) nptc += 1 - contentTag = Tag(ncx_soup,"content") + contentTag = Tag(ncx_soup, "content") contentTag['src'] = "content/Genre_%s.html#section_start" % self.genres[0]['tag'] navPointTag.insert(nptc, contentTag) nptc += 1 @@ -3859,8 +3908,8 @@ class CatalogBuilder(object): normalized_tag = self.genre_tags_dict[friendly_tag] break textTag.insert(0, self.format_ncx_text(NavigableString(friendly_tag), dest='description')) - navLabelTag.insert(0,textTag) - navPointVolumeTag.insert(0,navLabelTag) + navLabelTag.insert(0, textTag) + navPointVolumeTag.insert(0, navLabelTag) contentTag = Tag(ncx_soup, "content") contentTag['src'] = "content/Genre_%s.html#Genre_%s" % (normalized_tag, normalized_tag) navPointVolumeTag.insert(1, contentTag) @@ -3871,9 +3920,9 @@ class CatalogBuilder(object): cmTag['name'] = "author" # First - Last author - if len(genre['titles_spanned']) > 1 : + if len(genre['titles_spanned']) > 1: author_range = "%s - %s" % (genre['titles_spanned'][0][0], genre['titles_spanned'][1][0]) - else : + else: author_range = "%s" % (genre['titles_spanned'][0][0]) cmTag.insert(0, NavigableString(author_range)) @@ -3895,7 +3944,7 @@ class CatalogBuilder(object): titles = [] for title in genre['books']: titles.append(title['title']) - titles = sorted(titles, key=lambda x:(self.generate_sort_title(x),self.generate_sort_title(x))) + titles = sorted(titles, key=lambda x: (self.generate_sort_title(x), self.generate_sort_title(x))) titles_list = self.generate_short_description(u" • ".join(titles), dest="description") cmTag.insert(0, NavigableString(self.format_ncx_text(titles_list, dest='description'))) @@ -3942,12 +3991,12 @@ class CatalogBuilder(object): ''' # Add the supplied metadata tags - soup = BeautifulStoneSoup(header, selfClosingTags=['item','itemref', 'meta', 'reference']) + soup = BeautifulStoneSoup(header, selfClosingTags=['item', 'itemref', 'meta', 'reference']) metadata = soup.find('metadata') mtc = 0 titleTag = Tag(soup, "dc:title") - titleTag.insert(0,escape(self.opts.catalog_title)) + titleTag.insert(0, escape(self.opts.catalog_title)) metadata.insert(mtc, titleTag) mtc += 1 @@ -3993,7 +4042,6 @@ class CatalogBuilder(object): mtc += 1 # Write the thumbnail images, descriptions to the manifest - sort_descriptions_by = [] if self.opts.generate_descriptions: for thumb in self.thumbs: itemTag = Tag(soup, "item") @@ -4004,9 +4052,6 @@ class CatalogBuilder(object): manifest.insert(mtc, itemTag) mtc += 1 - # HTML files - add descriptions to manifest and spine - sort_descriptions_by = self.books_by_author if self.opts.sort_descriptions_by_author \ - else self.books_by_title # Add html_files to manifest and spine for file in self.html_filelist_1: @@ -4060,7 +4105,7 @@ class CatalogBuilder(object): spine.insert(stc, itemrefTag) stc += 1 - for book in sort_descriptions_by: + for book in self.books_by_description: # manifest itemTag = Tag(soup, "item") itemTag['href'] = "content/book_%d.html" % int(book['id']) @@ -4081,7 +4126,7 @@ class CatalogBuilder(object): referenceTag['type'] = 'masthead' referenceTag['title'] = 'mastheadimage-image' referenceTag['href'] = 'images/mastheadImage.gif' - guide.insert(0,referenceTag) + guide.insert(0, referenceTag) # Write the OPF file outfile = open("%s/%s.opf" % (self.catalog_path, self.opts.basename), 'w') @@ -4107,7 +4152,7 @@ class CatalogBuilder(object): if stars: star_string = self.SYMBOL_FULL_RATING * stars empty_stars = self.SYMBOL_EMPTY_RATING * (5 - stars) - rating = '%s%s' % (star_string,empty_stars) + rating = '%s%s' % (star_string, empty_stars) except: # Rating could be None pass @@ -4127,9 +4172,9 @@ class CatalogBuilder(object): # Generate a legal XHTML id/href string if self.letter_or_symbol(series) == self.SYMBOLS: - return "symbol_%s_series" % re.sub('\W','',series).lower() + return "symbol_%s_series" % re.sub('\W', '', series).lower() else: - return "%s_series" % re.sub('\W','',ascii_text(series)).lower() + return "%s_series" % re.sub('\W', '', ascii_text(series)).lower() def generate_short_description(self, description, dest=None): """ Generate a truncated version of the supplied string. @@ -4199,36 +4244,36 @@ class CatalogBuilder(object): title_words = title_sort(title).split() translated = [] - for (i,word) in enumerate(title_words): + for (i, word) in enumerate(title_words): # Leading numbers optionally translated to text equivalent # Capitalize leading sort word - if i==0: + if i == 0: # *** Keep this code in case we need to restore numbers_as_text *** if False: #if self.opts.numbers_as_text and re.match('[0-9]+',word[0]): translated.append(NumberToText(word).text.capitalize()) else: - if re.match('[0-9]+',word[0]): - word = word.replace(',','') + if re.match('[0-9]+', word[0]): + word = word.replace(',', '') suffix = re.search('[\D]', word) if suffix: - word = '%10.0f%s' % (float(word[:suffix.start()]),word[suffix.start():]) + word = '%10.0f%s' % (float(word[:suffix.start()]), word[suffix.start():]) else: word = '%10.0f' % (float(word)) # If leading char > 'A', insert symbol as leading forcing lower sort # '/' sorts below numbers, g if self.letter_or_symbol(word[0]) != word[0]: - if word[0] > 'A' or (ord('9') < ord(word[0]) < ord('A')) : + if word[0] > 'A' or (ord('9') < ord(word[0]) < ord('A')): translated.append('/') translated.append(capitalize(word)) else: - if re.search('[0-9]+',word[0]): - word = word.replace(',','') + if re.search('[0-9]+', word[0]): + word = word.replace(',', '') suffix = re.search('[\D]', word) if suffix: - word = '%10.0f%s' % (float(word[:suffix.start()]),word[suffix.start():]) + word = '%10.0f%s' % (float(word[:suffix.start()]), word[suffix.start():]) else: word = '%10.0f' % (float(word)) translated.append(word) @@ -4269,12 +4314,12 @@ class CatalogBuilder(object): if zf is not None: with zf: try: - zf.getinfo(title['uuid']+cover_crc) + zf.getinfo(title['uuid'] + cover_crc) except: pass else: # uuid found in cache with matching crc - thumb_data = zf.read(title['uuid']+cover_crc) + thumb_data = zf.read(title['uuid'] + cover_crc) with open(os.path.join(image_dir, thumb_file), 'wb') as f: f.write(thumb_data) return @@ -4286,13 +4331,14 @@ class CatalogBuilder(object): f.write(thumb_data) # Save thumb to archive - if zf is not None: # Ensure that the read succeeded + if zf is not None: + # Ensure that the read succeeded # If we failed to open the zip file for reading, # we dont know if it contained the thumb or not zf = _open_archive('a') if zf is not None: with zf: - zf.writestr(title['uuid']+cover_crc, thumb_data) + zf.writestr(title['uuid'] + cover_crc, thumb_data) def generate_thumbnails(self): """ Generate a thumbnail cover for each book. @@ -4311,11 +4357,11 @@ class CatalogBuilder(object): self.update_progress_full_step(_("Thumbnails")) thumbs = ['thumbnail_default.jpg'] image_dir = "%s/images" % self.catalog_path - for (i,title) in enumerate(self.books_by_title): + for (i, title) in enumerate(self.books_by_title): # Update status self.update_progress_micro_step("%s %d of %d" % (_("Thumbnail"), i, len(self.books_by_title)), - i/float(len(self.books_by_title))) + i / float(len(self.books_by_title))) thumb_file = 'thumbnail_%d.jpg' % int(title['id']) thumb_generated = True @@ -4337,7 +4383,7 @@ class CatalogBuilder(object): if not thumb_generated: self.opts.log.warn(" using default cover for '%s' (%d)" % (title['title'], title['id'])) # Confirm thumb exists, default is current - default_thumb_fp = os.path.join(image_dir,"thumbnail_default.jpg") + default_thumb_fp = os.path.join(image_dir, "thumbnail_default.jpg") cover = os.path.join(self.catalog_path, "DefaultCover.png") title['cover'] = cover @@ -4363,7 +4409,6 @@ class CatalogBuilder(object): # Clear the book's cover property title['cover'] = None - # Write thumb_width to the file, validating cache contents # Allows detection of aborted catalog builds with ZipFile(self.thumbs_path, mode='a') as zfw: @@ -4477,7 +4522,7 @@ class CatalogBuilder(object): raise return pr - def letter_or_symbol(self,char): + def letter_or_symbol(self, char): """ Test asciized char for A-z. Convert char to ascii, test for A-z. @@ -4551,7 +4596,7 @@ class CatalogBuilder(object): # confusion with decimal points. # Explode lost CRs to \n\n - for lost_cr in re.finditer('([a-z])([\.\?!])([A-Z])',comments): + for lost_cr in re.finditer('([a-z])([\.\?!])([A-Z])', comments): comments = comments.replace(lost_cr.group(), '%s%s\n\n%s' % (lost_cr.group(1), lost_cr.group(2), @@ -4573,17 +4618,17 @@ class CatalogBuilder(object): split_ps = comments.split(u'\n\n') tsc = 0 for p in split_ps: - pTag = Tag(soup,'p') - pTag.insert(0,p) - soup.insert(tsc,pTag) + pTag = Tag(soup, 'p') + pTag.insert(0, p) + soup.insert(tsc, pTag) tsc += 1 comments = soup.renderContents(None) # Convert solo returns to
    - comments = re.sub('[\r\n]','
    ', comments) + comments = re.sub('[\r\n]', '
    ', comments) # Convert two hypens to emdash - comments = re.sub('--','—',comments) + comments = re.sub('--', '—', comments) soup = BeautifulSoup(comments) result = BeautifulSoup() rtc = 0 @@ -4593,15 +4638,15 @@ class CatalogBuilder(object): for token in all_tokens: if type(token) is NavigableString: if not open_pTag: - pTag = Tag(result,'p') + pTag = Tag(result, 'p') open_pTag = True ptc = 0 - pTag.insert(ptc,prepare_string_for_xml(token)) + pTag.insert(ptc, prepare_string_for_xml(token)) ptc += 1 - elif token.name in ['br','b','i','em']: + elif token.name in ['br', 'b', 'i', 'em']: if not open_pTag: - pTag = Tag(result,'p') + pTag = Tag(result, 'p') open_pTag = True ptc = 0 pTag.insert(ptc, token) @@ -4631,7 +4676,7 @@ class CatalogBuilder(object): # Add back
    elems initially removed for elem in elems: - result.insert(rtc,elem) + result.insert(rtc, elem) rtc += 1 return result.renderContents(encoding=None) @@ -4704,7 +4749,7 @@ class CatalogBuilder(object): if rule[1].startswith('#') and rule[2] != '': field = rule[1] pat = rule[2] - exclusion_pairs.append((field,pat)) + exclusion_pairs.append((field, pat)) else: continue if exclusion_pairs: @@ -4713,12 +4758,12 @@ class CatalogBuilder(object): for record in data_set: for exclusion_pair in exclusion_pairs: - field,pat = exclusion_pair + field, pat = exclusion_pair field_contents = self.db.get_field(record['id'], field, index_is_id=True) - if (self.db.metadata_for_field(field)['datatype'] == 'bool' and + if (self.db.metadata_for_field(field)['datatype'] == 'bool' and field_contents is None): # Handle condition where field is a bool and contents is None, # which is displayed as No @@ -4787,7 +4832,7 @@ class CatalogBuilder(object): new_book = deepcopy(book) new_book['author'] = ' & '.join(cloned_authors) new_book['authors'] = list(cloned_authors) - asl = [author_to_author_sort(auth) for auth in cloned_authors] + asl = [author_to_author_sort(auth) for auth in cloned_authors] new_book['author_sort'] = ' & '.join(asl) books_by_author.append(new_book) @@ -4807,12 +4852,12 @@ class CatalogBuilder(object): self.current_step += 1 self.progress_string = description - self.progress_int = float((self.current_step-1)/self.total_steps) + self.progress_int = float((self.current_step - 1) / self.total_steps) if not self.progress_int: self.progress_int = 0.01 self.reporter(self.progress_int, self.progress_string) if self.opts.cli_environment: - self.opts.log(u"%3.0f%% %s" % (self.progress_int*100, self.progress_string)) + self.opts.log(u"%3.0f%% %s" % (self.progress_int * 100, self.progress_string)) def update_progress_micro_step(self, description, micro_step_pct): """ Update calibre's job status UI. @@ -4829,10 +4874,10 @@ class CatalogBuilder(object): (UI): Jobs UI updated """ - step_range = 100/self.total_steps + step_range = 100 / self.total_steps self.progress_string = description - coarse_progress = float((self.current_step-1)/self.total_steps) - fine_progress = float((micro_step_pct*step_range)/100) + coarse_progress = float((self.current_step - 1) / self.total_steps) + fine_progress = float((micro_step_pct * step_range) / 100) self.progress_int = coarse_progress + fine_progress self.reporter(self.progress_int, self.progress_string) @@ -4853,5 +4898,3 @@ class CatalogBuilder(object): outfile = open("%s/%s.ncx" % (self.catalog_path, self.opts.basename), 'w') outfile.write(self.ncx_soup.prettify()) - - diff --git a/src/calibre/library/coloring.py b/src/calibre/library/coloring.py index 4847a48c7d..9366b3e5d7 100644 --- a/src/calibre/library/coloring.py +++ b/src/calibre/library/coloring.py @@ -11,6 +11,8 @@ __docformat__ = 'restructuredtext en' import binascii, re, json from textwrap import dedent +color_row_key = '*row' + class Rule(object): # {{{ SIGNATURE = '# BasicColorRule():' @@ -205,6 +207,7 @@ def conditionable_columns(fm): yield key def displayable_columns(fm): + yield color_row_key for key in fm.displayable_field_keys(): if key not in ('sort', 'author_sort', 'comments', 'formats', 'identifiers', 'path'): diff --git a/src/calibre/library/server/browse.py b/src/calibre/library/server/browse.py index cd5a7c0ffa..a7789e5035 100644 --- a/src/calibre/library/server/browse.py +++ b/src/calibre/library/server/browse.py @@ -11,11 +11,11 @@ from collections import OrderedDict import cherrypy -from calibre.constants import filesystem_encoding -from calibre import isbytestring, force_unicode, fit_image, \ - prepare_string_for_xml +from calibre.constants import filesystem_encoding, config_dir +from calibre import (isbytestring, force_unicode, fit_image, + prepare_string_for_xml, sanitize_file_name2) from calibre.utils.filenames import ascii_filename -from calibre.utils.config import prefs +from calibre.utils.config import prefs, JSONConfig from calibre.utils.icu import sort_key from calibre.utils.magick import Image from calibre.library.comments import comments_to_html @@ -242,6 +242,8 @@ class BrowseServer(object): connect('browse_category_icon', base_href+'/icon/{name}', self.browse_icon) + self.icon_map = JSONConfig('gui').get('tags_browser_category_icons', {}) + # Templates {{{ def browse_template(self, sort, category=True, initial_search=''): @@ -321,10 +323,18 @@ class BrowseServer(object): if not hasattr(self, '__browse_icon_cache__'): self.__browse_icon_cache__ = {} if name not in self.__browse_icon_cache__: - try: - data = I(name, data=True) - except: - raise cherrypy.HTTPError(404, 'no icon named: %r'%name) + if name.startswith('_'): + name = sanitize_file_name2(name[1:]) + try: + with open(os.path.join(config_dir, 'tb_icons', name), 'rb') as f: + data = f.read() + except: + raise cherrypy.HTTPError(404, 'no icon named: %r'%name) + else: + try: + data = I(name, data=True) + except: + raise cherrypy.HTTPError(404, 'no icon named: %r'%name) img = Image() img.load(data) width, height = img.size @@ -359,7 +369,9 @@ class BrowseServer(object): if meta['is_custom'] and category not in displayed_custom_fields: continue # get the icon files - if category in category_icon_map: + if category in self.icon_map: + icon = '_'+quote(self.icon_map[category]) + elif category in category_icon_map: icon = category_icon_map[category] elif meta['is_custom']: icon = category_icon_map['custom:'] diff --git a/src/calibre/translations/af.po b/src/calibre/translations/af.po index c3a6c90545..fdb8a349bf 100644 --- a/src/calibre/translations/af.po +++ b/src/calibre/translations/af.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-08-14 16:03+0000\n" "Last-Translator: Albé Theunissen \n" "Language-Team: Afrikaans \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:27+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:36+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "Doen absolute niks" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "Doen absolute niks" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "Doen absolute niks" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -610,7 +610,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -966,14 +966,14 @@ msgstr "Kaart A" msgid "Card B" msgstr "Kaart B" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "Ontfoutlogboek" @@ -1001,7 +1001,7 @@ msgstr "Kommunikeer met S60-fone" msgid "Communicate with WebOS tablets." msgstr "Kommunikeer met WebOS-tablette." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1023,38 +1023,38 @@ msgstr "" "met iToestelle is ’n gevorderde gebruikersmodus wat nie ondersteun word " "nie

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "Deaktiveer Apple-drywer" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "Aktiveer Apple-drywer" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "Gebruik Reeks as Kategorie in iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1062,61 +1062,61 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "Apple-toestel" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "Kommunikeer met iTunes/iBooks." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." -msgstr "Apple-toestel bespeur, laai tans iTunes, wag asb. …" +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." +msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "Klaar" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" @@ -1126,7 +1126,7 @@ msgstr "" "Skrap boeke d.m.v. die iBooks-toep.\n" "Klik ‘Toon Detail’ vir ’n lys." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -1134,22 +1134,22 @@ msgstr "" "Sommige dekbladkuns kom nie omgeskakel word nie.\n" "Klik ‘Toon Detail’ vir ’n lys." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1157,13 +1157,13 @@ msgstr "" msgid "News" msgstr "Nuus" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "Katalogus" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "Kommunikeer met iTunes." @@ -1209,10 +1209,10 @@ msgstr "Bambook" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1226,9 +1226,9 @@ msgstr "Kry lys van boeke op toestel…" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1238,9 +1238,9 @@ msgstr "Dra boeke na toestel oor…" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1262,8 +1262,8 @@ msgstr "Verwyder boeke van toestel…" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1566,7 +1566,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1574,17 +1574,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1592,12 +1592,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "Toon Voorskoue" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1605,12 +1605,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "Toon Aanbevelings" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1618,7 +1617,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1691,63 +1690,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1827,84 +1845,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1920,11 +1938,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "Kommunikeer met die Nokia 770 internettablet." @@ -1962,12 +1975,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "Alles volgens titel" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "Alles volgens outeur" @@ -2071,77 +2084,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2149,33 +2162,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -4028,27 +4041,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4066,12 +4079,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4080,11 +4109,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4092,7 +4121,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4104,8 +4133,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4445,7 +4474,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4456,11 +4485,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4508,165 +4537,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -5022,7 +5051,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5181,7 +5210,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5244,16 +5273,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5451,23 +5480,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5622,8 +5651,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5659,7 +5688,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5765,7 +5794,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5920,7 +5949,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -6013,7 +6042,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6114,7 +6143,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6290,7 +6319,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6435,7 +6464,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6443,7 +6472,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6465,7 +6494,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6520,60 +6549,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6627,7 +6657,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6659,12 +6689,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6745,19 +6775,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6765,115 +6795,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6881,102 +6915,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8288,7 +8322,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8656,8 +8690,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8857,7 +8891,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8895,89 +8929,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9130,26 +9164,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9494,37 +9573,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9573,7 +9652,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9627,8 +9706,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9647,13 +9726,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9733,7 +9812,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9744,13 +9823,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9761,13 +9840,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9781,12 +9860,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9912,8 +9991,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9923,69 +10002,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9993,7 +10072,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -10003,7 +10082,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -10018,58 +10097,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10777,8 +10856,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10817,7 +10896,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11391,12 +11470,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11666,7 +11745,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -12004,7 +12083,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12180,7 +12259,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12189,7 +12268,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12213,7 +12292,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12464,32 +12543,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12497,7 +12576,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12506,30 +12585,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12634,7 +12713,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12654,10 +12733,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12736,7 +12811,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12805,22 +12880,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13114,15 +13183,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13260,15 +13329,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13276,27 +13345,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13304,38 +13373,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13389,7 +13458,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13402,11 +13471,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13426,56 +13495,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13483,39 +13568,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13627,141 +13696,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13786,7 +13859,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13795,7 +13868,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13805,49 +13878,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14394,145 +14467,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14541,11 +14614,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14555,11 +14636,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14568,22 +14649,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14592,31 +14673,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15379,7 +15460,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16224,7 +16305,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16270,7 +16351,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16300,46 +16381,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16361,13 +16442,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16460,7 +16541,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16499,105 +16580,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16647,31 +16741,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16679,11 +16773,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16691,7 +16785,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16699,16 +16793,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16731,86 +16825,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16853,7 +16947,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17710,7 +17804,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -18025,13 +18119,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18144,7 +18238,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18156,7 +18250,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18165,7 +18259,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18173,7 +18267,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18181,7 +18275,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18191,7 +18285,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18200,7 +18294,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18214,7 +18308,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18222,7 +18316,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18230,7 +18324,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18238,7 +18332,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18246,7 +18340,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18254,7 +18348,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18262,7 +18356,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18270,7 +18372,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18281,7 +18383,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18292,7 +18394,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18302,7 +18404,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18310,7 +18412,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18319,174 +18421,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18583,7 +18685,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18607,18 +18709,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18627,55 +18729,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18686,11 +18792,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18699,15 +18805,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18717,11 +18823,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18731,15 +18837,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18754,7 +18860,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18764,34 +18870,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18802,28 +18908,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18834,13 +18940,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18860,11 +18966,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18875,30 +18981,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18910,17 +19016,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18929,20 +19035,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18952,15 +19058,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18973,40 +19079,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -19020,13 +19126,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19034,34 +19140,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19076,18 +19182,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19095,33 +19201,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19208,91 +19314,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19301,7 +19407,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19310,7 +19416,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19318,41 +19424,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19410,127 +19516,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19614,29 +19720,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19787,7 +19893,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20615,7 +20721,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20856,67 +20962,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/ar.po b/src/calibre/translations/ar.po index 9ecbd9ab3c..ee97f755e1 100644 --- a/src/calibre/translations/ar.po +++ b/src/calibre/translations/ar.po @@ -8,18 +8,18 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.9.7\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" -"PO-Revision-Date: 2012-11-26 06:57+0000\n" -"Last-Translator: الأستاذ عوض الغامدي _ منتديات عميد التعريب \n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" +"PO-Revision-Date: 2012-11-29 17:38+0000\n" +"Last-Translator: Kovid Goyal \n" "Language-Team: awadh alghaamdi \n" -"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= " "3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n" -"X-Generator: Launchpad (build 16309)\n" -"X-Launchpad-Export-Date: 2012-11-27 05:21+0000\n" +"X-Launchpad-Export-Date: 2012-12-22 04:37+0000\n" +"X-Generator: Launchpad (build 16378)\n" +"Language: ar\n" "X-Poedit-SourceCharset: UTF-8\n" #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:107 @@ -77,8 +77,8 @@ msgstr "يفعل شئ أى" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -150,8 +150,8 @@ msgstr "يفعل شئ أى" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -175,44 +175,44 @@ msgstr "يفعل شئ أى" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -667,7 +667,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "تحكم في كيفية تحميل البيانات الوصفية للكتب من الشبكة" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -1028,14 +1028,14 @@ msgstr "" msgid "Card B" msgstr "بلكبيبي" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "تصحيح السجل" @@ -1063,7 +1063,7 @@ msgstr "تواصل معا هواتف S60." msgid "Communicate with WebOS tablets." msgstr "يتصل مع المتصفحات اللوحية التي تستخدم نظام .WebOS" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1083,31 +1083,31 @@ msgstr "" "القائمة

    تمكين السائق أبل لﻻتصال مباشر هو iDevices المتقدمة المستخدم وضع " "معتمد. " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "شكل تعطيل تشغيل أبل" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "تمكن سائق أبل" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "استخدام السلسلة والفئة في عاطفية تيونز/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "استخدام السلسلة والفئة في عاطفية تيونز/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "مخبأ يغطي من عاطفية تيونز/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "تمكين ذاكرة التخزين المؤقت ويغطي العرض من عاطفية تيونز/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " @@ -1116,7 +1116,7 @@ msgstr "" "تمكين نسخ الملفات الى عاطفية تيونز مجلد وسائل الإعلام ليالي %s \"في تفضيلات " "شكل أي تيونز | متقدم" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1128,19 +1128,19 @@ msgstr "" "التكوين. تمكين

    ويشير إلى أن يتم تكوين شكل أي تيونز لتخزين نسخة في مجلد " "وسائل الإعلام تيونز." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "جهاز أبل" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "التواصل عن طريق أي تيونز/iBooks." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." -msgstr "تم الكشف عن جهاز أبل، يتم تشغيل أي تيونز، الرجاء الانتظار..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." +msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." @@ -1148,43 +1148,43 @@ msgstr "" "يمكن نسخ الكتب مباشرة من iDevice. اسحب من مكتبة أي تيونز لسطح المكتب، ثم ثم " "إلى إطار من النظم مكتبة." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "تحديث الجهاز القائمة الفوقية..." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "%(num)d من %(tot)d" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "تم" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" @@ -1194,7 +1194,7 @@ msgstr "" "حذف باستخدام التطبيق iBooks.\n" "انقر على \"إظهار التفاصيل\" للقائمة." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -1202,22 +1202,22 @@ msgstr "" "يمكن أن تغطي بعض الفن يمكن تحويلها.\n" "انقر على \"إظهار التفاصيل\" للقائمة." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1225,13 +1225,13 @@ msgstr "" msgid "News" msgstr "الأخبار" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "الفهرس" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "تواصل معا أي تيونز" @@ -1280,10 +1280,10 @@ msgstr "بامبوك" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1297,9 +1297,9 @@ msgstr "يجري إحصاء قائمة كتب من الجهاز..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1309,9 +1309,9 @@ msgstr "يجري تحويل الكتب إلى الجهاز..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1333,8 +1333,8 @@ msgstr "يجري حذف الكتب من الجهاز..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1641,7 +1641,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1649,17 +1649,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1667,12 +1667,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1680,12 +1680,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1693,7 +1692,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1768,63 +1767,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1904,84 +1922,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "يجري إحصاء مجلة الجهاز..." -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1997,11 +2015,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "التواصل مع البرنامج 770" @@ -2039,12 +2052,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "كل عروض حسب العنوان" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "جميع البلاغ" @@ -2163,77 +2176,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2241,33 +2254,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -4246,27 +4259,27 @@ msgstr "كلا" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "العنوان" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "المؤلف أو المؤلفون" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "الناشر" @@ -4284,12 +4297,28 @@ msgstr "التعليقات" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "الوسوم" @@ -4298,11 +4327,11 @@ msgstr "الوسوم" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4314,7 +4343,7 @@ msgstr[4] "السلسلة" msgstr[5] "السلسلة" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4326,8 +4355,8 @@ msgstr "ختم التوقيت" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "ذلك" @@ -4678,7 +4707,7 @@ msgid "%s format books are not supported" msgstr "الكتب بتهيئة %s ليست مدعومة" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4689,11 +4718,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "التقييم" @@ -4741,165 +4770,165 @@ msgstr "يمكن العثور على pdftohtml، تحقق في المسار ال msgid "Table of Contents:" msgstr "جدول المحتويات:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "تأكيد قبل الحذف" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "إخطار عندما يتوفر إصدار جديد" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "الإفتراضي للتحويل إلى LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "الخيارات لمستعرض كتب LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "تهيئات التي تعرض عن طريق المستعرض الداخلي" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "إظهار أيقونة صينية النظام" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "رفع أخبار تم تنزيلها إلى الجهاز" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -5260,7 +5289,7 @@ msgstr "التبديل/مكتبة إنشاء..." #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5419,7 +5448,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5483,16 +5512,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "إنشاء فهرس الكتب في مكتبة العيار الخاص" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "يمكن تحويله" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5693,23 +5722,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "حذف الكتب من الجهاز" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5864,8 +5893,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5901,7 +5930,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -6012,7 +6041,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "مساعدة" @@ -6167,7 +6196,7 @@ msgid "Click the show details button to see which ones." msgstr "انقر على زر إظهار التفاصيل لمعرفة عاطفية منها." #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "عرض تفاصيل الكتاب" @@ -6260,7 +6289,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6361,7 +6390,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "إلغاء" @@ -6537,7 +6566,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6682,7 +6711,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6690,7 +6719,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6712,7 +6741,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6767,60 +6796,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "معرفات" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "انقر نقراً مزدوجاً لفتح نافذة تفاصيل الكتاب" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "المسار" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6874,7 +6904,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6906,12 +6936,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6992,19 +7022,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -7012,115 +7042,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "الاسم" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -7128,102 +7162,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8527,7 +8561,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8895,8 +8929,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -9096,7 +9130,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -9134,89 +9168,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "الجهاز: " -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr " تم كشفه." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9369,26 +9403,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9733,37 +9812,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "ختيار مكتبتك العيار" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9812,7 +9891,7 @@ msgstr "&طور:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9866,8 +9945,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9886,13 +9965,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9972,7 +10051,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9983,13 +10062,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -10000,13 +10079,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -10020,12 +10099,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -10151,8 +10230,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -10162,69 +10241,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -10232,7 +10311,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -10242,7 +10321,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -10257,58 +10336,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -11019,8 +11098,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "المؤلفون" @@ -11059,7 +11138,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "بحث" @@ -11633,12 +11712,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11912,7 +11991,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -12250,7 +12329,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12426,7 +12505,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12435,7 +12514,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12459,7 +12538,7 @@ msgstr "متصل " #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "تفاصيل الكتاب" @@ -12710,32 +12789,32 @@ msgstr "نجمة" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "الحجم (ميجابايت)" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "معدّل" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12743,7 +12822,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12752,30 +12831,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "في المكتبة" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "الحجم" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12880,7 +12959,7 @@ msgid "Previous Page" msgstr "قسم السابقة" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12900,10 +12979,6 @@ msgstr "المباراة القادمة" msgid "Open ebook" msgstr "أسعار الكتب الإلكترونية" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12982,7 +13057,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "تلف قاعدة البيانات" @@ -13051,22 +13126,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13364,15 +13433,15 @@ msgid "Edit Metadata" msgstr "تحرير البيانات الوصفية" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "التالي" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13510,15 +13579,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13526,28 +13595,28 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" "فشل في تحميل البيانات الوصفية. انقر فوق إظهار لمعرفة التفاصيل التفاصيل" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13558,39 +13627,39 @@ msgstr "" "تحديداً. على الصفحة المثال، عاطفية تستخدم إلا البلاغ اسم العائلة وكلمة واحدة " "مميزة من العنوان.

    لرؤية السجل الكامل، انقر فوق إظهار التفاصيل.." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" "فشل في تحميل عاطفية يغطي، انقر فوق \"عرض التفاصيل\" لﻻطﻻع على التفاصيل." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13644,7 +13713,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13657,11 +13726,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13681,18 +13750,18 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." @@ -13700,39 +13769,55 @@ msgstr "" "تبديل الاسم الأول واسم العائلة للمؤلف. يؤثر هذا التعريف فقط للقراءة من أسماء " "الملفات." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "واﻻسم الأول واسم العائلة المؤلف علوي" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13740,39 +13825,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13886,141 +13955,145 @@ msgstr "&استخدم المستعرض الداخلي:" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -14045,7 +14118,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -14054,7 +14127,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -14064,49 +14137,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14661,145 +14734,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "صغير" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "كبير" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "متوسط" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "بواسطة الحرف الأول" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "&إختر البريدالالكتروني (يحتاج إعادة تشغيل):" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "تحرك لأعلى" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14808,11 +14881,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14822,11 +14903,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14835,22 +14916,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14859,31 +14940,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15646,7 +15727,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "فشل في تشغيل خادم المحتوى" @@ -16492,7 +16573,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16538,7 +16619,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16568,46 +16649,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "بحوث" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "ابحث عن اسم مكرر" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16629,13 +16710,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16728,7 +16809,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "الفرز حسب" @@ -16767,105 +16848,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16915,31 +17009,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "&تبرع لدعم كاليبر" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16947,11 +17041,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16959,7 +17053,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16967,16 +17061,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "خطأ في التحويل" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16999,86 +17093,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "تحديث جديد متوفر!" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "و الحصول على التحديث" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "العثور على التحديث" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -17121,7 +17215,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17950,7 +18044,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "إلغاء" @@ -18265,13 +18359,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18384,7 +18478,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18396,7 +18490,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18405,7 +18499,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18413,7 +18507,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18421,7 +18515,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18431,7 +18525,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18440,7 +18534,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18454,7 +18548,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18462,7 +18556,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18470,7 +18564,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18478,7 +18572,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18486,7 +18580,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18494,7 +18588,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18502,7 +18596,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18510,7 +18612,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18521,7 +18623,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18532,7 +18634,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18542,7 +18644,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18550,7 +18652,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18559,174 +18661,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18825,7 +18927,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18849,18 +18951,18 @@ msgstr "الحقول غير صالحة. الحقول المتوفرة:" msgid "Invalid sort field. Available fields:" msgstr "حقل الترتيب غير صالح. الحقول المتوفرة:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18869,55 +18971,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18928,11 +19034,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "يجب أن تخصص على الأقل كتاباً واحداً للحذف" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18941,15 +19047,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18959,11 +19065,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18973,15 +19079,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18996,7 +19102,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -19006,34 +19112,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -19044,28 +19150,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -19076,13 +19182,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -19102,11 +19208,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -19117,30 +19223,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -19152,17 +19258,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -19171,20 +19277,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "إظهار التفاصيل لكل عمود." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -19194,15 +19300,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -19215,40 +19321,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -19262,13 +19368,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19276,34 +19382,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "غير معروف تقرير الاختيار" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19318,18 +19424,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19337,33 +19443,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19450,91 +19556,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "سلسلة" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "التقييم" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "التاريخ عند آخر تعديل في البيانات الوصفية لهذا السجل الكتاب" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19543,7 +19649,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19552,7 +19658,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19560,41 +19666,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19652,127 +19758,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "جميع الكتب" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "الأجد" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "الأولى" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "الأخير" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "الكتب تصفح %d" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "معدل التقييم" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "النجوم %d" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "شهرة" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "الإستقبال" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "اختيار فئة للتصفح من خلالها:" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "التصفح بواسطة" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "للاعلا" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "احصل" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "تفاصيل" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "رابط دائم" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "وصلة دائمة لهذا الكتاب" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "البحث" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19862,29 +19968,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "أنشأه " -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -20035,7 +20141,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20873,7 +20979,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -21114,67 +21220,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "تطبيق" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "استعادة الإفتراضيات" diff --git a/src/calibre/translations/ast.po b/src/calibre/translations/ast.po index 66604d06c2..f7bd439bc2 100644 --- a/src/calibre/translations/ast.po +++ b/src/calibre/translations/ast.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2011-09-26 16:28+0000\n" "Last-Translator: Xandru \n" "Language-Team: Asturian \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:28+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:37+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "Nun fai nada" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "Nun fai nada" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "Nun fai nada" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -614,7 +614,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -959,14 +959,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -994,7 +994,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1006,38 +1006,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1045,89 +1045,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1135,13 +1135,13 @@ msgstr "" msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1185,10 +1185,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1202,9 +1202,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1214,9 +1214,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1238,8 +1238,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1538,7 +1538,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1546,17 +1546,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1564,12 +1564,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1577,12 +1577,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1590,7 +1589,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1663,63 +1662,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1799,84 +1817,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1892,11 +1910,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1934,12 +1947,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2043,77 +2056,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2121,33 +2134,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3997,27 +4010,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4035,12 +4048,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4049,11 +4078,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4061,7 +4090,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4073,8 +4102,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4414,7 +4443,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4425,11 +4454,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4477,165 +4506,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4991,7 +5020,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5150,7 +5179,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5213,16 +5242,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5420,23 +5449,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5591,8 +5620,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5628,7 +5657,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5734,7 +5763,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5889,7 +5918,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5982,7 +6011,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6083,7 +6112,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6259,7 +6288,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6404,7 +6433,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6412,7 +6441,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6434,7 +6463,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6489,60 +6518,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6596,7 +6626,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6628,12 +6658,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6714,19 +6744,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6734,115 +6764,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6850,102 +6884,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8257,7 +8291,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8625,8 +8659,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8826,7 +8860,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8864,89 +8898,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9099,26 +9133,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9463,37 +9542,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9542,7 +9621,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9596,8 +9675,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9616,13 +9695,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9702,7 +9781,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9713,13 +9792,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9730,13 +9809,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9750,12 +9829,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9881,8 +9960,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9892,69 +9971,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9962,7 +10041,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9972,7 +10051,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9987,58 +10066,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10746,8 +10825,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10786,7 +10865,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11360,12 +11439,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11635,7 +11714,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11973,7 +12052,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12149,7 +12228,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12158,7 +12237,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12182,7 +12261,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12433,32 +12512,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12466,7 +12545,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12475,30 +12554,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12603,7 +12682,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12623,10 +12702,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12705,7 +12780,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12774,22 +12849,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13083,15 +13152,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13229,15 +13298,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13245,27 +13314,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13273,38 +13342,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13358,7 +13427,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13371,11 +13440,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13395,56 +13464,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13452,39 +13537,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13596,141 +13665,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13755,7 +13828,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13764,7 +13837,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13774,49 +13847,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14363,145 +14436,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14510,11 +14583,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14524,11 +14605,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14537,22 +14618,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14561,31 +14642,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15348,7 +15429,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16193,7 +16274,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16239,7 +16320,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16269,46 +16350,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16330,13 +16411,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16429,7 +16510,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16468,105 +16549,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16616,31 +16710,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16648,11 +16742,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16660,7 +16754,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16668,16 +16762,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16700,86 +16794,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16822,7 +16916,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17679,7 +17773,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17994,13 +18088,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18113,7 +18207,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18125,7 +18219,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18134,7 +18228,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18142,7 +18236,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18150,7 +18244,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18160,7 +18254,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18169,7 +18263,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18183,7 +18277,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18191,7 +18285,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18199,7 +18293,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18207,7 +18301,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18215,7 +18309,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18223,7 +18317,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18231,7 +18325,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18239,7 +18341,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18250,7 +18352,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18261,7 +18363,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18271,7 +18373,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18279,7 +18381,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18288,174 +18390,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18552,7 +18654,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18576,18 +18678,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18596,55 +18698,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18655,11 +18761,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18668,15 +18774,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18686,11 +18792,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18700,15 +18806,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18723,7 +18829,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18733,34 +18839,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18771,28 +18877,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18803,13 +18909,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18829,11 +18935,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18844,30 +18950,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18879,17 +18985,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18898,20 +19004,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18921,15 +19027,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18942,40 +19048,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18989,13 +19095,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19003,34 +19109,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19045,18 +19151,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19064,33 +19170,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19177,91 +19283,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19270,7 +19376,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19279,7 +19385,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19287,41 +19393,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19379,127 +19485,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19583,29 +19689,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19756,7 +19862,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20584,7 +20690,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20825,67 +20931,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/az.po b/src/calibre/translations/az.po index a9414b51af..77ae424bca 100644 --- a/src/calibre/translations/az.po +++ b/src/calibre/translations/az.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-08-07 14:00+0000\n" "Last-Translator: Emin Mastizadeh \n" "Language-Team: Azerbaijani \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:28+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:37+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "Heç bir şey etmir" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "Heç bir şey etmir" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "Heç bir şey etmir" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -611,7 +611,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -957,14 +957,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -992,7 +992,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1004,38 +1004,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1043,89 +1043,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1133,13 +1133,13 @@ msgstr "" msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1183,10 +1183,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1200,9 +1200,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1212,9 +1212,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1236,8 +1236,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1536,7 +1536,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1544,17 +1544,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1562,12 +1562,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1575,12 +1575,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1588,7 +1587,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1661,63 +1660,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1797,84 +1815,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1890,11 +1908,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1932,12 +1945,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2041,77 +2054,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2119,33 +2132,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3995,27 +4008,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4033,12 +4046,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4047,11 +4076,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4059,7 +4088,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4071,8 +4100,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4412,7 +4441,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4423,11 +4452,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4475,165 +4504,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4989,7 +5018,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5148,7 +5177,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5211,16 +5240,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5418,23 +5447,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5589,8 +5618,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5626,7 +5655,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5732,7 +5761,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5887,7 +5916,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5980,7 +6009,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6081,7 +6110,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6257,7 +6286,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6402,7 +6431,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6410,7 +6439,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6432,7 +6461,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6487,60 +6516,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6594,7 +6624,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6626,12 +6656,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6712,19 +6742,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6732,115 +6762,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6848,102 +6882,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8255,7 +8289,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8623,8 +8657,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8824,7 +8858,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8862,89 +8896,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9097,26 +9131,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9461,37 +9540,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9540,7 +9619,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9594,8 +9673,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9614,13 +9693,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9700,7 +9779,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9711,13 +9790,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9728,13 +9807,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9748,12 +9827,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9879,8 +9958,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9890,69 +9969,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9960,7 +10039,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9970,7 +10049,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9985,58 +10064,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10744,8 +10823,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10784,7 +10863,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11358,12 +11437,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11633,7 +11712,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11971,7 +12050,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12147,7 +12226,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12156,7 +12235,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12180,7 +12259,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12431,32 +12510,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12464,7 +12543,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12473,30 +12552,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12601,7 +12680,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12621,10 +12700,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12703,7 +12778,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12772,22 +12847,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13081,15 +13150,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13227,15 +13296,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13243,27 +13312,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13271,38 +13340,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13356,7 +13425,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13369,11 +13438,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13393,56 +13462,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13450,39 +13535,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13594,141 +13663,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13753,7 +13826,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13762,7 +13835,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13772,49 +13845,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14361,145 +14434,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14508,11 +14581,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14522,11 +14603,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14535,22 +14616,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14559,31 +14640,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15346,7 +15427,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16191,7 +16272,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16237,7 +16318,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16267,46 +16348,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16328,13 +16409,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16427,7 +16508,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16466,105 +16547,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16614,31 +16708,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16646,11 +16740,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16658,7 +16752,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16666,16 +16760,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16698,86 +16792,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16820,7 +16914,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17677,7 +17771,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17992,13 +18086,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18111,7 +18205,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18123,7 +18217,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18132,7 +18226,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18140,7 +18234,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18148,7 +18242,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18158,7 +18252,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18167,7 +18261,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18181,7 +18275,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18189,7 +18283,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18197,7 +18291,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18205,7 +18299,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18213,7 +18307,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18221,7 +18315,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18229,7 +18323,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18237,7 +18339,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18248,7 +18350,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18259,7 +18361,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18269,7 +18371,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18277,7 +18379,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18286,174 +18388,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18550,7 +18652,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18574,18 +18676,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18594,55 +18696,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18653,11 +18759,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18666,15 +18772,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18684,11 +18790,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18698,15 +18804,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18721,7 +18827,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18731,34 +18837,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18769,28 +18875,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18801,13 +18907,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18827,11 +18933,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18842,30 +18948,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18877,17 +18983,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18896,20 +19002,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18919,15 +19025,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18940,40 +19046,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18987,13 +19093,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19001,34 +19107,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19043,18 +19149,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19062,33 +19168,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19175,91 +19281,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19268,7 +19374,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19277,7 +19383,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19285,41 +19391,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19377,127 +19483,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19581,29 +19687,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19754,7 +19860,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20582,7 +20688,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20823,67 +20929,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/ber.po b/src/calibre/translations/ber.po index bcd7f0eb45..0cb592cedb 100644 --- a/src/calibre/translations/ber.po +++ b/src/calibre/translations/ber.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-10-14 04:57+0000\n" "Last-Translator: Walid AMMOU \n" "Language-Team: Berber (Other) \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:38+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -608,7 +608,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -953,14 +953,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1000,38 +1000,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1039,89 +1039,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1129,13 +1129,13 @@ msgstr "" msgid "News" msgstr "ⵉⵏⵖⵎⵉⵙⵏ" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1179,10 +1179,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1196,9 +1196,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1208,9 +1208,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1232,8 +1232,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1532,7 +1532,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1540,17 +1540,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1558,12 +1558,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1571,12 +1571,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1584,7 +1583,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1657,63 +1656,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1793,84 +1811,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1886,11 +1904,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1928,12 +1941,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2037,77 +2050,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2115,33 +2128,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3991,27 +4004,27 @@ msgstr "ⵓⵀⵓ" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "ⴰⵣⵡⵍ" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4029,12 +4042,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4043,11 +4072,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4055,7 +4084,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4067,8 +4096,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4408,7 +4437,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4419,11 +4448,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4471,165 +4500,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "ⵜⴰⵣⴳⵍⵜ:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4985,7 +5014,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5144,7 +5173,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5207,16 +5236,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5414,23 +5443,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5585,8 +5614,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5622,7 +5651,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5728,7 +5757,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5883,7 +5912,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5976,7 +6005,7 @@ msgid "this book" msgstr "ⴰⴷⵍⵉⵙ ⴰⴷ" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6077,7 +6106,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6253,7 +6282,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6398,7 +6427,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6406,7 +6435,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6428,7 +6457,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6483,60 +6512,61 @@ msgstr "" msgid "Donate" msgstr "ⵜⵉⴽⴽⵉ" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "ⵙⵏⵖⵍ ⴰⵖⴰⵎⵓⵙ" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "ⴷⵃⵉ ⴰⵖⴰⵎⵓⵙ" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6590,7 +6620,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6622,12 +6652,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6708,19 +6738,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6728,115 +6758,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "ⵉⵙⵎ" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "&ⴰⵣⵡⵍ" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "&ⵉⵏⴰⵡⵏ" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6844,102 +6878,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "&ⴷⴰⵜ" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "&ⴷⴼⴼⵉⵔ" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8251,7 +8285,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "&ⵙⵙⵏⵊⵎ" @@ -8619,8 +8653,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8820,7 +8854,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8858,89 +8892,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9093,26 +9127,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9457,37 +9536,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9536,7 +9615,7 @@ msgstr "&ⵉⴼⵔⵙ:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "&ⵓⴽⴽⵉ" @@ -9590,8 +9669,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9610,13 +9689,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9696,7 +9775,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9707,13 +9786,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9724,13 +9803,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9744,12 +9823,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9875,8 +9954,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9886,69 +9965,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9956,7 +10035,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9966,7 +10045,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9981,58 +10060,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10740,8 +10819,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10780,7 +10859,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11354,12 +11433,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11629,7 +11708,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11967,7 +12046,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12143,7 +12222,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12152,7 +12231,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12176,7 +12255,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12427,32 +12506,32 @@ msgstr "ⵉⵜⵔⴰⵏ" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12460,7 +12539,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12469,30 +12548,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12597,7 +12676,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12617,10 +12696,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12699,7 +12774,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12768,22 +12843,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13077,15 +13146,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13223,15 +13292,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13239,27 +13308,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13267,38 +13336,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13352,7 +13421,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13365,11 +13434,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13389,56 +13458,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13446,39 +13531,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13590,141 +13659,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13749,7 +13822,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13758,7 +13831,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13768,49 +13841,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14357,145 +14430,145 @@ msgstr "ⵜⴰⵎⴰⵎⴽⵜ ⵏ ⴽⴰⵍⵉⴱⵔ" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "ⴰⵎⵉⵔⵉⵡ" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "ⴰⵎⵊⴰⵀⴷⵉ" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "ⴰⴱⴷⴰ" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "ⵊⵊⵓⵏ" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr " ⵏⵖⴷⴷ " -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14504,11 +14577,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14518,11 +14599,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14531,22 +14612,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14555,31 +14636,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15342,7 +15423,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16187,7 +16268,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "&ⵇⵇⵏ" @@ -16233,7 +16314,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16263,46 +16344,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16324,13 +16405,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16423,7 +16504,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16462,105 +16543,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16610,31 +16704,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16642,11 +16736,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16654,7 +16748,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16662,16 +16756,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16694,86 +16788,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16816,7 +16910,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17673,7 +17767,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17988,13 +18082,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "ⵢⴰⵀ" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "ⵓⵀⵓ" @@ -18107,7 +18201,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18119,7 +18213,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18128,7 +18222,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18136,7 +18230,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18144,7 +18238,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18154,7 +18248,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18163,7 +18257,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18177,7 +18271,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18185,7 +18279,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18193,7 +18287,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18201,7 +18295,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18209,7 +18303,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18217,7 +18311,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18225,7 +18319,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18233,7 +18335,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18244,7 +18346,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18255,7 +18357,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18265,7 +18367,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18273,7 +18375,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18282,174 +18384,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18546,7 +18648,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18570,18 +18672,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18590,55 +18692,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18649,11 +18755,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18662,15 +18768,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18680,11 +18786,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18694,15 +18800,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18717,7 +18823,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18727,34 +18833,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18765,28 +18871,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18797,13 +18903,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18823,11 +18929,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18838,30 +18944,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18873,17 +18979,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18892,20 +18998,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18915,15 +19021,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18936,40 +19042,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18983,13 +19089,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -18997,34 +19103,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19039,18 +19145,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19058,33 +19164,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19171,91 +19277,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19264,7 +19370,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19273,7 +19379,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19281,41 +19387,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19373,127 +19479,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19577,29 +19683,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19750,7 +19856,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20578,7 +20684,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20819,67 +20925,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "ⵓⴽⴽⵉ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "ⵙⵙⵏⵊⵎ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "ⴰⵏⴼ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "&ⵢⴰⵀ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "ⵢⴰⵀ ⵉ &ⵇⵇⴰⵃ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "&ⵓⵀⵓ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "ⵓ&ⵀⵓ ⵉ ⵇⵇⴰⵃ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "ⵙⵙⵏⵊⵎ ⵇⵇⴰⵃ" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index da5fd141a2..c54279b2bc 100644 --- a/src/calibre/translations/bg.po +++ b/src/calibre/translations/bg.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-10-24 13:23+0000\n" "Last-Translator: Nelly Hoang \n" "Language-Team: bg\n" @@ -14,8 +14,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:39+0000\n" +"X-Generator: Launchpad (build 16378)\n" "Generated-By: pygettext.py 1.5\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 @@ -35,8 +35,8 @@ msgstr "Не прави абсолютно нищо" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "Не прави абсолютно нищо" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "Не прави абсолютно нищо" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -639,7 +639,7 @@ msgstr "" "Управление на това как calibre изтегля метаданни за е-книги от Интернет" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "Игнорирани устройства" @@ -1017,14 +1017,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -1055,7 +1055,7 @@ msgstr "Комуникирай със S60 устройства" msgid "Communicate with WebOS tablets." msgstr "Сподели с WebOS таблети" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1077,32 +1077,32 @@ msgstr "" "към i-устройството е неподдържан потребителски режим за " "напреднали.

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "Изключване на Apple драйвера" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "Включване на Apple драйвъра" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "Използвай Серии като категория в iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" "Разрешете използването на името на сериите като iTunes жанр, iBooks категория" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "Кеширай обложки от iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "Разреши кеширане и показване на обложки от iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " @@ -1111,7 +1111,7 @@ msgstr "" "\"Копирай файлове/те в iTunes Media папка %s\" се разрешава от меню iTunes " "PreferencesІAdvanced" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1124,20 +1124,19 @@ msgstr "" "директорията с конфигурациите на calibre .

    Разрешаването и указва, че " "iTunes е конфигуриран да запазва копия във вашата iTunes Media папка.

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "Apple устройство" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "Комуникирай с iTunes/iBooks." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -"Apple устройство разпознато, стартиране на iTunes, моля изчакайте ..." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." @@ -1146,43 +1145,43 @@ msgstr "" "библиотеката до десктопа, а след това добавете в прозорец Библиотека на " "calibre." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "Обновяване на списъка с метаданни на устройството" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "%(num)d от %(tot)d" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "завършено" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" @@ -1192,7 +1191,7 @@ msgstr "" "Изтрийте, използвайки iBooks апликацията.\n" "Натиснете \"Show Details\", за да видите списъка." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -1200,22 +1199,22 @@ msgstr "" "Някои от кориците на бяха конвертирани.\n" "Натиснете \"Show Details\", за да видите списъка." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1223,13 +1222,13 @@ msgstr "" msgid "News" msgstr "Новини" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "Каталог" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "Комуникира с iTunes." @@ -1273,10 +1272,10 @@ msgstr "Bambook" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1290,9 +1289,9 @@ msgstr "Взимане на списък с книги от устройство #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1302,9 +1301,9 @@ msgstr "Прехвърляне на книги към устройството.. #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1326,8 +1325,8 @@ msgstr "Премахване на книги от устройството..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1626,7 +1625,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1634,17 +1633,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1652,12 +1651,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1665,12 +1664,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1678,7 +1676,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1751,63 +1749,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1887,84 +1904,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1980,11 +1997,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -2022,12 +2034,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "Коментарите са премахнати, тъй като SONY четеца се затруднява с тях" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "Всички по заглавие" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "Всички по автор" @@ -2144,77 +2156,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2222,33 +2234,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -4103,27 +4115,27 @@ msgstr "Не" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "Заглавие" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "Автор(и)" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "Издател" @@ -4141,12 +4153,28 @@ msgstr "Коментари" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "Етикети" @@ -4155,11 +4183,11 @@ msgstr "Етикети" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4167,7 +4195,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4179,8 +4207,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "Публикувана" @@ -4520,7 +4548,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4531,11 +4559,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "Рейтинг" @@ -4583,165 +4611,165 @@ msgstr "" msgid "Table of Contents:" msgstr "Съдържание:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "Показване на икона в системния панел" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "Избор на файлове" @@ -5097,7 +5125,7 @@ msgstr "Превключване/създаване на библиотека... #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5256,7 +5284,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5319,16 +5347,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "Не може да се конвертира" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "Започване на конвертиране на %d книга(и)" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5526,23 +5554,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5697,8 +5725,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5734,7 +5762,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5840,7 +5868,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "Помощ" @@ -5995,7 +6023,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "Показване на детайлите на книгата" @@ -6088,7 +6116,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6189,7 +6217,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6365,7 +6393,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "Няма книги" @@ -6510,7 +6538,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6518,7 +6546,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6540,7 +6568,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6595,60 +6623,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "Колекции" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "Път" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6702,7 +6731,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6734,12 +6763,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6820,19 +6849,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6840,115 +6869,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "Име" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6956,102 +6989,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8363,7 +8396,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8731,8 +8764,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8932,7 +8965,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "Няма подходящи формати" @@ -8970,89 +9003,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "Устройство: " -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "Няма устройство" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "Няма карта" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "Няма място на устройството" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9205,26 +9238,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "Конфигуриране" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9569,37 +9647,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9648,7 +9726,7 @@ msgstr "&Профил:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9702,8 +9780,8 @@ msgid "Location" msgstr "Местоположение" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9722,13 +9800,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9808,7 +9886,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "Не са намерени съвпадения" @@ -9819,13 +9897,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "Главни букви" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "Малки букви" @@ -9836,13 +9914,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9856,12 +9934,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9987,8 +10065,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9998,69 +10076,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "Заглавие/Автор" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "Стандартни метаданни" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "Потребителски метаданни" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "Търсене/Замяна" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "Книга %d:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -10068,7 +10146,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -10078,7 +10156,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -10093,58 +10171,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10852,8 +10930,8 @@ msgstr "Прекъсване..." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "Автори" @@ -10892,7 +10970,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "Търсене" @@ -11466,12 +11544,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11741,7 +11819,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -12079,7 +12157,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12255,7 +12333,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12264,7 +12342,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12288,7 +12366,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12539,32 +12617,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "Размер (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12572,7 +12650,7 @@ msgstr "" msgid "Permission denied" msgstr "Достъпът е отказан" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12581,30 +12659,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12709,7 +12787,7 @@ msgid "Previous Page" msgstr "Предишна страница" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12729,10 +12807,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "Конфигуриране" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12811,7 +12885,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12880,22 +12954,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "&Изход" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13189,15 +13257,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13335,15 +13403,15 @@ msgstr "&Коментари" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13351,27 +13419,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13379,38 +13447,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "Сваляне на корица..." @@ -13464,7 +13532,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13477,11 +13545,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13501,56 +13569,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13558,39 +13642,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13702,141 +13770,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13861,7 +13933,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13870,7 +13942,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13880,49 +13952,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14469,145 +14541,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "Малък" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "Голям" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "Среден" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr " или " -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14616,11 +14688,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14630,11 +14710,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14643,22 +14723,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14667,31 +14747,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15456,7 +15536,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16301,7 +16381,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16347,7 +16427,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16377,46 +16457,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16438,13 +16518,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16537,7 +16617,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16576,105 +16656,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16724,31 +16817,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "&Възстановяване" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16756,11 +16849,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16768,7 +16861,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16776,16 +16869,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16808,86 +16901,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16930,7 +17023,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17787,7 +17880,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -18102,13 +18195,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18221,7 +18314,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18233,7 +18326,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18242,7 +18335,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18250,7 +18343,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18258,7 +18351,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18268,7 +18361,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18277,7 +18370,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18291,7 +18384,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18299,7 +18392,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18307,7 +18400,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18315,7 +18408,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18323,7 +18416,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18331,7 +18424,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18339,7 +18432,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18347,7 +18448,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18358,7 +18459,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18369,7 +18470,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18379,7 +18480,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18387,7 +18488,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18396,174 +18497,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18660,7 +18761,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18684,18 +18785,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18704,55 +18805,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18763,11 +18868,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18776,15 +18881,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18794,11 +18899,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18808,15 +18913,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18831,7 +18936,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18841,34 +18946,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18879,28 +18984,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18911,13 +19016,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18937,11 +19042,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18952,30 +19057,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18987,17 +19092,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -19006,20 +19111,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -19029,15 +19134,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -19050,40 +19155,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -19097,13 +19202,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19111,34 +19216,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19153,18 +19258,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19172,33 +19277,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19285,91 +19390,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19378,7 +19483,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19387,7 +19492,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19395,41 +19500,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19487,127 +19592,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19691,29 +19796,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19864,7 +19969,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20692,7 +20797,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20933,67 +21038,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/bn.po b/src/calibre/translations/bn.po index 1318bd3307..483219165e 100644 --- a/src/calibre/translations/bn.po +++ b/src/calibre/translations/bn.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-04-12 14:19+0000\n" "Last-Translator: Shahnoor Ashraf \n" "Language-Team: Bengali \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:38+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "আসলে কিছুই করে না" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "আসলে কিছুই করে না" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "আসলে কিছুই করে না" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -608,7 +608,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -953,14 +953,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -988,7 +988,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1000,38 +1000,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1039,89 +1039,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1129,13 +1129,13 @@ msgstr "" msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1179,10 +1179,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1196,9 +1196,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1208,9 +1208,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1232,8 +1232,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1532,7 +1532,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1540,17 +1540,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1558,12 +1558,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1571,12 +1571,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1584,7 +1583,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1657,63 +1656,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1793,84 +1811,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1886,11 +1904,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1928,12 +1941,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2037,77 +2050,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2115,33 +2128,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3991,27 +4004,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4029,12 +4042,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4043,11 +4072,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4055,7 +4084,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4067,8 +4096,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4408,7 +4437,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4419,11 +4448,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4471,165 +4500,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4985,7 +5014,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5144,7 +5173,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5207,16 +5236,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5414,23 +5443,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5585,8 +5614,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5622,7 +5651,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5728,7 +5757,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5883,7 +5912,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5976,7 +6005,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6077,7 +6106,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6253,7 +6282,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6398,7 +6427,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6406,7 +6435,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6428,7 +6457,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6483,60 +6512,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6590,7 +6620,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6622,12 +6652,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6708,19 +6738,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6728,115 +6758,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6844,102 +6878,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8251,7 +8285,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8619,8 +8653,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8820,7 +8854,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8858,89 +8892,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9093,26 +9127,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9457,37 +9536,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9536,7 +9615,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9590,8 +9669,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9610,13 +9689,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9696,7 +9775,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9707,13 +9786,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9724,13 +9803,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9744,12 +9823,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9875,8 +9954,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9886,69 +9965,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9956,7 +10035,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9966,7 +10045,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9981,58 +10060,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10740,8 +10819,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10780,7 +10859,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11354,12 +11433,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11629,7 +11708,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11967,7 +12046,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12143,7 +12222,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12152,7 +12231,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12176,7 +12255,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12427,32 +12506,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12460,7 +12539,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12469,30 +12548,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12597,7 +12676,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12617,10 +12696,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12699,7 +12774,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12768,22 +12843,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13077,15 +13146,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13223,15 +13292,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13239,27 +13308,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13267,38 +13336,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13352,7 +13421,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13365,11 +13434,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13389,56 +13458,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13446,39 +13531,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13590,141 +13659,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13749,7 +13822,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13758,7 +13831,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13768,49 +13841,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14357,145 +14430,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14504,11 +14577,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14518,11 +14599,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14531,22 +14612,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14555,31 +14636,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15342,7 +15423,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16187,7 +16268,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16233,7 +16314,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16263,46 +16344,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16324,13 +16405,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16423,7 +16504,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16462,105 +16543,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16610,31 +16704,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16642,11 +16736,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16654,7 +16748,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16662,16 +16756,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16694,86 +16788,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16816,7 +16910,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17673,7 +17767,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17988,13 +18082,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18107,7 +18201,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18119,7 +18213,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18128,7 +18222,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18136,7 +18230,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18144,7 +18238,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18154,7 +18248,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18163,7 +18257,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18177,7 +18271,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18185,7 +18279,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18193,7 +18287,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18201,7 +18295,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18209,7 +18303,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18217,7 +18311,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18225,7 +18319,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18233,7 +18335,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18244,7 +18346,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18255,7 +18357,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18265,7 +18367,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18273,7 +18375,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18282,174 +18384,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18546,7 +18648,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18570,18 +18672,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18590,55 +18692,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18649,11 +18755,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18662,15 +18768,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18680,11 +18786,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18694,15 +18800,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18717,7 +18823,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18727,34 +18833,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18765,28 +18871,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18797,13 +18903,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18823,11 +18929,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18838,30 +18944,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18873,17 +18979,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18892,20 +18998,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18915,15 +19021,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18936,40 +19042,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18983,13 +19089,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -18997,34 +19103,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19039,18 +19145,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19058,33 +19164,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19171,91 +19277,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19264,7 +19370,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19273,7 +19379,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19281,41 +19387,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19373,127 +19479,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19577,29 +19683,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19750,7 +19856,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20578,7 +20684,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20819,67 +20925,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/br.po b/src/calibre/translations/br.po index aad07095c3..4bd6def466 100644 --- a/src/calibre/translations/br.po +++ b/src/calibre/translations/br.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2011-08-13 04:22+0000\n" "Last-Translator: Denis \n" "Language-Team: Breton \n" @@ -15,8 +15,8 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:39+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -35,8 +35,8 @@ msgstr "Ne ra netra da vat" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -108,8 +108,8 @@ msgstr "Ne ra netra da vat" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -133,44 +133,44 @@ msgstr "Ne ra netra da vat" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -611,7 +611,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -956,14 +956,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -991,7 +991,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1003,38 +1003,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1042,89 +1042,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "Echu" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1132,13 +1132,13 @@ msgstr "" msgid "News" msgstr "Keleier" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "Katalog" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1182,10 +1182,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1199,9 +1199,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1211,9 +1211,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1235,8 +1235,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1535,7 +1535,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1543,17 +1543,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1561,12 +1561,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1574,12 +1574,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1587,7 +1586,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1660,63 +1659,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1796,84 +1814,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1889,11 +1907,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1931,12 +1944,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2040,77 +2053,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2118,33 +2131,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3997,27 +4010,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4035,12 +4048,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4049,11 +4078,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4061,7 +4090,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4073,8 +4102,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4414,7 +4443,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4425,11 +4454,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4477,165 +4506,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4991,7 +5020,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5150,7 +5179,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5213,16 +5242,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5420,23 +5449,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5591,8 +5620,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5628,7 +5657,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5734,7 +5763,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5889,7 +5918,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5982,7 +6011,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -6083,7 +6112,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6259,7 +6288,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6404,7 +6433,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6412,7 +6441,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6434,7 +6463,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6489,60 +6518,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6596,7 +6626,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6628,12 +6658,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6714,19 +6744,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6734,115 +6764,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6850,102 +6884,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8257,7 +8291,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8625,8 +8659,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8826,7 +8860,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8864,89 +8898,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9099,26 +9133,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9463,37 +9542,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9542,7 +9621,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9596,8 +9675,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9616,13 +9695,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9702,7 +9781,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -9713,13 +9792,13 @@ msgid "Change Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "" @@ -9730,13 +9809,13 @@ msgid "Swap Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "" @@ -9750,12 +9829,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9881,8 +9960,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9892,69 +9971,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9962,7 +10041,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9972,7 +10051,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9987,58 +10066,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10746,8 +10825,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -10786,7 +10865,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11360,12 +11439,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11635,7 +11714,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11973,7 +12052,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12149,7 +12228,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12158,7 +12237,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12182,7 +12261,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12433,32 +12512,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12466,7 +12545,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12475,30 +12554,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12603,7 +12682,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12623,10 +12702,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12705,7 +12780,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12774,22 +12849,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13083,15 +13152,15 @@ msgid "Edit Metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13229,15 +13298,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13245,27 +13314,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13273,38 +13342,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13358,7 +13427,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13371,11 +13440,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13395,56 +13464,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13452,39 +13537,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13596,141 +13665,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13755,7 +13828,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13764,7 +13837,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13774,49 +13847,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14363,145 +14436,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14510,11 +14583,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14524,11 +14605,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14537,22 +14618,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14561,31 +14642,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15348,7 +15429,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "" @@ -16193,7 +16274,7 @@ msgid "Books:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16239,7 +16320,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "" @@ -16269,46 +16350,46 @@ msgstr "" msgid "%p%" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "" @@ -16330,13 +16411,13 @@ msgid "Manage Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "" @@ -16429,7 +16510,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "" @@ -16468,105 +16549,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16616,31 +16710,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16648,11 +16742,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16660,7 +16754,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16668,16 +16762,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16700,86 +16794,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "" @@ -16822,7 +16916,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "" @@ -17679,7 +17773,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17994,13 +18088,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18113,7 +18207,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18125,7 +18219,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18134,7 +18228,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18142,7 +18236,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18150,7 +18244,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18160,7 +18254,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18169,7 +18263,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18183,7 +18277,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18191,7 +18285,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18199,7 +18293,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18207,7 +18301,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18215,7 +18309,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18223,7 +18317,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18231,7 +18325,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18239,7 +18341,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18250,7 +18352,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18261,7 +18363,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18271,7 +18373,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18279,7 +18381,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18288,174 +18390,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18552,7 +18654,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18576,18 +18678,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18596,55 +18698,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18655,11 +18761,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18668,15 +18774,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18686,11 +18792,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18700,15 +18806,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18723,7 +18829,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18733,34 +18839,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18771,28 +18877,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18803,13 +18909,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18829,11 +18935,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18844,30 +18950,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18879,17 +18985,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18898,20 +19004,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18921,15 +19027,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18942,40 +19048,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18989,13 +19095,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19003,34 +19109,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19045,18 +19151,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19064,33 +19170,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19177,91 +19283,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19270,7 +19376,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19279,7 +19385,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19287,41 +19393,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19379,127 +19485,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19583,29 +19689,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19756,7 +19862,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20584,7 +20690,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20825,67 +20931,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/bs.po b/src/calibre/translations/bs.po index 9cdf9161a4..4e7ea0a64b 100644 --- a/src/calibre/translations/bs.po +++ b/src/calibre/translations/bs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" "PO-Revision-Date: 2012-01-02 13:31+0000\n" "Last-Translator: Kenan Dervišević \n" "Language-Team: Bosnian \n" @@ -16,8 +16,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Launchpad-Export-Date: 2012-11-24 05:29+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-22 04:38+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -36,8 +36,8 @@ msgstr "Ne radi apsolutno ništa" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -109,8 +109,8 @@ msgstr "Ne radi apsolutno ništa" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -134,44 +134,44 @@ msgstr "Ne radi apsolutno ništa" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -614,7 +614,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -959,14 +959,14 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " "are running jobs, they will be silently aborted, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "" @@ -994,7 +994,7 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1006,38 +1006,38 @@ msgid "" "to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " "Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1045,89 +1045,89 @@ msgid "" "is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "Apple uređah" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " "forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "završeno" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1135,13 +1135,13 @@ msgstr "" msgid "News" msgstr "Vijesti" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "Katalog" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1185,10 +1185,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1202,9 +1202,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1214,9 +1214,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1238,8 +1238,8 @@ msgstr "Uklanjam knjige sa uređaja..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1538,7 +1538,7 @@ msgid "Upload covers for books (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1546,17 +1546,17 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1564,12 +1564,12 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "Prikaži preglede" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1577,12 +1577,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1590,7 +1589,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "" @@ -1663,63 +1662,82 @@ msgid "" "%(text)s
    Notes: %(annotation)s

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " "first time you send the book to the device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1799,84 +1817,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1892,11 +1910,6 @@ msgid "" "computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1934,12 +1947,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -2043,77 +2056,77 @@ msgid "" "multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2121,33 +2134,33 @@ msgid "" "timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " "address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -3997,27 +4010,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "Naslov" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -4035,12 +4048,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "" @@ -4049,11 +4078,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4061,7 +4090,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4073,8 +4102,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -4414,7 +4443,7 @@ msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -4425,11 +4454,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "" @@ -4477,165 +4506,165 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " "match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4992,7 +5021,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -5151,7 +5180,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -5214,16 +5243,16 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -5421,23 +5450,23 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -5592,8 +5621,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -5629,7 +5658,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5735,7 +5764,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5890,7 +5919,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "" @@ -5983,7 +6012,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "Traži %s" @@ -6084,7 +6113,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -6260,7 +6289,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -6405,7 +6434,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -6413,7 +6442,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -6435,7 +6464,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -6490,60 +6519,61 @@ msgstr "" msgid "Donate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "" @@ -6597,7 +6627,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -6629,12 +6659,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -6715,19 +6745,19 @@ msgid "Wishlist item" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "" @@ -6735,115 +6765,119 @@ msgstr "" msgid "No genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -6851,102 +6885,102 @@ msgid "" "[Test book], and '+', the default tag for a read book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "" @@ -8258,7 +8292,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "&Sačuvaj" @@ -8626,8 +8660,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -8827,7 +8861,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8865,89 +8899,89 @@ msgid "" "reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -9100,26 +9134,71 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -9464,37 +9543,37 @@ msgstr "" msgid "%s is not an existing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "" @@ -9543,7 +9622,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9597,8 +9676,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -9617,13 +9696,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -9703,7 +9782,7 @@ msgstr "Link" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "Nema rezultata" @@ -9714,13 +9793,13 @@ msgid "Change Case" msgstr "Promjena u velika/mala slova" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "Velika slova" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "Mala slova" @@ -9731,13 +9810,13 @@ msgid "Swap Case" msgstr "Promijeni" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "Prvo veliko slovo" @@ -9751,12 +9830,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9882,8 +9961,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9893,69 +9972,69 @@ msgstr "" msgid "Hide the remaining %d error messages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -9963,7 +10042,7 @@ msgid "" "character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -9973,7 +10052,7 @@ msgid "" "text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -9988,58 +10067,58 @@ msgid "" "function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -10747,8 +10826,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "Autori" @@ -10787,7 +10866,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "" @@ -11361,12 +11440,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "" @@ -11636,7 +11715,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -11974,7 +12053,7 @@ msgstr "" msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "" @@ -12150,7 +12229,7 @@ msgid "Clear the font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "" @@ -12159,7 +12238,7 @@ msgid "Shift+Alt+B" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "" @@ -12183,7 +12262,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "" @@ -12434,32 +12513,32 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -12467,7 +12546,7 @@ msgstr "" msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -12476,30 +12555,30 @@ msgid "" "program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "" @@ -12604,7 +12683,7 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -12624,10 +12703,6 @@ msgstr "" msgid "Open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "" @@ -12706,7 +12781,7 @@ msgid "Bad database location %r. calibre will now quit." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "" @@ -12775,22 +12850,16 @@ msgstr "" msgid "Failed to shutdown running calibre instance" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "" @@ -13084,15 +13153,15 @@ msgid "Edit Metadata" msgstr "Uredi meta podatke" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -13230,15 +13299,15 @@ msgstr "" msgid "Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -13246,27 +13315,27 @@ msgid "" "cover stage, and vice versa." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -13274,38 +13343,38 @@ msgid "" "Details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "" @@ -13359,7 +13428,7 @@ msgid "" "after being added to calibre. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13372,11 +13441,11 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -13396,56 +13465,72 @@ msgid "" "Author matching is exact." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -13453,39 +13538,23 @@ msgid "" " you want to add it anyway." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "" @@ -13597,141 +13666,145 @@ msgstr "" msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 -msgid "is true" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 -msgid "is false" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 +msgid "is true" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 +msgid "is false" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " "calibre will try to automatically convert it to the language code." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" @@ -13756,7 +13829,7 @@ msgstr "" msgid "You must specify at least one non-empty condition for this rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -13765,7 +13838,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -13775,49 +13848,49 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "

  • If the %(col)s column %(action)s value: %(val)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " "started.

    You can change an existing rule by double clicking it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "" @@ -14364,145 +14437,145 @@ msgstr "" msgid "System default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -14511,11 +14584,19 @@ msgid "" "{author_sort}, and any template function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -14525,11 +14606,11 @@ msgid "" "then the tags will be displayed each on their own line." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -14538,22 +14619,22 @@ msgid "" "if you never want subcategories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " "is ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -14562,31 +14643,31 @@ msgid "" "a few top-level elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "" @@ -15349,7 +15430,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "Nije moguće pokrenuti server sa sadržajem" @@ -16194,7 +16275,7 @@ msgid "Books:" msgstr "Knjige:" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "" @@ -16242,7 +16323,7 @@ msgstr "&Upit:" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "Zatvori" @@ -16272,48 +16353,48 @@ msgstr "Učitaj ponovo" msgid "%p%" msgstr "%p%" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "Pretrage" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "Preimenuj korisničku kategoriju" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" "Ne možete koristiti tačke u imenu prilikom preimenovanja korisničke " "kategorije" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "Ime %s već postoji" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "Duplo ime pretrage" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "Sačuvano ime pretrage %s već postoji." @@ -16335,13 +16416,13 @@ msgid "Manage Tags" msgstr "Upravljanje oznakama" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "Upravljanje korisničkim kategorijama" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "Upravljanje sačuvanim pretragama" @@ -16434,7 +16515,7 @@ msgid "Alter Tag Browser" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "Poredaj po" @@ -16473,105 +16554,118 @@ msgid "" "the tag browser above" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "Preimenuj %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "Uredi sortiranje za %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "Uredi linkove za %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "Dodaj %s u korisničku kategoriju" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "Obriši pretragu %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "Traži sve osim %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "Dodaj podkategoriju u %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "Obriši korisničku kategoriju %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "Sakrij kategoriju %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "Prikaži kategoriju" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "Traži knjige u kategoriji %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "Traži knjige koje nisu u kategoriji %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "Konfiguracija %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "Prikaži sve kategorije" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "" @@ -16621,31 +16715,31 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "&Izvršite donaciju kako biste pomogli razvoj Calibrea" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "&Vrati" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "&Izbaci povezani uređaj" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "Zatvori Calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "Očisti trenutnu pretragu" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -16653,11 +16747,11 @@ msgid "" "automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -16665,7 +16759,7 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -16673,16 +16767,16 @@ msgid "" "successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "Greška pri pretvaranju" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16705,86 +16799,86 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "Neuspjelo" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 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:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 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/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the new features." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "Nadogradnja je dostupna!" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "Prikaži ovu obavijest za buduće nadogradnje" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "&Preuzmi nadogradnju" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "Nadogradi &plugine" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr " (%d nadogradnji plugina)" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "Nadogradnja je pronađena" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "nadograđeni plugini" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "Nadogradnje plugina" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "Dostupno je %d nadogradnji plugina" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "Instalirajte i konfigurišite korisničke plugine" @@ -16827,7 +16921,7 @@ msgstr "Uredi" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "Resetuj" @@ -17684,7 +17778,7 @@ msgid "< &Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "" @@ -17999,13 +18093,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "" @@ -18118,7 +18212,7 @@ msgid "" "Applies to: BIBTEX output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -18130,7 +18224,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -18139,7 +18233,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18147,7 +18241,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18155,7 +18249,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -18165,7 +18259,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18174,7 +18268,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18188,7 +18282,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18196,7 +18290,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18204,7 +18298,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18212,7 +18306,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18220,7 +18314,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18228,7 +18322,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18236,7 +18330,15 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18244,7 +18346,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18255,7 +18357,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -18266,7 +18368,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -18276,7 +18378,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18284,7 +18386,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -18293,174 +18395,174 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "Nema dostupnih knjiga koje bi se mogle dodati u katalog" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "" @@ -18557,7 +18659,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -18581,18 +18683,18 @@ msgstr "" msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -18601,55 +18703,59 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -18660,11 +18766,11 @@ msgid "" "included).\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -18673,15 +18779,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -18691,11 +18797,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -18705,15 +18811,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -18728,7 +18834,7 @@ msgid "" "the --field option.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -18738,34 +18844,34 @@ msgid "" "use true and false or yes and no." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -18776,28 +18882,28 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -18808,13 +18914,13 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -18834,11 +18940,11 @@ msgid "" "JSON for the\"display\" for the new column in the OPF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -18849,30 +18955,30 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -18884,17 +18990,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -18903,20 +19009,20 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -18926,15 +19032,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -18947,40 +19053,40 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -18994,13 +19100,13 @@ msgid "" "automatically, every time metadata is changed.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -19008,34 +19114,34 @@ msgid "" "{0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -19050,18 +19156,18 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -19069,33 +19175,33 @@ msgid "" "information is the equivalent of what is shown in the tags pane.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -19182,91 +19288,91 @@ msgstr "" msgid "Processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "Autori" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -19275,7 +19381,7 @@ msgid "" "are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -19284,7 +19390,7 @@ msgid "" "controls are: {%(controls)s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -19292,41 +19398,41 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " "%(mn)s - month number, %(year)s - year. Default is: %(default)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "" @@ -19384,127 +19490,127 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "" @@ -19588,29 +19694,29 @@ msgstr "" msgid "Books sorted by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "" @@ -19761,7 +19867,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "" @@ -20589,7 +20695,7 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "" @@ -20830,67 +20936,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "" diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po index d95ae7e311..c8e0c18715 100644 --- a/src/calibre/translations/ca.po +++ b/src/calibre/translations/ca.po @@ -10,16 +10,16 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-11-23 03:42+0000\n" -"PO-Revision-Date: 2012-11-25 12:08+0000\n" +"POT-Creation-Date: 2012-12-21 05:12+0000\n" +"PO-Revision-Date: 2012-12-22 12:38+0000\n" "Last-Translator: Ferran Rius \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Launchpad-Export-Date: 2012-11-26 04:37+0000\n" -"X-Generator: Launchpad (build 16293)\n" +"X-Launchpad-Export-Date: 2012-12-23 04:36+0000\n" +"X-Generator: Launchpad (build 16378)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 msgid "Does absolutely nothing" @@ -38,8 +38,8 @@ msgstr "No fa res" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -111,8 +111,8 @@ msgstr "No fa res" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -136,44 +136,44 @@ msgstr "No fa res" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:692 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1416 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:884 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -640,7 +640,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "Control com el calibre baixa les metadades dels llibres de la xarxa" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "Dispositius ignorats" @@ -1024,7 +1024,7 @@ msgstr "Targeta A" msgid "Card B" msgstr "Targeta B" -#: /home/kovid/work/calibre/src/calibre/debug.py:64 +#: /home/kovid/work/calibre/src/calibre/debug.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:47 msgid "" "Cause a running calibre instance, if any, to be shutdown. Note that if there " @@ -1034,7 +1034,7 @@ msgstr "" "Vigileu, ja que si hi ha tasques en execució s'interrompran sense cap " "confirmació." -#: /home/kovid/work/calibre/src/calibre/debug.py:164 +#: /home/kovid/work/calibre/src/calibre/debug.py:172 msgid "Debug log" msgstr "Registre de depuració" @@ -1067,7 +1067,7 @@ msgstr "Comunica't amb telèfons S60." msgid "Communicate with WebOS tablets." msgstr "Comunica't amb tauletes tàctils WebOS." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "" "

    If you do not want calibre to recognize your Apple iDevice when it is " "connected to your computer, click Disable Apple Driver.

    To " @@ -1089,35 +1089,35 @@ msgstr "" "controlador Apple per a una connexió directa als dispositius Apple és un " "mode d'usuari avançat per al qual no hi ha suport.

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "Inhabilita el controlador Apple" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "Habilita el controlador Apple" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "Fes servir la sèrie com a categoria a l'iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" "Habilita la utilització del nom de la sèrie com a gènere d'iTunes, categoria " "d'iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "Memòria cau de portades de l'iTunes/iBooks" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" "Habilita que les portades d'iTunes/iBooks es visualitzin i es desin a la " "memòria cau" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "" "\"Copy files to iTunes Media folder %s\" is enabled in iTunes " @@ -1126,7 +1126,7 @@ msgstr "" "«Copia els fitxers a la carpeta d'iTunes Media %s» s'activa a Preferències " "d'iTunes|Avançades" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "" "

    This setting should match your iTunes Preferences|Advanced " "setting.

    Disabling will store copies of books transferred to iTunes in " @@ -1139,20 +1139,21 @@ msgstr "" "calibre.

    Si s'habilita indica que iTunes està configurat per desar " "còpies a la carpeta d'iTunes Media.

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "Dispositiu Apple" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "Comunica't amb iTunes/iBooks." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -"S'ha detectat un dispositiu Apple, s'està engegant l'iTunes, espereu ..." +"S'ha detectat un dispositiu Apple (iPod, iPhone...). Espereu, s'està " +"iniciant l'iTunes..." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "" "Cannot copy books directly from iDevice. Drag from iTunes Library to " "desktop, then add to calibre's Library window." @@ -1161,17 +1162,17 @@ msgstr "" "los des de la biblioteca de l'iTunes a l'escriptori i després afegiu-los a " "la finestra de la biblioteca del calibre." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "" -"Unsupported direct connect mode. See " +"*** Unsupported direct connect mode. See " "http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on " -"using 'Connect to iTunes'" +"using 'Connect to iTunes' ***" msgstr "" -"El mode de connexió directa no és compatible. Vegeu " +"*** Mode de connexió directa no compatible. Vegeu " "http://www.mobileread.com/forums/showthread.php?t=118559 per a instruccions " -"de com utilitzar «Connecta a l'iTunes»" +"de l'ús de «Connecta a iTunes»" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "" "

    Unable to communicate with iTunes.

    Refer to this " @@ -1181,29 +1182,29 @@ msgstr "" "href=\"http://www.mobileread.com/forums/showpost.php?p=2113958&postcount=3\">" "publicació al fòrum per a més informació.

    " -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "S'està actualitzant el llistat de metadades del dispositiu..." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3247 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3289 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "%(num)d de %(tot)d" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3296 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "s'ha acabat" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" @@ -1213,7 +1214,7 @@ msgstr "" "Suprimiu-los amb l'aplicació de l'iBooks.\n" "Feu clic a «Mostra detalls» per a la llista." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -1221,22 +1222,22 @@ msgstr "" "No s'ha pogut convertir algunes portades.\n" "Feu clic a «Mostra detalls» per a la llista." -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2770 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1244,13 +1245,13 @@ msgstr "" msgid "News" msgstr "Notícies" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2771 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "Catàleg" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3139 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "Comunica't amb l'iTunes" @@ -1302,10 +1303,10 @@ msgstr "Bambook" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:128 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:131 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:348 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1317 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1321 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1662 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1319,9 +1320,9 @@ msgstr "S'està aconseguint la llista de llibres del dispositiu..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1331,9 +1332,9 @@ msgstr "S'està transferint llibres al dispositiu..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1355,8 +1356,8 @@ msgstr "S'està suprimint els llibres del dispositiu..." #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1672,7 +1673,7 @@ msgid "Upload covers for books (newer readers)" msgstr "Carrega portades per als llibres (lectors nous)" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1222 msgid "" "Normally, the KOBO readers get the cover image from the ebook file itself. " "With this option, calibre will send a separate cover image to the reader, " @@ -1683,17 +1684,17 @@ msgstr "" "portada separada. Útil si heu modificat la portada." #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1225 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 msgid "Upload Black and White Covers" msgstr "Carrega portades en blanc i negre" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:75 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Show expired books" msgstr "Mostra els llibres caducats" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "" "A bug in an earlier version left non kepubs book records in the database. " "With this option Calibre will show the expired records and allow you to " @@ -1704,12 +1705,12 @@ msgstr "" "i permet suprimir-los amb la nova lògica de supressió." #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:80 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Show Previews" msgstr "Mostra les previsualitzacions" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "" "Kobo previews are included on the Touch and some other versions by default " "they are no longer displayed as there is no good reason to see them. Enable " @@ -1720,12 +1721,11 @@ msgstr "" "Habiliteu-ho si les voleu veure o suprimir." #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:84 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "Show Recommendations" msgstr "Mostra les recomanacions" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1239 msgid "" "Kobo now shows recommendations on the device. In some case these have files " "but in other cases they are just pointers to the web site to buy. Enable if " @@ -1736,7 +1736,7 @@ msgstr "" "si les voleu veure o suprimir." #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1248 msgid "Attempt to support newer firmware" msgstr "Intenta donar compatibilitat a microprogramari més recent" @@ -1838,21 +1838,21 @@ msgstr "" "/>Progrés al capítol: %(chapter_progress)s%%
    Realça: " "%(text)s
    Notes: %(annotation)s

    " -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1213 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1214 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" "El Kobo Touch és permet prestatgeries des del microprogramari V2.0.0." -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1215 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 msgid "Specify a tags type column for automatic management" msgstr "" "Especifiqueu una columna de tipus d'etiqueta per a la gestió automàtica" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1216 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 msgid "Create Bookshelves" msgstr "Creació de prestatgeries" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1217 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 msgid "" "Create new bookshelves on the Kobo Touch if they do not exist. This is only " "for firmware V2.0.0 or later." @@ -1860,11 +1860,11 @@ msgstr "" "Crea prestatgeries noves al Kobo Touch si no n'hi ha. Només per al " "microprogramari V2.0.0 o posterior." -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1218 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 msgid "Delete Empty Bookshelves" msgstr "Suprimeix les prestatgeries buides." -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1219 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 msgid "" "Delete any empty bookshelves from the Kobo Touch when syncing is finished. " "This is only for firmware V2.0.0 or later." @@ -1872,15 +1872,15 @@ msgstr "" "Suprimeix les prestatgeries buides del Kobo Touch després de sincronitzar. " "Només per al microprogramari V2.0.0 o posterior." -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1220 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1221 msgid "Upload covers for books" msgstr "Puja portades per als llibres" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "Always upload covers" msgstr "Puja portades sempre" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 msgid "" "If the Upload covers option is selected, the driver will only replace covers " "already on the device. Select this option if you want covers uploaded the " @@ -1891,25 +1891,53 @@ msgstr "" "opció si voleu que es pugin les portades el primer cop que envieu un llibre " "al dispositiu." +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 +msgid "" +"Kobo shows recommendations on the device. In some cases these have files " +"but in other cases they are just pointers to the web site to buy. Enable if " +"you wish to see/delete them." +msgstr "" +"El Kobo mostra recomanacions al dispositiu. A vegades inclouen fitxers però " +"d'altres només són enllaços a la pàgina web per comprar. Habiliteu-ho si " +"voleu veure-les o suprimir-les." + #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +msgid "Set Series information" +msgstr "Estableix la informació de la sèrie" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1244 +msgid "" +"The book lists on the Kobo devices can display series information. This is " +"not read by the device from the sideloaded books. Series information can " +"only be added to the device after the book has been processed by the device. " +"Enable if you wish to set series information." +msgstr "" +"Les llistes de llibres als dispositius Kobo pot mostrar la informació de la " +"sèrie. El dispositiu no ho llegeix dels llibres carregats manualment. La " +"informació de la sèrie només es pot afegir després que el dispositiu hagi " +"processat el llibre. Habiliteu-ho si voleu establir la informació de la " +"sèrie." + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "" "Kobo routinely updates the firmware and the database version. With this " "option Calibre will attempt to perform full read-write functionality - Here " "be Dragons!! Enable only if you are comfortable with restoring your kobo to " -"factory defaults and testing software. This driver supports firmware V2.0.x " +"factory defaults and testing software. This driver supports firmware V2.x.x " "and DBVersion up to " msgstr "" -"El Kobo actualitza regularment el microprogramari i la versió de la base de " -"dades. Amb aquesta opció el calibre intentarà realitzar funcions completes " -"de lectura i escriptura. Compte: Habiliteu-ho només si sabeu com tornar el " -"Kobo a la configuració de fàbrica i provar programari. Aquest controlador és " -"compatible amb el microprogramari V2.0.x i la versió de base de dades fins a " +"El Kobo actualitza periòdicament el microprogramari i la versió de la base " +"de dades. Amb aquesta opció el calibre provarà de realitzar funcions " +"completes de lectura i escriptura. Aneu amb compte! Habiliteu-ho només si us " +"trobeu a gust restaurant el kobo als paràmetres de fàbrica i provant " +"programari. Aquest controlador és compatible amb el microprogramari V2.x.x i " +"DBVersion fins a " -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 msgid "Title to test when debugging" msgstr "Títol que es provarà en la depuració" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 msgid "" "Part of title of a book that can be used when doing some tests for " "debugging. The test is to see if the string is contained in the title of a " @@ -1992,84 +2020,84 @@ msgstr "Dispositiu MTP" msgid "Communicate with MTP devices" msgstr "Comunicació amb dispositius MTP" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "Obté informació del dispositiu..." -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "S'està generant la llista de fitxers; pot trigar una estona" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "S'està llegint les metadades dels llibres" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "S'està llegint les medades des del %s" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "S'està actualitzant la memòria cau de metadades al dispositiu" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "S'ha acabat de llegir les metadades des del dispositiu" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "S'ha transferit %s al dispositiu" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "S'ha acabat la transferència al dispositiu..." -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "S'ha afegit %s" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "S'ha acabat d'afegir" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "S'està suprimit llibres al dispositiu..." -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "S'ha suprimit %s" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "S'ha suprimit tots els llibres" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "S'està suprimint els llibres de les metadades" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "S'ha suprimit %s" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "S'ha suprimit tots els llibres" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "Dispositiu MTP desconegut" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "No s'ha trobat l'objecte: %s" @@ -2088,11 +2116,6 @@ msgstr "" "ser que hagueu d'instal·lar el Windows Media Player 11 o posterior i/o " "reiniciar l'ordinador." -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "S'ha trobat un identificador: %s" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "Comunica't amb una tauleta tàctil d'internet Nokia 770." @@ -2130,12 +2153,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "S'ha suprimit els comentaris perquè el lector SONY hi té problemes" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "Tots per títol" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "Tots per autor" @@ -2271,42 +2294,42 @@ msgstr "" "amb múltiples autors. Deixeu-la inhabilitada si utilitzeu quadres de " "connexions de metadades." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "Dispositiu sense fils" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "Comunicació amb aplicacions de dispositiu intel·ligent" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "Tot per quelcom" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "Habilita les connexions en iniciar" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" "Marqueu aquesta casella per permetre les connexions en iniciar el calibre" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "Contrasenya de seguretat" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" "Introduïu una contrasenya que l'aplicació del dispositiu haurà d'utilitzar " "per connectar-se al calibre" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "Utilitza un port de xarxa fix" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "" "If checked, use the port number in the \"Port\" box, otherwise the driver " "will pick a random port" @@ -2314,11 +2337,11 @@ msgstr "" "Si està marcada, s'utilitzarà el nombre de port al quadre «Port», en cas " "contrari el controlador agafarà un port a l'atzar" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "Nombre de port: " -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "" "Enter the port number the driver is to use if the \"fixed port\" box is " "checked" @@ -2326,15 +2349,15 @@ msgstr "" "Introduïu el nombre de port que utilitzarà el controlador si està marcat el " "quadre de \"port fix\"" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "Mostra informació de depuració adicional" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "Marqueu aquest quadre si se us demana en comunicar algun problema" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device." @@ -2342,15 +2365,15 @@ msgstr "" "Llista separada per comes de camps de metadades que en convertiran en " "col·leccions al dispositiu." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "Les possibilitats inclouen: sèrie, etiquetes, autors..." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "Habilita el temps d'espera sense activitat" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "" "If this box is checked, calibre will automatically disconnect if a connected " @@ -2362,11 +2385,11 @@ msgstr "" "s'inhabilita el temps d'espera i el calibre mai no es desconnectarà " "automàticament d'un dispositiu." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "Utilitza aquesta adreça IP" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "" "Use this option if you want to force the driver to listen on a particular IP " "address. The driver will listen only on the entered address, and this " @@ -2376,22 +2399,22 @@ msgstr "" "adreça IP concreta. El controlador només escoltarà a l'adreça introduïda i " "serà la que s'anunciï en mDNS (bonjour)." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "Massa intents de connexió des de %s" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "Port no vàlid a les opcions: %s" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "No s'ha pogut connectar al port %d. Intenteu un valor diferent." -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "No s'ha pogut assignar un port a l'atzar" @@ -4759,27 +4782,27 @@ msgstr "No" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585 msgid "Title" msgstr "Tí­tol" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "Autor(s)" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "Editorial" @@ -4797,12 +4820,28 @@ msgstr "Comentaris" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:780 msgid "Tags" msgstr "Etiquetes" @@ -4811,11 +4850,11 @@ msgstr "Etiquetes" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2224 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -4823,7 +4862,7 @@ msgstr[0] "Sèrie" msgstr[1] "Sèries" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -4835,8 +4874,8 @@ msgstr "Marca horària" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "Publicat" @@ -5226,7 +5265,7 @@ msgid "%s format books are not supported" msgstr "El format de llibre %s no és compatible" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967 #, python-format msgid "Book %(sidx)s of %(series)s" @@ -5237,11 +5276,11 @@ msgid "HTML TOC generation options." msgstr "Opcions de generació de l'index HTML." #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:778 msgid "Rating" msgstr "Valoració" @@ -5293,97 +5332,97 @@ msgstr "No es troba pdftohtml, comproveu que està al PATH" msgid "Table of Contents:" msgstr "Índex:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" "Per defecte envia el fitxer a la targeta de memòria en lloc de fer-ho a la " "memòria principal." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "Confirmeu abans de suprimir" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "Geometria de la finestra principal" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "Aviseu-me quan hi hagi una nova versió disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "Utilitza números romans per a sèries de números" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "Ordena la llista d'etiquetes per nom, popularitat o per valoració" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "Coincidènia amb totes o alguna de les etiquetes." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" "Nombre de portades que es mostraran en el mode de navegació per portades" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "Valors per defecte per a la conversió a LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "Opcions per al visor LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "Formats que s'obriran amb el visor intern" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "Columnes que es veuran a la llista de llibres" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" "Arrenca automàticament el servidor de continguts en iniciar l'aplicació" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "Les notícies antigues es conserven a la base de dades" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "Mostra la icona a la safata del sistema" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "Carrega al dispositiu les notícies que s'ha baixat" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" "Suprimeix els llibres nous de la biblioteca després de carregar-los al " "dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" "Mostra la portada en una altra finestra enlloc de fer-ho a la principal" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "Inhabilita els missatges des de la icona de la safata del sistema" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" "Acció per defecte per a quan es faci clic al botó d'enviar al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "" "Start searching as you type. If this is disabled then search will only take " "place when the Enter or Return key is pressed." @@ -5391,7 +5430,7 @@ msgstr "" "Comença la cerca mentre teclegeu. Si s'inhabilita la cerca començarà quan es " "premi la tecla de retorn." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "" "When searching, show all books with search results highlighted instead of " "showing only the matches. You can use the N or F3 keys to go to the next " @@ -5401,7 +5440,7 @@ msgstr "" "cerca en lloc de mostrar només les coincidències. Premeu «N» o «F3» per anar " "a la coincidència següent." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "" "Maximum number of simultaneous conversion/news download jobs. This number is " "twice the actual value for historical reasons." @@ -5409,23 +5448,23 @@ msgstr "" "Nombre màxim de tasques simultànies de conversió/baixada de notícies. Aquest " "nombre és el doble del valor real per raons històriques." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "Baixa metadades socials (etiquetes, valoració...)" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "Sobreescriu l'autor i el títol amb les noves metadades" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "Si n'hi ha, baixa la portada automàticament" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "Limita el màxim de tasques simultànies al nombre de CPUs" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "" "The layout of the user interface. Wide has the book details panel on the " "right and narrow has it at the bottom." @@ -5433,44 +5472,44 @@ msgstr "" "La disposició de la interfície de l'usuari. La disposició ampla té el panell " "de detalls a la dreta i l'estreta a baix." -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" "Mostra la mitjana de les valoracions per a cada element de l'explorador " "d'etiquetes" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "Desactiva les animacions" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "categories de l'explorador d'etiquetes que no s'han de mostrar" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "AVÍS:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "ERROR:" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "Mostra un altre cop aquesta informació" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "Cal reiniciar" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "Reinicia el calibre ara" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "Tria fitxers" @@ -5843,7 +5882,7 @@ msgstr "Canvia/crea una biblioteca" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -6018,7 +6057,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366 @@ -6088,16 +6127,16 @@ msgstr "" "aproximada d'un llibre cada tres segons." #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Cannot convert" msgstr "No es pot convertir" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:136 #, python-format msgid "Starting conversion of %d book(s)" msgstr "S'està començant la conversió de %d llibre(s)" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:200 msgid "Empty output file, probably the conversion process crashed" msgstr "" "Fitxer de sortida buit, probablement el procés de conversió ha fallat" @@ -6313,11 +6352,11 @@ msgid "None of the selected books are on the device" msgstr "Cap dels llibres seleccionats són al dispositiu" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "S'està suprimint llibres del dispositiu." -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "" "Some of the selected books are on the attached device. Where do you " "want the selected files deleted from?" @@ -6325,7 +6364,7 @@ msgstr "" "Alguns dels llibres seleccionats són al dispositiu connectat. D'on " "voleu que se suprimeixin els fitxers seleccionats?" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "" "The selected books will be permanently deleted and the files removed " "from your calibre library. Are you sure?" @@ -6333,7 +6372,7 @@ msgstr "" "Els llibres seleccionats se suprimiran permanentment i els fitxers es " "trauran de la biblioteca del calibre. N'esteu segur?" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "" "The selected books will be permanently deleted from your device. Are " "you sure?" @@ -6494,8 +6533,8 @@ msgstr "No s'ha pogut baixar les metadades" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "No s'ha pogut baixar" @@ -6538,7 +6577,7 @@ msgid "Download complete" msgstr "S'ha acabat la baixada" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "Registre de baixades" @@ -6672,7 +6711,7 @@ msgstr "F1" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "Ajuda" @@ -6830,7 +6869,7 @@ msgid "Click the show details button to see which ones." msgstr "Feu clic a «Mostra detalls» per saber quins són." #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 msgid "Show book details" msgstr "Mostra detalls del llibre" @@ -6924,7 +6963,7 @@ msgid "this book" msgstr "aquest llibre" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "Cerca %s" @@ -7060,7 +7099,7 @@ msgstr "Vista &prèvia del llibre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "&Cancel·la" @@ -7247,7 +7286,7 @@ msgid "The specified directory could not be processed." msgstr "La carpeta que s'ha indicat no es pot processar." #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "Cap llibre" @@ -7408,7 +7447,7 @@ msgstr "" "los a la biblioteca del calibre" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:208 @@ -7416,7 +7455,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor_ui.py:82 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:584 @@ -7438,7 +7477,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -7499,60 +7538,61 @@ msgstr "S'ha afegit %(num)d llibre(s) automàticament des de %(src)s" msgid "Donate" msgstr "Donacions" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:156 msgid "Click to open" msgstr "Feu clic per obrir" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:834 msgid "Ids" msgstr "Identificadors" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:218 #, python-format msgid "Book %(sidx)s of %(series)s" msgstr "Llibre %(sidx)s de %(series)s" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1115 msgid "Collections" msgstr "Col·leccions" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:348 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:253 msgid "Paste Cover" msgstr "Enganxa la portada" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:349 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:254 msgid "Copy Cover" msgstr "Copia la portada" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:350 msgid "Remove Cover" msgstr "Suprimeix la portada" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:393 msgid "Double-click to open Book Details window" msgstr "Feu doble clic per obrir la finestra de detalls del llibre" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:394 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "Camí" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:395 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" msgstr "Mida de la portada: %(width)d×%(height)d" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:481 #, python-format msgid "Delete the %s format" msgstr "Suprimeix el format %s" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:482 #, python-format msgid "Save the %s format to disk" msgstr "Desa el format %s al disc" @@ -7606,7 +7646,7 @@ msgstr "sortida" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103 @@ -7638,12 +7678,12 @@ msgstr "sortida" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 @@ -7731,19 +7771,19 @@ msgid "Wishlist item" msgstr "Element desitjat" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "any date" msgstr "qualsevol data" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 msgid "any value" msgstr "qualsevol valor" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:794 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:854 msgid "unspecified" msgstr "sense especificar" @@ -7751,95 +7791,99 @@ msgstr "sense especificar" msgid "No genres will be excluded" msgstr "No s'exclourà cap gènere" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:202 #, python-format msgid "regex error: %s" msgstr "error de regex: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:211 msgid "All genres will be excluded" msgstr "S'exclourà tots els gèneres" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:697 #, python-format msgid "Are you sure you want to delete '%s'?" msgstr "Segur que voleu suprimir «%s»?" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:699 #, python-format msgid "Are you sure you want to delete rules #%(first)d-%(last)d?" msgstr "Segur que voleu suprimir les regles #%(first)d-%(last)d?" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:700 msgid "Delete Rule" msgstr "Suprimeix la regla" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:608 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4683 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "Fals" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:792 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 msgid "True" msgstr "Cert" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:817 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:966 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Name" msgstr "Nom" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:910 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:968 msgid "Field" msgstr "Camp" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:819 -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:969 msgid "Value" msgstr "Valor" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:967 msgid "Prefix" msgstr "Prefix" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 msgid "Enabled sections will be included in the generated catalog." msgstr "Les seccions habilitades s'inclouran al catàleg generat." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 msgid "Included sections" msgstr "Seccions incloses" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 msgid "&Authors" msgstr "&Autors" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:293 msgid "&Titles" msgstr "&Títols" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 msgid "&Series" msgstr "&Sèries" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 msgid "&Genres" msgstr "&Gèneres" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +msgid "Field containing Genre information" +msgstr "Camp que conté la informació del gènere" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "&Recently Added" msgstr "Afegits &recentment" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "&Descriptions" msgstr "&Descripcions" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "" "The first matching prefix rule applies a prefix to book listings in the " "generated catalog." @@ -7847,11 +7891,11 @@ msgstr "" "La primera regla de prefix aplica un prefix a les llistes de llibres al " "catàleg generat." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "Prefixes" msgstr "Prefixs" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "" "Books matching any of the exclusion rules will be excluded from the " "generated catalog. " @@ -7859,11 +7903,11 @@ msgstr "" "Els llibre que compleixin alguna de les regles d'exclusió no sortiran al " "catàleg generat. " -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Excluded books" msgstr "Llibres exclosos" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "" "A regular expression describing genres to be excluded from the generated " "catalog. Genres are derived from the tags applied to your books.\n" @@ -7876,31 +7920,31 @@ msgstr "" "«[etiqueta]», per exemple «[Llibre de proba]» i «+», que és l'etiqueta per " "defecte per a un llibre llegit." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 msgid "Excluded genres" msgstr "Gèneres exclosos" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:291 -msgid "Tags to &exclude (regex):" -msgstr "&Etiquetes que s'exclouran (regex):" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +msgid "Genres to &exclude (regex):" +msgstr "Gèneres que s'&exclouran (regex):" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 msgid "Reset to default" msgstr "Restaura als valors per defecte" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 msgid "Results of regex:" msgstr "Resultats de regex:" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Tags that will be excluded as genres" msgstr "Etiquetes que s'exclouran com a gèneres" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Other options" msgstr "Altres opcions" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "" "Custom column containing additional content to be merged with Comments " "metadata." @@ -7908,79 +7952,79 @@ msgstr "" "Columna personalitzada amb contingut addicional que es fusionarà amb les " "metadades de «Comentaris»." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "Merge additional content before Comments metadata." msgstr "" "Fusiona el contingut addicional abans de les metadades de «Comentaris»." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 msgid "&Before" msgstr "A&bans" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 msgid "Merge additional content after Comments metadata." msgstr "" "Fusiona el contingut addicional després de les metadades de «Comentaris»." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "&After" msgstr "&Després" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "" "Separate Comments metadata and additional content with a horizontal rule." msgstr "" "Separa les metadades de «Comentaris» i el contingut addicional amb una línia " "horitzontal." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Include &Separator" msgstr "Inclou un &separador" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "&Merge with Comments:" msgstr "&Fusiona amb els comentaris:" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "Catalog cover:" msgstr "Portada del catàleg" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Generate new cover" msgstr "Genera una nova portada" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "Use existing cover" msgstr "Utilitza la portada actual" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "E&xtra Description note:" msgstr "Nota de descripció a&ddicional:" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "Custom column source for text to include in Description section." msgstr "" "Columna personalitzada origen del text a incloure a la secció «Descripció»." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "&Thumb width:" msgstr "Amplada de la minia&tura" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "Size hint for cover thumbnails included in Descriptions section." msgstr "" "Mesures suggerides per a les miniatures de portada incloses a la secció " "«Descripció»." -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid " inch" msgstr " polsada" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid "Author cross-references:" msgstr "Referències creuades dels autors:" -#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "For books with multiple authors, list each author separately" msgstr "Mostra cada autor per separat en llibres amb múltiples autors" @@ -9373,7 +9417,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "&Desa" @@ -9769,8 +9813,8 @@ msgstr "No s'ha pogut carregar el navegador de portades" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:713 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:736 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:787 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:345 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:233 @@ -9973,7 +10017,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "S'ha detectat un %s. Voleu que el calibre el gestioni?" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "No hi ha formats adequats" @@ -10015,76 +10059,76 @@ msgstr "" "Hi ha hagut un error temporal en la comunicació amb el dispositiu. " "Desconnecteu i torneu a connectar el dispositiu o torneu a arrencar." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "Dispositiu: " -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr " detectat" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "seleccionat per enviar" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "No hi ha cap dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "No hi ha cap dispositiu connectat" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "%(num)i de %(total)i llibres" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "0 de %i llibres" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "Tria el format que s'enviarà al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "No s'ha pogut enviar: no hi ha cap dispositiu connectat" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "Sense targeta" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "No s'ha pogut enviar: el dispositiu no té targeta de memòria" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" "S'ha de convertir automàticament aquests llibres abans de carregar-los al " "dispositiu?" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "S'estan enviant els catàlegs al dispositiu." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "S'estan enviant les notícies al dispositiu." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "S'estan enviant els llibres al dispositiu." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." @@ -10093,16 +10137,16 @@ msgstr "" "un format adequat. Convertiu primer el(s) llibre(s) a un format compatible " "amb el vostre dispositiu." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "No hi ha espai al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "

    No es pot desar llibres al dispositiu perquè no hi ha prou espai " -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "Destinació incorrecta" @@ -10277,26 +10321,77 @@ msgid "&Ignore the %s in calibre" msgstr "&Ignora %s al calibre" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "&Canvia les carpetes examinades" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "Mostra la informació del dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "Copia-ho al porta-retalls" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "S'ignorarà %s al calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "" +"You are trying to send books into the %s folder. This folder is " +"currently ignored by calibre when scanning the device. You have tell calibre " +"you want this folder scanned in order to be able to send books to it. Click " +"the configure button below to send books to it." +msgstr "" +"Esteu intentant enviar llibres a la carpeta %s. El calibre ignora " +"aquesta carpeta en examinar el dispositiu en l'actualitat. Li heu de dir al " +"calibre que voleu que examini aquesta carpeta per tal que hi pugui enviar " +"llibres. Feu clic al botó configura més avall per enviar-hi llibres." + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "Configura" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "No es pot enviar a %s" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "Trieu una carpeta del dispositiu" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "Carpetes examinades:" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "" +"You can select which top level folders calibre will scan when searching this " +"device for books." +msgstr "" +"Podeu seleccionar quines carpetes de nivell superior examinarà el calibre " +"quan cerqui llibres en aquest dispositiu." + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "Seleccion&a-ho tot" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "&No en seleccionis cap" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "Trieu les carpetes que s'han d'examinar" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "Quants llibres buits?" @@ -10758,31 +10853,27 @@ msgstr "No s'ha seleccionat cap ubicació" msgid "%s is not an existing folder" msgstr "La carpeta %s no existeix" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 msgid "Choose your calibre library" msgstr "Trieu la biblioteca del calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 msgid "Your calibre library is currently located at {0}" msgstr "La biblioteca del calibre està actualment situada a {0}" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 msgid "New &Location:" msgstr "Nova &ubicació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 msgid "Use the previously &existing library at the new location" msgstr "Utilitzeu la biblioteca que ja &existeix a la nova ubicació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 msgid "&Create an empty library at the new location" msgstr "&Crea una biblioteca buida a la nova ubicació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:82 -msgid "&Copy structure from the current library" -msgstr "&Copia l'estructura des de la biblioteca actual" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:84 msgid "" "Copy the custom columns, saved searches, column widths, plugboards,\n" "user categories, and other information from the old to the new library" @@ -10792,7 +10883,11 @@ msgstr "" "de connexions, categories d'usuari i d'altra informació de la biblioteca " "antiga a la nova" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:86 +msgid "&Copy structure from the current library" +msgstr "&Copia l'estructura des de la biblioteca actual" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:87 msgid "&Move current library to new location" msgstr "&Mou la biblioteca actual a la nova ubicació" @@ -10846,7 +10941,7 @@ msgstr "&Perfil:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "D'ac&ord" @@ -10902,8 +10997,8 @@ msgid "Location" msgstr "Ubicació" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -10922,13 +11017,13 @@ msgstr "%(curr)s (era %(initial)s)" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "L'element està en blanc" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "No es pot deixar un element en blanc. En tot cas l'heu d'esborrar." @@ -11017,7 +11112,7 @@ msgstr "Enllaça" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "No s'han trobat coincidències" @@ -11028,13 +11123,13 @@ msgid "Change Case" msgstr "Canvia la caixa" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:407 msgid "Upper Case" msgstr "Majúscules" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:299 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:408 msgid "Lower Case" msgstr "Minúscules" @@ -11045,13 +11140,13 @@ msgid "Swap Case" msgstr "Intercanvia la caixa" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410 msgid "Title Case" msgstr "Inicials en majúscula" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:303 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:411 msgid "Capitalize" msgstr "Posa en majúscules" @@ -11065,12 +11160,12 @@ msgid "Copy to author" msgstr "Copia a autor" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "El nom de l'autor no és vàlid" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "Els noms d'autor no poden contenir caràcters &." @@ -11203,8 +11298,8 @@ msgstr "Copiat" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "Mostra el registre" @@ -11214,54 +11309,54 @@ msgstr "Mostra el registre" msgid "Hide the remaining %d error messages" msgstr "Oculta els %d missatges d'error que queden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 msgid "Title/Author" msgstr "Títol/Autor" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 msgid "Standard metadata" msgstr "Metadades estàndard" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:939 msgid "Custom metadata" msgstr "Metadades personalitzades" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:64 msgid "Search/Replace" msgstr "Cerca/Reemplaça" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:83 msgid "Working" msgstr "S'està treballant..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 msgid "Character match" msgstr "Coincidència de caràcter" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 msgid "Regular Expression" msgstr "Expressió regular" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 msgid "Replace field" msgstr "Reemplaça el camp" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 msgid "Prepend to field" msgstr "Posa-ho abans del camp" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 msgid "Append to field" msgstr "Afegeix-ho al camp" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:321 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:322 #, python-format msgid "Editing meta information for %d books" msgstr "S'està editant les metadades de %d llibres" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:369 msgid "" "Immediately make all changes without closing the dialog. This operation " "cannot be canceled or undone" @@ -11269,16 +11364,16 @@ msgstr "" "Fes tots els canvis sense tancar el quadre immediatament. Aquesta acció no " "es pot cancel·lar ni desfer." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:436 #, python-format msgid "Book %d:" msgstr "Llibre %d:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:454 msgid "Enter an identifier type" msgstr "Introduïu un tipus d'identificador" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:460 msgid "" "You can destroy your library using this feature. Changes are " "permanent. There is no undo function. You are strongly encouraged to back up " @@ -11290,7 +11385,7 @@ msgstr "" "abans de continuar.

    Cerca i reemplaça als camps de text fent coincidir " "caràcters o expressions regulars. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:468 msgid "" "In character mode, the field is searched for the entered search text. The " "text is replaced by the specified replacement text everywhere it is found in " @@ -11307,7 +11402,7 @@ msgstr "" "s'ha seleccionat, el text de cerca coincidirà tant amb majúscules com en " "minúscules" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:479 msgid "" "In regular expression mode, the search text is an arbitrary python-" "compatible regular expression. The replacement text can contain " @@ -11333,28 +11428,28 @@ msgstr "" "voleu més informació quant a les expressions regulars en python, " "especialment quant a la funció «sub»." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:558 msgid "S/R TEMPLATE ERROR" msgstr "ERROR DE CERCA/REEMPLAÇA A LA PLANTILLA" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:706 msgid "You must specify a destination when source is a composite field" msgstr "Heu d'especificar una destinació quant la font és un camp compost" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:712 msgid "You must specify a destination identifier type" msgstr "Heu d'especificar un tipus d'identificador de destí" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:936 msgid "Search/replace invalid" msgstr "Cerca/reemplaça no vàlid" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:937 #, python-format msgid "Search pattern is invalid: %s" msgstr "El patró de cerca no és vàlid: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:993 #, python-format msgid "" "Applying changes to %d books.\n" @@ -11363,30 +11458,30 @@ msgstr "" "S'està aplicant els canvis a %d llibres.\n" "Fase {0} {1}%%." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1023 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:619 msgid "Delete saved search/replace" msgstr "Suprimeix el cerca/reemplaça desat" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1024 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "Es suprimirà el cerca/reemplaça desat. N'esteu segur?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1059 msgid "Save search/replace" msgstr "Desa el cerca/reemplaça" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050 msgid "Search/replace name:" msgstr "Nom del cerca/reemplaça:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1055 msgid "You must provide a name." msgstr "Heu de proporcionar un nom." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1060 msgid "" "That saved search/replace already exists and will be overwritten. Are you " "sure?" @@ -12163,8 +12258,8 @@ msgstr "S'està interrompent..." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:298 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1337 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "Autors" @@ -12207,7 +12302,7 @@ msgstr "Elements" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:282 msgid "Search" msgstr "Cerca" @@ -12873,12 +12968,12 @@ msgid "The port must be a number between 8000 and 32000." msgstr "El port ha de ser un nombre entre 8000 i 32000." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:392 msgid "Problem starting the wireless device" msgstr "Hi ha hagut un problema en iniciar el dispositiu sense fils" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:393 #, python-format msgid "The wireless device driver did not start. It said \"%s\"" msgstr "No s'ha iniciat el dispositiu sense fils. El missatge és «%s»" @@ -13169,7 +13264,7 @@ msgid "The template box cannot be empty" msgstr "El quadre de la plantilla no pot estar buit" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "Estableix el color de la columna:" @@ -13527,7 +13622,7 @@ msgstr "No s'ha pogut enviar el llibre" msgid "sent" msgstr "s'ha enviat" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 msgid "Sent news to" msgstr "S'ha enviat notícies a" @@ -13712,7 +13807,7 @@ msgid "Clear the font family" msgstr "Elimina el tipus de lletra" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306 msgid "Cover Browser" msgstr "el navegador de portades" @@ -13721,7 +13816,7 @@ msgid "Shift+Alt+B" msgstr "Maj+Alt+B" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301 msgid "Tag Browser" msgstr "l'explorador d'etiquetes" @@ -13745,7 +13840,7 @@ msgstr "Connectat " #: /home/kovid/work/calibre/src/calibre/gui2/init.py:215 #: /home/kovid/work/calibre/src/calibre/gui2/init.py:226 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:276 msgid "Book Details" msgstr "Detalls del llibre" @@ -14000,32 +14095,32 @@ msgstr "estrelles" msgid "Y" msgstr "S" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:285 msgid "On Device" msgstr "Al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 msgid "Size (MB)" msgstr "Mida (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:275 msgid "Modified" msgstr "Modificat" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:785 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1417 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:822 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:335 msgid "The lookup/search name is \"{0}\"" msgstr "El nom de la cerca és «{0}»" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:791 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1456 msgid "This book's UUID is \"{0}\"" msgstr "L'UUID del llibre és «{0}»" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:915 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324 @@ -14033,7 +14128,7 @@ msgstr "L'UUID del llibre és «{0}»" msgid "Permission denied" msgstr "S'ha denegat el permís" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:916 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:455 @@ -14044,32 +14139,32 @@ msgstr "" "No s'ha pogut canviar la localització al disc d'aquest llibre. El té obert " "un altre programa?" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:883 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:920 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:926 msgid "Failed to set data" msgstr "No s'ha pogut establir les dades" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:890 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:927 msgid "Could not set data, click Show Details to see why." msgstr "" "No s'ha pogut establir les dades, feu clic a «Mostra detalls» per veure " "perquè." -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 msgid "In Library" msgstr "A la biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1077 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1114 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:355 msgid "Size" msgstr "Mida" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1436 msgid "Marked for deletion" msgstr "S'ha marcat per suprimir" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1402 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1439 msgid "Double click to edit me

    " msgstr "Feu doble clic per a edittar>/b>
    -me" @@ -14176,7 +14271,7 @@ msgid "Previous Page" msgstr "Pàgina anterior" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:947 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:62 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 msgid "Back" @@ -14196,10 +14291,6 @@ msgstr "Coincidència següent" msgid "Open ebook" msgstr "Obre el llibre" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 -msgid "Configure" -msgstr "Configura" - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:35 msgid "Use the library located at the specified path." msgstr "Fes servir la biblioteca que hi ha al camí que s'indica" @@ -14288,7 +14379,7 @@ msgstr "" "seguit." #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:540 msgid "Corrupted database" msgstr "Base de dades malmesa" @@ -14363,25 +14454,16 @@ msgstr "S'ha enviat l'ordre de tancament, s'està esperant el tancament..." msgid "Failed to shutdown running calibre instance" msgstr "No s'ha pogut tancar la instància del calibre en execució" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:25 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" -"Redirigeix la sortida de consola a una finestra de diàleg (tant stdout com " -"stderr). Útil a Windows ja que les aplicacions gràfiques no tenen fluxos de " -"sortida." - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:94 msgid "&Preferences" msgstr "&Preferències" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "&Quit" msgstr "&Surt" -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:115 msgid "Unhandled exception" msgstr "Excepció no gestionada" @@ -14704,15 +14786,15 @@ msgid "Edit Metadata" msgstr "Edició de metadades" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:936 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:940 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:108 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:219 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:410 msgid "Next" msgstr "Següent" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:67 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:229 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:393 msgid "Previous" @@ -14862,15 +14944,15 @@ msgstr "&Comentaris" msgid "Basic metadata" msgstr "Metadades bàsiques" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has cover" msgstr "Té portada" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 msgid "Has summary" msgstr "Té resum" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:207 msgid "" "The has cover indication is not fully\n" "reliable. Sometimes results marked as not\n" @@ -14883,29 +14965,29 @@ msgstr "" "troba una portada a la fase de baixada de\n" "portades i a l'inrevés." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:292 msgid "See at" msgstr "Vegeu a" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:446 msgid "calibre is downloading metadata from: " msgstr "El calibre està baixant les metadades des de: " -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468 msgid "Please wait" msgstr "Espereu" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:500 msgid "Query: " msgstr "Consulta: " -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:519 msgid "Failed to download metadata. Click Show Details to see details" msgstr "" "No s'ha pogut baixar les metadades. Feu clic a «Mostra detalls» per a més " "informació" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:528 msgid "" "Failed to find any books that match your search. Try making the search " "less specific. For example, use only the author's last name and a " @@ -14917,42 +14999,42 @@ msgstr "" "l'autor i una sola paraula per identificar el títol.

    Feu clic a «Mostra " "detalls» per veure tot el registre." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:636 msgid "Current cover" msgstr "Portada actual" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:639 msgid "Searching..." msgstr "S'està cercant..." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:800 #, python-format msgid "Downloading covers for %s, please wait..." msgstr "S'està baixant portades per a %s, espereu..." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831 msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" "No s'ha pogut baixar cap portada. Feu clic a «Mostra detalls» per a més " "informació." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:837 #, python-format msgid "Could not find any covers for %s" msgstr "No s'ha trobat cap portada per a %s" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:839 #, python-format msgid "Found %(num)d covers of %(title)s. Pick the one you like best." msgstr "" "S'ha trobat %(num)d portades per a %(title)s. Trieu la que us agradi " "més." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:928 msgid "Downloading metadata..." msgstr "Descàrrega de les metadades..." -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1043 msgid "Downloading cover..." msgstr "Baixada de la portada..." @@ -15012,7 +15094,7 @@ msgstr "" "AVÍS Els fitxers que poseu a %s se suprimiran després d'afegir-los al " "calibre. N'esteu segur?" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:135 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -15035,13 +15117,13 @@ msgstr "" "la puntuació, majúscules... La\n" "coincidència d'autor és exacta." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:140 msgid "&Automerge added books if they already exist in the calibre library:" msgstr "" "Fusiona &automàticament els llibres afegits si ja estan a la biblioteca del " "calibre." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:141 msgid "" "Automerge: If books with similar titles and authors found, merge the " "incoming formats automatically into\n" @@ -15078,7 +15160,7 @@ msgstr "" "la puntuació, majúscules...\n" "La coincidència d'autor és exacta." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " @@ -15088,13 +15170,13 @@ msgstr "" "hi afegiu. El calibre pot llegir metadades tant del contingut del fitxer com " "del seu nom." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 msgid "Read &metadata from file contents rather than file name" msgstr "" "En lloc de llegir les &metadades a partir del nom del fitxer fes-ho a partir " "del seu contingut" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:153 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." @@ -15102,15 +15184,15 @@ msgstr "" "Intercanvia el nom i el cognom de l'autor. Afecta només les metadades que " "s'ha aconseguit del nom dels fitxers." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:154 msgid "&Swap author firstname and lastname" msgstr "&Intercanvia el nom i el cognom de l'autor" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:155 msgid "&Tags to apply when adding a book:" msgstr "E&tiquetes que s'aplicaran quan s'afegeixi un llibre:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 msgid "" "A comma-separated list of tags that will be applied to books added to the " "library" @@ -15118,11 +15200,11 @@ msgstr "" "S'afegirà una llista d'etiquetes separada per comes als llibres que " "s'afegeixin a la biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 msgid "&Configure metadata from file name" msgstr "&Configura les metadades a partir del nom de fitxer" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 msgid "" "When using the \"&Copy to library\" action to copy books between libraries, " "preserve the date" @@ -15130,16 +15212,37 @@ msgstr "" "Conserva la data en utilitzar l'acció «&Copia a la biblioteca» per copiar " "llibres entre biblioteques" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 msgid "Automatically &convert added books to the current output format" msgstr "" "&Converteix automàticament els llibres afegits al format de sortida actual" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 msgid "The Add &Process" msgstr "Procés d'addició" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +msgid "Ignore files with the following extensions when automatically adding " +msgstr "" +"En afegir automàticament ignora els fitxers amb les extensions següents " + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +msgid "" +"Specify a folder. Any files you put into this folder will be automatically " +"added to calibre (restart required)." +msgstr "" +"Especifiqueu una carpeta. Els fitxers que hi poseu s'afegiran automàticament " +"al calibre (cal reniciar)" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +msgid "" +"WARNING: Files in the above folder will be deleted after being added " +"to calibre." +msgstr "" +"AVÍS Els fitxers de la carpeta de dalt se suprimiran després d'afegir-" +"los al calibre." + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 msgid "" "If set, this option will causes calibre to check if a file\n" " being auto-added is already in the calibre library.\n" @@ -15151,45 +15254,24 @@ msgstr "" " Si hi és, un missatge emergent us pregunarà si voleu\n" " afegir-lo igualment." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:168 msgid "Check for &duplicates when auto-adding files" msgstr "Comprova els &duplicats en afegir fitxers automàticament" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:157 -msgid "" -"Specify a folder. Any files you put into this folder will be automatically " -"added to calibre (restart required)." -msgstr "" -"Especifiqueu una carpeta. Els fitxers que hi poseu s'afegiran automàticament " -"al calibre (cal reniciar)" - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:158 -msgid "" -"WARNING: Files in the above folder will be deleted after being added " -"to calibre." -msgstr "" -"AVÍS Els fitxers de la carpeta de dalt se suprimiran després d'afegir-" -"los al calibre." - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:159 -msgid "Ignore files with the following extensions when automatically adding " -msgstr "" -"En afegir automàticament ignora els fitxers amb les extensions següents " - -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:169 msgid "Folder to auto-add files from" msgstr "Carpeta d'addició automàtica" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:170 msgid "Browse for folder" msgstr "Cerca la carpeta" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:172 msgid "Automatically &convert added files to the current output format" msgstr "" "&Converteix automàticament els llibres afegits al format de sortida actual" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:173 msgid "&Automatic Adding" msgstr "&Addició automàtica" @@ -15315,87 +15397,91 @@ msgstr "Fes servir el &visor intern per a:" msgid "Reset all disabled &confirmation dialogs" msgstr "Reinicia tots els diàlegs de &confirmació que s'hagin desactivat" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:26 +msgid "All Columns" +msgstr "Totes les columnes" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37 msgid "is true" msgstr "és cert" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38 msgid "is false" msgstr "és fals" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34 msgid "is undefined" msgstr "no està definit" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41 msgid "has id" msgstr "té identificador" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42 msgid "does not have id" msgstr "no té identificador" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 msgid "is equal to" msgstr "és igual a" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46 msgid "is less than" msgstr "és menor que" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47 msgid "is greater than" msgstr "és major que" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 msgid "has" msgstr "té" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 msgid "does not have" msgstr "no té" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 msgid "has pattern" msgstr "té el patró" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 msgid "does not have pattern" msgstr "no té el patró" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:62 msgid "is set" msgstr "està establert" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:63 msgid "is not set" msgstr "no està establert" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 msgid "is" msgstr "és" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 msgid "is not" msgstr "no és" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60 msgid "matches pattern" msgstr "coincideix amb el patró" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61 msgid "does not match pattern" msgstr "no coincideix amb el patró" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:80 msgid "If the ___ column ___ values" msgstr "Si la columna ___ ___" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219 msgid "" "Enter either an identifier type or an identifier type and value of the form " "identifier:value" @@ -15403,7 +15489,7 @@ msgstr "" "Introduïu un tipus d'identificador o un tipus d'identificador i un valor en " "la forma «identificador:valor»" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222 msgid "" "Enter a 3 letter ISO language code, like fra for French or deu for German or " "eng for English. You can also use the full language name, in which case " @@ -15414,48 +15500,48 @@ msgstr "" "complert; en aquest cas el calibre intentarà convertir-lo automàticament al " "codi d'idioma." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227 msgid "Enter a number" msgstr "Introduïu un nombre" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 msgid "Enter a date in the format YYYY-MM-DD" msgstr "Introduïu una data en el format AAAA-MM-DD" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 msgid "Enter a string." msgstr "Introduïu una cadena" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 msgid "Enter a regular expression" msgstr "Introduïu una expressió regular" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:238 #, python-format msgid "You can match multiple values by separating them with %s" msgstr "Podeu fer coincidir múltiples valors si els separeu amb %s" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253 msgid "Create/edit a column coloring rule" msgstr "Crea/edita una regla de pintat de columna" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258 msgid "Create a coloring rule by filling in the boxes below" msgstr "Crea una regla de pintat omplint els quadres de més avall" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272 msgid "to" msgstr "a" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:283 msgid "Only if the following conditions are all satisfied:" msgstr "Només si es compleixen les condicions següents:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:293 msgid "Add another condition" msgstr "Afegeix una altra condició" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:297 msgid "You can disable a condition by blanking all of its boxes" msgstr "" "Es pot inhabilitar una condició deixant en blanc tots els seus quadres" @@ -15483,7 +15569,7 @@ msgstr "" "Per a aquesta regla s'ha d'especificar almenys una condició que no estigui " "buida" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:476 #, python-format msgid "" "\n" @@ -15496,7 +15582,7 @@ msgstr "" "

    %(rule)s
    \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:481 #, python-format msgid "" "

    Set the color of %(col)s to %(color)s if the " @@ -15511,14 +15597,14 @@ msgstr "" "

      %(rule)s
    \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:496 #, python-format msgid "" "
  • If the %(col)s column %(action)s value: %(val)s" msgstr "" "
  • Si la columna %(col)s %(action)s el valor: %(val)s" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:512 msgid "" "You can control the color of columns in the book list by creating \"rules\" " "that tell calibre what color to use. Click the Add Rule button below to get " @@ -15529,36 +15615,36 @@ msgstr "" "«Afegeix una regla» més avall per començar.

    Podeu canviar una regla " "existent fent-hi doble clic." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:520 msgid "Add Rule" msgstr "Afegeix una regla" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:523 msgid "Remove Rule" msgstr "Suprimeix una regla" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:540 msgid "Move the selected rule up" msgstr "Mou la regla seleccionada amunt" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:545 msgid "Move the selected rule down" msgstr "Mou la regla seleccionada avall" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:553 msgid "Add Advanced Rule" msgstr "Afegeix una regla avançada" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 msgid "No rule selected" msgstr "No s'ha seleccionat cap regla" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:602 #, python-format msgid "No rule selected for %s." msgstr "No s'ha seleccionat cap regla per a %s." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:607 msgid "removal" msgstr "supressió" @@ -16194,120 +16280,120 @@ msgstr "Estil de Calibre" msgid "System default" msgstr "Valor per defecte del sistema" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Off" msgstr "Desactivat" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 msgid "Small" msgstr "Petita" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Large" msgstr "Gran" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:142 msgid "Medium" msgstr "Mitjana" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "Always" msgstr "Sempre" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 msgid "If there is enough room" msgstr "Si hi ha prou espai" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:146 msgid "Never" msgstr "Mai" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:593 msgid "By first letter" msgstr "Per inicial" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 msgid "Disabled" msgstr "Inhabilitat" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:150 msgid "Partitioned" msgstr "Repartit" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:183 msgid "Column coloring" msgstr "Pintat de columna" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:247 msgid " or " msgstr " o " -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 msgid "Choose &language (requires restart):" msgstr "Trieu &l'idioma (caldrà reiniciar):" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 msgid "Enable system &tray icon (needs restart)" msgstr "Habilita la icona a la safata del sis&tema (caldrà reiniciar)" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 msgid "User Interface &layout (needs restart):" msgstr "Disposició de &la interfície d'usuari (caldrà reiniciar):" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" "Inhabilita totes les animacions. Útil si teniu un ordinador lent o vell." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 msgid "Disable &animations" msgstr "Inhabilita les &animacions" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 msgid "Disable ¬ifications in system tray" msgstr "Inhabilita les ¬ificacions de la safata del sistema" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 msgid "Show &splash screen at startup" msgstr "Mostra la pantalla de presentació a l'inici" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 msgid "&Toolbar" msgstr "&Barra d'eines" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 msgid "&Icon size:" msgstr "Mida de la &icona:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 msgid "Show &text under icons:" msgstr "Mostra el &text sota les icones:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 msgid "Interface font:" msgstr "Tipus de lletra de la interfície:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 msgid "Change &font (needs restart)" msgstr "Canvia el tipus de &lletra (caldrà reiniciar)" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 msgid "User interface &style (needs restart):" msgstr "E&stil de la interfície de l'usuari (cal reiniciar):" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 msgid "Show &tooltips in the book list" msgstr "Mostra indic&adors de funció a la llista de llibres" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:261 msgid "Main Interface" msgstr "Interfície principal" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:262 msgid "" "Note that comments will always be displayed at the end, regardless of " "the position you assign here." @@ -16315,27 +16401,27 @@ msgstr "" "Tingueu en compte que els comentaris es mostren sempre al final, " "independentment de la posició que els assigneu aquí." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:263 msgid "Use &Roman numerals for series" msgstr "Fes servir números &romans per a les sèries" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:264 msgid "Select displayed metadata" msgstr "Selecciona les metadades que es visualitzen" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 msgid "Move up" msgstr "Desplaça cap amunt" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:266 msgid "Move down" msgstr "Desplaça cap avall" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 msgid "Default author link template:" msgstr "Plantilla d'enllaç d'autor per defecte:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:268 msgid "" "

    Enter a template to be used to create a link for\n" "an author in the books information dialog. This template will\n" @@ -16349,11 +16435,19 @@ msgstr "" "utilitzant «Gestió d'autors». Podeu utilitzar els valors\n" "«{author}» i «{author_sort}» i qualsevol funció de plantilla." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 msgid "Show &cover in the book details panel" msgstr "Mostra la &portada al panell de detalls del llibre" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +msgid "Show the size of the book's cover in pixels" +msgstr "Mostra la mida de la portada del llibre en píxels" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:275 +msgid "Show cover &size" +msgstr "Mo&stra la mida de la portada" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:277 msgid "" "A comma-separated list of categories in which items containing\n" "periods are displayed in the tag browser trees. For example, if\n" @@ -16369,11 +16463,11 @@ msgstr "" "com a «Català» i «Suspens» a sota de «Misteri». Si «tags» no és al\n" "quadre cada etiqueta es mostrarà a la seva pròpia línia." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 msgid "Tags browser category &partitioning method:" msgstr "Mètode de &partició de categories del navegador d'etiquetes:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:284 msgid "" "Choose how tag browser subcategories are displayed when\n" "there are more items than the limit. Select by first\n" @@ -16387,11 +16481,11 @@ msgstr "" "tenir una llista de grups de mida fixa. Inabiliteu-ho si no voleu\n" "subcategories." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 msgid "&Collapse when more items than:" msgstr "&Redueix si hi ha més elements que:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 msgid "" "If a Tag Browser category has more than this number of items, it is divided\n" "up into subcategories. If the partition method is set to disable, this value " @@ -16403,11 +16497,11 @@ msgstr "" "«inhabilita», aquest\n" "valor s'ignora." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 msgid "Categories not to partition:" msgstr "Categories que no s'ha de partir:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 msgid "" "A comma-separated list of categories that are not to\n" "be partitioned even if the number of items is larger than\n" @@ -16421,35 +16515,35 @@ msgstr "" "per evitar el col·lapse de categories jeràrquiques que\n" "tenen pocs elements elements de nivell superior." -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298 msgid "Show &average ratings in the tags browser" msgstr "Mostra l&a mitjana de les valoracions a l'explorador d'etiquetes" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299 msgid "Categories with &hierarchical items:" msgstr "Categories amb elements &jeràrquics:" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300 msgid "Use &alternating row colors in the Tag Browser" msgstr "Utilitza colors &alternats a les files de l'explorador d'etiquetes" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" "Mostra el navegador de &portades en una finestra separada (caldrà reiniciar)" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" "&Número de portades que es mostraran al mode explorador (caldrà reiniciar):" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304 msgid "When showing cover browser in separate window, show it &fullscreen" msgstr "" "Mostra el navegador de portades en pantalla &completa en mostrar-lo en una " "finestra separada" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305 #, python-format msgid "You can press the %s keys to toggle full screen mode." msgstr "Premeu les tecles %s per commutar el mode de pantalla completa." @@ -17359,7 +17453,7 @@ msgstr "" "Preferències->Avançat->Connectors" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:477 msgid "Failed to start content server" msgstr "No s'ha pogut iniciar el servidor de continguts" @@ -18354,7 +18448,7 @@ msgid "Books:" msgstr "Llibres:" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:186 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "&Close" msgstr "&Tanca" @@ -18402,7 +18496,7 @@ msgstr "&Consulta:" #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/store/web_store_dialog_ui.py:63 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:670 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:670 msgid "Close" msgstr "Tanca" @@ -18440,52 +18534,52 @@ msgstr "Torna a carregar" msgid "%p%" msgstr "%p%" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:330 msgid "The grouped search term name is \"{0}\"" msgstr "El nom del terme de cerca agrupada és «{0}»" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:794 msgid "" "Changing the authors for several books can take a while. Are you sure?" msgstr "" "El canvi dels autors de diversos llibres pot trigar una estona. N'esteu " "segur?" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:799 msgid "" "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" "El canvi de les metadadades de tots aquests llibres pot trigar una estona. " "N'esteu segur?" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:886 #: /home/kovid/work/calibre/src/calibre/library/database2.py:495 msgid "Searches" msgstr "Cerques" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:992 msgid "Rename user category" msgstr "Canvia el nom a la categoria d'usuari" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964 msgid "You cannot use periods in the name when renaming user categories" msgstr "" "No es pot utilitzar punts al nom quan s'està canviant el nom de categories " "d'usuari" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:993 #, python-format msgid "The name %s is already used" msgstr "El nom %s ja s'està utilitzant" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1012 msgid "Duplicate search name" msgstr "El nom de la cerca està duplicat" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1013 #, python-format msgid "The saved search name %s is already used." msgstr "El nom de cerca %s ja existeix." @@ -18507,13 +18601,13 @@ msgid "Manage Tags" msgstr "Gestiona les etiquetes" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:540 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:579 msgid "Manage User Categories" msgstr "Gestiona les categories d'usuari" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:561 msgid "Manage Saved Searches" msgstr "Gestiona les cerques desades" @@ -18615,7 +18709,7 @@ msgid "Alter Tag Browser" msgstr "Modifica l'explorador d'etiquetes" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:397 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:276 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:277 msgid "Sort by" msgstr "Ordena per" @@ -18658,105 +18752,118 @@ msgstr "" "Tots aquests gestors de categories estan disponibles amb un clic dret als " "elements dins de l'explorador d'etiquetes de més amunt." -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:304 +#, python-format +msgid "Change Icon for: %s" +msgstr "Canvia la icona per a: %s" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:511 #, python-format msgid "Rename %s" msgstr "Canvia el nom de %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:448 #, python-format msgid "Delete %s" msgstr "Suprimeix %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:452 #, python-format msgid "Edit sort for %s" msgstr "Edita l'ordre de %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:455 #, python-format msgid "Edit link for %s" msgstr "Modifica l'enllaç de %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:462 #, python-format msgid "Add %s to user category" msgstr "Afegeix a la categoria d'u%suari" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:475 #, python-format msgid "Children of %s" msgstr "Fill de %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:485 #, python-format msgid "Delete search %s" msgstr "Suprimeix la cerca %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 #, python-format msgid "Remove %(item)s from category %(cat)s" msgstr "Suprimeix %(item)s de la categoria %(cat)s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:503 #, python-format msgid "Search for everything but %s" msgstr "Cerca-ho tot excepte %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 #, python-format msgid "Add sub-category to %s" msgstr "Afegeix una subcategoria a %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:519 #, python-format msgid "Delete user category %s" msgstr "Suprimeix la categoria d'usuari %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 #, python-format msgid "Hide category %s" msgstr "Oculta la categoria %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:528 msgid "Show category" msgstr "Mostra la categoria" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:538 #, python-format msgid "Search for books in category %s" msgstr "Cerca llibres a la categoria %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:544 #, python-format msgid "Search for books not in category %s" msgstr "Cerca llibres que no estiguin a la categoria %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:524 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:558 #, python-format msgid "Manage %s" msgstr "Gestiona %s" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:566 +msgid "Change category icon" +msgstr "Canvia la icona de la categoria" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:568 +msgid "Restore default icon" +msgstr "Restaura la icona per defecte" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:586 msgid "Show all categories" msgstr "Mostra totes les categories" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:590 msgid "Change sub-categorization scheme" msgstr "Canvia el mètode de divisió per categories" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:591 msgid "Disable" msgstr "Inhabilita" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:595 msgid "Partition" msgstr "Partició" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:610 msgid "First letter is usable only when sorting by name" msgstr "Només es pot utilitzar la primera lletra quan s'ordena per nom" @@ -18810,31 +18917,31 @@ msgstr "" "Els llibres següents ja s'han convertit al format %s. Els voleu tornar a " "convertir?" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:205 msgid "&Donate to support calibre" msgstr "Feu una &donació per donar suport al calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:241 msgid "&Restore" msgstr "&Restaura" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "&Eject connected device" msgstr "&Expulseu el dispositiu connectat" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 msgid "Quit calibre" msgstr "Surt del calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:263 msgid "Clear the current search" msgstr "Suprimeix la cerca actual" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 msgid "Debug mode" msgstr "Mode de depuració" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 #, python-format msgid "" "You have started calibre in debug mode. After you quit calibre, the debug " @@ -18845,11 +18952,11 @@ msgstr "" "el registre de depuració estarà disponible al fitxer: %s

    El registre es " "mostrarà automàticament." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:409 msgid "Failed to start Content Server" msgstr "No s'ha pogut iniciar el servidor de continguts" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 #, python-format msgid "" "Could not start the content server. Error:\n" @@ -18860,7 +18967,7 @@ msgstr "" "\n" "%s" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:541 #, python-format msgid "" "The library database at %s appears to be corrupted. Do you want calibre to " @@ -18871,16 +18978,16 @@ msgstr "" "el calibre intenti reconstruir-la automàticament? Pot ser que no es pugui " "reconstruir totalment." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:625 msgid "Conversion Error" msgstr "Error de conversió" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:646 #, python-format msgid "

    Failed to convert: %s" msgstr "

    No s'ha pogut convertir: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -18920,23 +19027,23 @@ msgstr "" " amb l'EPUB.\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661 msgid "Conversion Failed" msgstr "No s'ha pogut convertir" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Recipe Disabled" msgstr "Recepta inhabilitada" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:706 msgid "Failed" msgstr "Ha fallat" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:738 msgid "There are active jobs. Are you sure you want to quit?" msgstr "Hi ha tasques actives. Segur que voleu sortir?" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:741 msgid "" " is communicating with the device!
    \n" " Quitting may cause corruption on the device.
    \n" @@ -18946,11 +19053,11 @@ msgstr "" " Si sortiu podeu malmetre el dispositiu.
    \n" " Segur que voleu sortir?" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:743 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 msgid "Active jobs" msgstr "Tasques actives" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:815 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." @@ -18958,7 +19065,7 @@ msgstr "" "continuarà en execució a la safata del sistema. Per tancar-lo trieu " "Surt al menú de context de la safata del sistema." -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:86 #, python-format msgid "" "New version %(ver)s of %(app)s is available for download. See the %(ver)s
    de %(app)s. Vegeu les novetats." -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:92 msgid "Update available!" msgstr "Hi ha una actualització!" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:97 msgid "Show this notification for future updates" msgstr "Mostra aquesta notificació per a les properes actualitzacions" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:102 msgid "&Get update" msgstr "Aconsegueix l'&actualització" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:106 msgid "Update &plugins" msgstr "Actualitza els &connectors" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:162 #, python-format msgid " (%d plugin updates)" msgstr " (%d actualitzacions de connectors" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:165 msgid "Update found" msgstr "S'ha trobat una actualització" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:168 msgid "updated plugins" msgstr "s'ha actualitzat els connectors" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/update.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:201 msgid "Plugin Updates" msgstr "Actualitzacions de connectors" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:199 #, python-format msgid "There are %d plugin updates available" msgstr "Hi ha %d actualitzacions de connectors disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/update.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/update.py:203 msgid "Install and configure user plugins" msgstr "Instal·la i configura els complements de l'usuari" @@ -19049,7 +19156,7 @@ msgstr "Edita" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:417 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:676 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:676 msgid "Reset" msgstr "Restableix" @@ -19962,7 +20069,7 @@ msgid "< &Back" msgstr "< &Endarrere" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:856 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "Cancel" msgstr "Canceŀla" @@ -20336,13 +20443,13 @@ msgstr "activat" #: /home/kovid/work/calibre/src/calibre/library/caches.py:177 #: /home/kovid/work/calibre/src/calibre/library/caches.py:615 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "yes" msgstr "sí" #: /home/kovid/work/calibre/src/calibre/library/caches.py:179 #: /home/kovid/work/calibre/src/calibre/library/caches.py:614 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:228 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:229 msgid "no" msgstr "no" @@ -20493,7 +20600,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica al format de sortida BIBTEX" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:32 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:33 #, python-format msgid "" "The fields to output when cataloging books in the database. Should be a " @@ -20512,7 +20619,7 @@ msgstr "" "Per defecte: «%%default»\n" "S'aplica als formats de sortida CSV, XML" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:45 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/csv_xml.py:46 #, python-format msgid "" "Output field to sort on.\n" @@ -20525,7 +20632,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida CSV, XML" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -20536,7 +20643,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -20548,7 +20655,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW·, EPUB, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the " @@ -20563,7 +20670,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -20577,7 +20684,7 @@ msgstr "" "llegits.\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -20601,7 +20708,7 @@ msgstr "" "Se es defineix múltiples regles, s'apliquen totes.\n" "Per defecte: \n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -20612,7 +20719,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -20623,7 +20730,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -20634,7 +20741,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -20645,7 +20752,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -20656,7 +20763,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -20667,7 +20774,18 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#, python-format +msgid "" +"Source field for Genres section.\n" +"Default: '%default'\n" +"Applies to: AZW3, ePub, MOBI output formats" +msgstr "" +"Camp font de la secció de gèneres.\n" +"Per defecte «%default»\n" +"S'aplica als formats de sortida AZW3, ePub, MOBI" + +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -20679,7 +20797,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -20698,7 +20816,7 @@ msgstr "" "Valor predeterminado: «%default»\n" "S'aplica als formats de sortida: AZW3, ePub, MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:145 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required " @@ -20714,7 +20832,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist " "items and other user-specified prefixes.\n" @@ -20732,7 +20850,7 @@ msgstr "" "coincidència.\n" "Per defecte:\n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:161 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -20743,7 +20861,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -20756,7 +20874,7 @@ msgstr "" "Per defecte: «%default»\n" "S'aplica als formats de sortida AZW3, ePub i MOBI" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:287 msgid "" "\n" "*** Adding 'By Authors' Section required for MOBI output ***" @@ -20764,64 +20882,64 @@ msgstr "" "\n" "*** La sortida MOBI necessita que s'afegeixi la secció «Per autor» ***" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:55 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:57 msgid "Symbols" msgstr "Símbols" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:283 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:288 msgid "No genres to catalog.\n" msgstr "No hi ha gèneres per catalogar\n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:290 msgid "Check 'Excluded genres' regex in E-book options.\n" msgstr "" "Comproveu l'expressió regular «Gèneres exclosos» a les opcions del llibre.\n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:287 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:292 msgid "No books available to catalog" msgstr "No es disposa de cap llibre per catalogar" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:300 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2395 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:305 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2477 msgid "Titles" msgstr "Títols" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:304 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:309 msgid "Genres" msgstr "Gèneres" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1698 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:311 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1780 msgid "Recently Added" msgstr "Afegits recentment" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:308 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1897 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:313 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1979 msgid "Recently Read" msgstr "Llegits recentment" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:310 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:315 msgid "Descriptions" msgstr "Descripcions" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:537 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:542 msgid "

    Inconsistent Author Sort values for Author
    " msgstr "

    Els valors d'ordre d'autor no són consistents amb l'autor
    " -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:554 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:559 msgid "Warning: Inconsistent Author Sort values for Author '{!s}':\n" msgstr "" "Avís: Els valors d'ordre d'autor no són consistents amb l'autor «{!s}»:\n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:726 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:744 msgid "Sorting database" msgstr "S'està ordenant la base de dades" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:807 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:846 msgid "Sorting titles" msgstr "S'està ordenant els títols" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:858 msgid "" "No books to catalog.\n" "Check 'Excluded books' rules in E-book options.\n" @@ -20829,107 +20947,107 @@ msgstr "" "No hi ha llibres per catalogar.\n" "Comproveu les regles de «Llibres exclosos» a les opcions de llibres.\n" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:821 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:860 msgid "No books available to include in catalog" msgstr "No es disposa de cap llibre per incloure al catàleg." -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1978 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2060 msgid "Genres HTML" msgstr "HTML de Gèneres" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2375 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2457 msgid "Titles HTML" msgstr "HTML de Títols" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2572 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2574 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2576 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2654 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2656 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2658 msgid "by " msgstr "per " -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2713 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2795 msgid "Descriptions HTML" msgstr "HTML de Descripcions" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2717 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2799 msgid "Description HTML" msgstr "HTML de Descripció" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2850 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2932 msgid "NCX header" msgstr "Capçalera NCX" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2929 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3009 msgid "NCX for Descriptions" msgstr "NCX per a Descripcions" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3136 msgid "NCX for Series" msgstr "NCX per a Sèries" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3138 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3221 #, python-format msgid "Series beginning with %s" msgstr "Sèries que comencen per %s" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3140 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3223 #, python-format msgid "Series beginning with '%s'" msgstr "Sèries que comencen per «%s»" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3267 msgid "NCX for Titles" msgstr "NCX per a Títols" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3268 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3354 #, python-format msgid "Titles beginning with %s" msgstr "Títols que comencen per %s" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3270 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3356 #, python-format msgid "Titles beginning with '%s'" msgstr "Títols que comencen per «%s»" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3312 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3398 msgid "NCX for Authors" msgstr "NCX per a Autors" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3388 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3477 #, python-format msgid "Authors beginning with %s" msgstr "Autors que comencen per %s" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3390 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3479 #, python-format msgid "Authors beginning with '%s'" msgstr "Autors que comencen per «%s»" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3431 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3520 msgid "NCX for Recently Added" msgstr "NCX per a Afegits recentment" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3624 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3713 msgid "NCX for Recently Read" msgstr "NCX per a Llegits recentment" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3766 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3855 msgid "NCX for Genres" msgstr "NCX per a Gèneres" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3889 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3980 msgid "Generating OPF" msgstr "S'està generant l'OPF" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4269 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4357 msgid "Thumbnails" msgstr "Miniatures" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4275 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4363 msgid "Thumbnail" msgstr "Miniatura" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4810 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4897 msgid "Saving NCX" msgstr "S'està desant l'NCX" @@ -21045,7 +21163,7 @@ msgstr "" "defecte no es filtra." #: /home/kovid/work/calibre/src/calibre/library/cli.py:169 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1244 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1249 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." @@ -21074,7 +21192,7 @@ msgstr "Camps no vàlids. Camps disponibles:" msgid "Invalid sort field. Available fields:" msgstr "Camp d'ordenació no vàlid. Camps disponibles:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:283 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:285 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" @@ -21082,12 +21200,12 @@ msgstr "" "No s'ha afegit els llibres següents perquè ja són a la base de dades (vegeu " "l'opció --duplicates):" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:303 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:305 #, python-format msgid "Added book ids: %s" msgstr "S'ha afegit els idectificadors de llibre: %s" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:311 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -21101,7 +21219,7 @@ msgstr "" "indicar carpetes, vegeu\n" "les opcions relacionades amb les carpetes més avall.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:319 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" @@ -21109,11 +21227,11 @@ msgstr "" "Assumeix que cada carpeta conté un sol llibre lògic i que tots els fitxers " "que hi ha són diferents formats del mateix llibre" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:321 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 msgid "Process directories recursively" msgstr "Processa les carpetes de forma recursiva" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:323 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." @@ -21121,39 +21239,43 @@ msgstr "" "Afegeix els llibres a la base de dades encara que ja existeixin. La " "comparació es fa mitjançant els títols dels llibres." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:325 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 msgid "Add an empty book (a book with no formats)" msgstr "Afegeix un llibre en blanc (sense formats)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:327 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "Set the title of the added book(s)" msgstr "Estableix el títol del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 msgid "Set the authors of the added book(s)" msgstr "Estableix els autors del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 msgid "Set the ISBN of the added book(s)" msgstr "Estableix l'ISBN del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 msgid "Set the tags of the added book(s)" msgstr "Estableix les etiquetes del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:335 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "Set the series of the added book(s)" msgstr "Estableix la sèrie del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:339 msgid "Set the series number of the added book(s)" msgstr "Estableix el nombre de sèrie del(s) llibre(s) afegit(s)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:341 +msgid "Path to the cover to use for the added book" +msgstr "Camí a la portada que s'utilitzarà per al llibre afegit" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:377 msgid "You must specify at least one file to add" msgstr "Heu d'especificar almenys un camp per afegir" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:392 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:397 msgid "" "%prog remove ids\n" "\n" @@ -21171,11 +21293,11 @@ msgstr "" "exemple, 23,34,57-85 (quan s'especifica un interval no s'inclou el darrer " "nombre de l'interval).\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:407 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:412 msgid "You must specify at least one book to remove" msgstr "Heu d'especificar almenys un llibre per suprimir" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:428 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -21189,15 +21311,15 @@ msgstr "" "identificat per ID. Podeu aconseguir l'ID amb l'ordre «list». Si el format " "ja existeix es sobreescriurà.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 msgid "You must specify an id and an ebook file" msgstr "Heu d'especificar una ID i un fitxer de llibre" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:447 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:452 msgid "ebook file must have an extension" msgstr "Els fitxers de llibre han de tenir una extensió" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:457 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:462 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -21214,11 +21336,11 @@ msgstr "" "fitxer com LRF, TXT o EPUB. Si el llibre lògic no té el format que " "s'especifica no es farà res\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:473 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:478 msgid "You must specify an id and a format" msgstr "Heu d'especificar una ID i un format" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -21234,15 +21356,15 @@ msgstr "" "que identifica l'ID.\n" "ID és un número obtingut amb l'ordre «list».\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:499 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Print metadata in OPF form (XML)" msgstr "Imprimeix les metadades en format OPF (XML)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:508 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 msgid "You must specify an id" msgstr "Heu d'especificar una ID" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:520 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:525 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -21268,7 +21390,7 @@ msgstr "" "amb\n" "l'opció «--field».\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:538 msgid "" "The field to set. Format is field_name:value, for example: {0} " "tags:tag1,tag2. Use {1} to get a list of all field names. You can specify " @@ -21285,36 +21407,36 @@ msgstr "" "la sintaxi és {0} {2}. Per als camps booleans (sí/no) utilitzeu «true» i " "«false» o «yes» i «no»." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:548 msgid "" "List the metadata field names that can be used with the --field option" msgstr "" "Mostra una llista dels noms dels camps de metadades que es poden utilitzar " "amb l'opció --field opció" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:564 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:569 msgid "Field name" msgstr "Nom del camp" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:580 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:585 msgid "You must specify a record id as the first argument" msgstr "Heu d'especificar un identificador de registre com a primer argument" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:586 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:591 msgid "You must specify either a field or an opf file" msgstr "Heu d'especificar o un camp o un arxiu opf" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:593 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 #, python-format msgid "The OPF file %s does not exist" msgstr "El fitxer OPF %s no existeix" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:603 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:608 #, python-format msgid "%s is not a known field" msgstr "%s no és un camp conegut" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:633 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:638 msgid "" "%prog export [options] ids\n" "\n" @@ -21332,29 +21454,29 @@ msgstr "" "metadades (a un\n" "fitxer opf). Podeu aconseguir les IDs amb l'ordre «list».\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:641 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:646 msgid "Export all books in database, ignoring the list of ids." msgstr "" "Exporta tots els llibres de la base de dades, ignorant la llista d'IDs." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:643 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "Export books to the specified directory. Default is" msgstr "Exporta els llibres a la carpeta que s'indica. Per defecte és" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:650 msgid "Export all books into a single directory" msgstr "Exporta tots els llibres a una carpeta" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:657 msgid "Specifying this switch will turn this behavior off." msgstr "Si indiqueu aquesta opció es desactiva aquest comportament." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:675 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:680 #, python-format msgid "You must specify some ids or the %s option" msgstr "Heu d'indicar alguna ID o l'opció %s" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:693 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -21371,7 +21493,7 @@ msgstr "" "espais ni dos punts. El nom és el nom visible de la columna. El tipus de " "dades és un de: {0}\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:697 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:702 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." @@ -21379,7 +21501,7 @@ msgstr "" "Aquesta columna emmagatzema les etiquetes com a dades (amb valors separats " "per comes). Només s'aplica si les dades són de tipus text." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:701 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:706 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted. This is a JSON string. For enumeration columns, use --" @@ -21416,11 +21538,11 @@ msgstr "" "de crear la columna). Veureu la cadena JSON per a «display» de la nova " "columna al fitxer OPF." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:730 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:735 msgid "You must specify label, name and datatype" msgstr "Heu d'indicar etiqueta, nom i tipus de dades" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:793 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:798 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -21439,7 +21561,7 @@ msgstr "" "genera.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:806 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:811 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" @@ -21449,7 +21571,7 @@ msgstr "" "Si es declara, s'ignora --search.\n" "Per defecte: totes" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:810 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:815 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" @@ -21459,16 +21581,16 @@ msgstr "" "documentació del tema al Manual de l'usuari.\n" "Per defecte: sense filtre" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:816 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:821 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545 msgid "Show detailed output information. Useful for debugging" msgstr "Mostra informació de sortida detallada. Útil per a depurar" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:830 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:835 msgid "Error: You must specify a catalog output file" msgstr "Error: Heu d'indicar un fitxer de sortida del catàleg" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:879 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:884 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -21489,7 +21611,7 @@ msgstr "" " l'ordre custom_columns.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:889 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:894 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." @@ -21497,11 +21619,11 @@ msgstr "" "Si la columna conté múltiples valors, afegeix els valors que s'indiquen als " "que ja hi ha, en lloc de substituir-los." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:900 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:905 msgid "Error: You must specify a field name, id and value" msgstr "Error: Heu d'indicar un nom de camp, ID i valor" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:920 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:925 msgid "" "\n" " %prog custom_columns [options]\n" @@ -21516,20 +21638,20 @@ msgstr "" "etiquetes de columna i les IDs.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:926 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:931 msgid "Show details for each column." msgstr "Mostra els detalls de cada columna." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:938 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:943 #, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "Perdreu totes les dades de la columna %r. N'esteu segur (s/n)? " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:940 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:945 msgid "y" msgstr "s" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:947 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:952 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -21546,15 +21668,15 @@ msgstr "" " les columnes disponibles amb l'ordre custom_columns.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:954 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:959 msgid "Do not ask for confirmation" msgstr "No demanis confirmació" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:964 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:969 msgid "Error: You must specify a column label" msgstr "Error: Heu d'indicar una etiqueta per a la columna" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:975 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:980 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -21576,40 +21698,40 @@ msgstr "" " es sobreescriurà.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:992 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:997 msgid "Error: You must specify an action (add|remove|list)" msgstr "Error: Heu d'indicar una acció (add/remove/list)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005 msgid "Name:" msgstr "Nom:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1001 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1006 msgid "Search string:" msgstr "Cadena de cerca:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1007 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1012 msgid "Error: You must specify a name and a search string" msgstr "Error: Heu d'indicar un nom i una cadena de cerca" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1010 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 msgid "added" msgstr "s'ha afegit" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1015 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1020 msgid "Error: You must specify a name" msgstr "Error: Heu d'indicar un nom" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1018 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1023 msgid "removed" msgstr "s'ha suprimit" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1022 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1027 #, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "Error: No es reconeix l'acció %s, ha de ser una de «add/remove/list»" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1029 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1034 msgid "" "%prog backup_metadata [options]\n" "\n" @@ -21637,7 +21759,7 @@ msgstr "" "una còpia de seguretat dels fitxers OPF cada cop que es canvien les " "metadades.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1040 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1045 msgid "" "Normally, this command only operates on books that have out of date OPF " "files. This option makes it operate on all books." @@ -21645,7 +21767,7 @@ msgstr "" "Normalment aquesta ordre només actua en llibres que tenen fitxers OPF " "obsolets. Aquesta opció fa que actuï en tots els llibres." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1079 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1084 msgid "" "%prog check_library [options]\n" "\n" @@ -21657,12 +21779,12 @@ msgstr "" "Fes algunes comprovacions al sistema de fitxers que hi ha en una biblioteca. " "Els resultats són {0}\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1086 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1091 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 msgid "Output in CSV" msgstr "Sortida CSV" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1089 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1094 msgid "" "Comma-separated list of reports.\n" "Default: all" @@ -21670,7 +21792,7 @@ msgstr "" "Llista d'informes separats per comes.\n" "Per defecte: tots" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1098 msgid "" "Comma-separated list of extensions to ignore.\n" "Default: all" @@ -21678,7 +21800,7 @@ msgstr "" "Llista de les extensions que s'ignoraran separada per comes.\n" "Per defecte: totes" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1097 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1102 msgid "" "Comma-separated list of names to ignore.\n" "Default: all" @@ -21686,11 +21808,11 @@ msgstr "" "Llista de noms que s'ignoraran separats per comes.\n" "Per defecte: tots" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1127 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1132 msgid "Unknown report check" msgstr "Informe de comprovació desconegut" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1161 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1166 msgid "" "%prog restore_database [options]\n" "\n" @@ -21720,19 +21842,19 @@ msgstr "" "OPF.\n" " " -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1175 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1180 msgid "" "Really do the recovery. The command will not run unless this option is " "specified." msgstr "" "Fes la recuperació. L'ordre no s'executa si no s'especifica aquesta opció." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1193 #, python-format msgid "You must provide the %s option to do a recovery" msgstr "Heu d'introduir l'opció %s per fer una recuperació" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1225 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1230 msgid "" "%prog list_categories [options]\n" "\n" @@ -21745,7 +21867,7 @@ msgstr "" "La\n" "informació equival al que es mostra a la subfinestra d'etiquetes.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 msgid "" "Output only the number of items in a category instead of the counts per item " "within the category" @@ -21753,7 +21875,7 @@ msgstr "" "Genera només la sortida del nombre d'elements en una categoria en lloc del " "recompte per element a cada categoria" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1243 msgid "" "The character to put around the category value in CSV mode. Default is " "quotes (\")." @@ -21761,7 +21883,7 @@ msgstr "" "El caràcter que es posarà al voltant del valor de la categoria en mode CSV. " "Per defecte són les cometes (\")." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1246 msgid "" "Comma-separated list of category lookup names.\n" "Default: all" @@ -21769,17 +21891,17 @@ msgstr "" "Llista separada per comes dels noms de la categoria de cerca.\n" "Per defecte: all" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1252 msgid "The string used to separate fields in CSV mode. Default is a comma." msgstr "" "La cadena que es farà servir per separar els camps en mode CSV. Per defecte " "és una coma." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1285 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1290 msgid "CATEGORY ITEMS" msgstr "ELEMENTS DE LES CATEGORIES" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1358 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1363 #, python-format msgid "" "%%prog command [options] [arguments]\n" @@ -21881,15 +22003,15 @@ msgstr "No s'ha pogut restaurar les preferències i les metadades de columna" msgid "Processed" msgstr "Processat" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The title" msgstr "Títol" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 msgid "The authors" msgstr "Autors" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 msgid "" "The author sort string. To use only the first letter of the name use " "{author_sort[0]}" @@ -21897,15 +22019,15 @@ msgstr "" "La cadena per ordenar per autor. Per fer servir només la inicial del nom feu " "servir {author_sort[0]}" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The tags" msgstr "Etiquetes" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 msgid "The series" msgstr "Sèrie" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:39 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:40 msgid "" "The series number. To get leading zeros use {series_index:0>3s} or " "{series_index:>3s} for leading spaces" @@ -21913,41 +22035,41 @@ msgstr "" "El nombre dins de la sèrie. Si voleu zeros inicials feu servir " "{serie_index:=>3s} o {series_index:>3s} si hi voleu espais" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:42 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 msgid "The rating" msgstr "La valoració" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 msgid "The ISBN" msgstr "L'ISBN" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:44 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 msgid "The publisher" msgstr "Editorial" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:45 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 msgid "The date" msgstr "Data" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 msgid "The published date" msgstr "La data de publicació" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "The date when the metadata for this book record was last modified" msgstr "" "La data que les metadades d'aquest registre de llibre es van modificar per " "darrer cop" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:50 msgid "The calibre internal id" msgstr "La identificació interna del calibre (ID)" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "Options to control saving to disk" msgstr "Opcions per controlar com es desa al disc" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:83 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." @@ -21956,7 +22078,7 @@ msgstr "" "partir del que hi ha a la biblioteca del calibre. Fa que es desi més " "lentament." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:86 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." @@ -21964,7 +22086,7 @@ msgstr "" "Normalment el calibre escriurà les metadades a un fitxer OPF separat, junt " "amb els fitxers del llibre." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:90 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." @@ -21972,7 +22094,7 @@ msgstr "" "Normalment el calibre desarà la portada en un fitxer separat, junt amb els " "del llibre electrònic." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:93 msgid "" "Comma separated list of formats to save for each book. By default all " "available formats are saved." @@ -21980,7 +22102,7 @@ msgstr "" "Llista separada per comes de la llista de formats que es desaran de cada " "llibre. Per defecte es desen tots els formats disponibles." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:95 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:96 #, python-format msgid "" "The template to control the filename and directory structure of the saved " @@ -21993,7 +22115,7 @@ msgstr "" "subcarpeta per autor amb noms de fitxer que contenen el títol i l'autor. Es " "disposa dels controls: {%(controls)s}" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:101 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:102 #, python-format msgid "" "The template to control the filename and directory structure of files sent " @@ -22006,7 +22128,7 @@ msgstr "" "subcarpeta per autor amb noms de fitxer que contenen el títol i l'autor. Es " "disposa dels controls: {%(controls)s}" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:108 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:109 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -22018,8 +22140,8 @@ msgstr "" "desar, depenent del suport per a Unicode que hi hagi al vostre sistema de " "fitxers." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:114 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:118 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:115 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:119 #, python-format msgid "" "The format in which to display dates. %(day)s - day, %(month)s - month, " @@ -22028,21 +22150,21 @@ msgstr "" "El format en què es visualitzaran les dates. %(day)s: dia, %(month)s: mes, " "%(mn)s: nombre del mes, %(year)s: any. Per defecte: %(default)s" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:122 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:123 msgid "Convert paths to lowercase." msgstr "Converteix els camins a minúscules." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:124 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 msgid "Replace whitespace with underscores." msgstr "Reemplaça els espais en blanc amb guions baixos." -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:126 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:127 msgid "" "Save into a single directory, ignoring the template directory structure" msgstr "" "Desa a una sola carpeta, ignorant l'estructura de carpetes de la plantilla" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:310 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" @@ -22051,14 +22173,14 @@ msgstr "" "No s'ha pogut calcular el camí per desar al disc. Plantilla: %(templ)s\n" "Error: %(err)s" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:315 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:316 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" "L'avaluació de la plantilla no dóna cap component per al camí. Plantilla: %s" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:407 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:440 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:408 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:441 msgid "Requested formats not available" msgstr "No es disposa dels formats sol·licitats" @@ -22127,127 +22249,127 @@ msgstr "" "intermediari de retorn a aquest servidor des d'Apache, nginx..." #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:317 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:343 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:627 msgid "All books" msgstr "Tots els llibres" #: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:318 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:342 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:626 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584 msgid "Newest" msgstr "El més recent" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:64 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:498 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:65 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:499 msgid "Loading, please wait" msgstr "S'està carregant" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:111 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:91 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:112 msgid "Go to" msgstr "Vés a" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "First" msgstr "Primer" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 msgid "Last" msgstr "Darrer" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:110 #, python-format msgid "Browsing %d books" msgstr "S'està explorant %d llibres" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:126 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:256 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 msgid "Average rating" msgstr "Valoració mitjana" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:128 #, python-format msgid "%(prefix)s: %(rating).1f stars" msgstr "%(prefix)s: %(rating).1f estrelles" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:164 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:165 #, python-format msgid "%d stars" msgstr "%d estrelles" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:258 msgid "Popularity" msgstr "Popularitat" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:279 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 msgid "library" msgstr "biblioteca" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 msgid "home" msgstr "inici" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:387 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:452 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:388 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:453 msgid "Browse books by" msgstr "Explora llibres per" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:392 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:393 msgid "Choose a category to browse by:" msgstr "Trieu una categoria per la qual cercar:" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:523 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 msgid "Browsing by" msgstr "S'està cercant per" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:524 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:525 msgid "Up" msgstr "Cap amunt" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:661 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:662 msgid "in" msgstr "a" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:664 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:665 msgid "Books in" msgstr "llibres a" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:758 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Other formats" msgstr "Altres formats" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:765 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:766 #, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "Llegeix %(title)s en el format %(fmt)s" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:770 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:771 msgid "Get" msgstr "Aconsegueix" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:783 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 msgid "Details" msgstr "Detalls" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:785 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 msgid "Permalink" msgstr "Enllaç permanent" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:786 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:787 msgid "A permanent link to this book" msgstr "Un enllaç permanent a aquest llibre" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:798 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:799 msgid "This book has been deleted" msgstr "S'ha suprimit el llibre" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:897 msgid "in search" msgstr "en una cerca" -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:899 msgid "Matching books" msgstr "Llibres coincidents" @@ -22347,30 +22469,30 @@ msgstr "Per " msgid "Books sorted by " msgstr "Llibres ordenats per " -#: /home/kovid/work/calibre/src/calibre/utils/config.py:34 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:38 msgid "Usage" msgstr "Ús" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:85 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 msgid "Created by " msgstr "Creat per " -#: /home/kovid/work/calibre/src/calibre/utils/config.py:86 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" "Si els arguments per al %prog contenen espais, poseu-los entre cometes." -#: /home/kovid/work/calibre/src/calibre/utils/config.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:98 msgid "Options" msgstr "Opcions" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:99 msgid "show this help message and exit" msgstr "mostra aquest missatge d'ajut i surt" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:100 msgid "show program's version number and exit" msgstr "mostra el número de versió del programa i surt" @@ -22538,7 +22660,7 @@ msgstr "" msgid "%s: unknown function" msgstr "%s: funció desconeguda" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:541 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:543 msgid "No such variable " msgstr "Aquesta variable no existeix " @@ -23624,7 +23746,7 @@ msgstr "No s'ha pogut establir la sessió SSH: " msgid "Failed to authenticate with server: %s" msgstr "Ha fallat l'autentificació amb el servidor: %s" -#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:257 +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:258 msgid "Control email delivery" msgstr "Control l'enviament del correu electrònic" @@ -23889,67 +24011,67 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "No baixis els fulls d'estil CSS" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "OK" msgstr "D'acord" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "Save" msgstr "Desa" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:664 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:664 msgid "Open" msgstr "Obre" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:673 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:673 msgid "Apply" msgstr "Aplica" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:683 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:683 msgid "Don't Save" msgstr "No desis" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:685 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:685 msgid "Close without Saving" msgstr "Tanca sense desar" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:687 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:687 msgid "Discard" msgstr "Descarta" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:690 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:690 msgid "&Yes" msgstr "&Sí" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:693 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:693 msgid "Yes to &All" msgstr "Sí &a tot" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:696 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:696 msgid "&No" msgstr "&No" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:699 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:699 msgid "N&o to All" msgstr "N&o a tot" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:702 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:702 msgid "Save All" msgstr "Desa-ho tot" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:705 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:705 msgid "Abort" msgstr "Interromp" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:708 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:708 msgid "Retry" msgstr "Reintenta-ho" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:711 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:711 msgid "Ignore" msgstr "Ignora" -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:714 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:714 msgid "Restore Defaults" msgstr "Restaura els valors per defecte" diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 75288c51f9..b991330c99 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.9.8\n" -"POT-Creation-Date: 2012-11-30 08:37+IST\n" -"PO-Revision-Date: 2012-11-30 08:37+IST\n" +"Project-Id-Version: calibre 0.9.12\n" +"POT-Creation-Date: 2012-12-28 08:51+IST\n" +"PO-Revision-Date: 2012-12-28 08:51+IST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -26,15 +26,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/db/cache.py:120 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:376 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:377 -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:114 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:115 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:667 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:45 #: /home/kovid/work/calibre/src/calibre/devices/mtp/books.py:69 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:229 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:234 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:238 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661 @@ -51,6 +51,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:121 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/lrf_output.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdb_input.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/rtf_input.py:289 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/rtf_input.py:291 #: /home/kovid/work/calibre/src/calibre/ebooks/epub/periodical.py:140 @@ -106,8 +108,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:153 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:192 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:193 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/mobi6.py:615 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:316 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:463 @@ -129,11 +131,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:108 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:446 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:454 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:455 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 @@ -143,32 +143,32 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1413 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:825 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:193 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:208 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1069 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1288 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1379 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1103 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1319 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1413 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:182 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:202 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/google_books_plugin.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:885 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:924 #: /home/kovid/work/calibre/src/calibre/library/cli.py:244 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 #: /home/kovid/work/calibre/src/calibre/library/database2.py:587 @@ -587,7 +587,7 @@ msgid "Control how calibre downloads ebook metadata from the net" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1125 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:400 msgid "Ignored devices" msgstr "" @@ -935,118 +935,118 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "

    If you do not want calibre to recognize your Apple iDevice when it is connected to your computer, click Disable Apple Driver.

    To transfer books to your iDevice, click Disable Apple Driver, then use the 'Connect to iTunes' method recommended in the Calibre + iDevices FAQ, using the Connect/Share|Connect to iTunes menu item.

    Enabling the Apple driver for direct connection to iDevices is an unsupported advanced user mode.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:80 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:84 msgid "Enable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 msgid "Use Series as Category in iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122 msgid "Enable to use the series name as the iTunes Genre, iBooks Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 msgid "Cache covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:127 #, python-format msgid "\"Copy files to iTunes Media folder %s\" is enabled in iTunes Preferences|Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:129 msgid "

    This setting should match your iTunes Preferences|Advanced setting.

    Disabling will store copies of books transferred to iTunes in your calibre configuration directory.

    Enabling indicates that iTunes is configured to store copies in your iTunes Media folder.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 msgid "Apple device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:198 msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 -msgid "Apple device detected, launching iTunes, please wait ..." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:212 +msgid "Apple iDevice detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 msgid "Cannot copy books directly from iDevice. Drag from iTunes Library to desktop, then add to calibre's Library window." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 -msgid "Unsupported direct connect mode. See http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on using 'Connect to iTunes'" +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 +msgid "*** Unsupported direct connect mode. See http://www.mobileread.com/forums/showthread.php?t=118559 for instructions on using 'Connect to iTunes' ***" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:215 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:221 msgid "

    Unable to communicate with iTunes.

    Refer to this forum post for more information.

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:382 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:385 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:378 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:462 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:502 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1163 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3262 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3304 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:497 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1190 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3292 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3334 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:510 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1168 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3311 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1195 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3341 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:702 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:697 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:1080 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2785 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2816 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:106 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:392 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:398 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:429 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:400 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1227 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 #: /home/kovid/work/calibre/src/calibre/library/database2.py:385 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3386 @@ -1054,13 +1054,13 @@ msgstr "" msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2786 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2817 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3342 #: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3154 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3184 msgid "Communicate with iTunes." msgstr "" @@ -1103,7 +1103,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1325 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1329 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1333 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1683 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1687 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1117,9 +1117,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:367 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1095 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1097 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1099 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1129,9 +1129,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:491 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:525 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1108 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1110 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1139,8 +1139,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:352 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:354 -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:115 -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:129 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:140 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:440 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:472 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:615 @@ -1153,8 +1153,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:479 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:486 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1157 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1159 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1165 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1282,27 +1282,31 @@ msgstr "" msgid "Communicate with the Hanvon N520 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:47 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:48 +msgid "Communicate with the Kibano eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:61 msgid "Communicate with The Book reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:59 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:73 msgid "Communicate with the Libre Air reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:72 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:86 msgid "Communicate with the SpringDesign Alex eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:132 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:146 msgid "Communicate with the Azbooka" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:151 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:165 msgid "Communicate with the Elonex EB 511 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:171 +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:185 msgid "Communicate with the Cybook Odyssey eBook reader." msgstr "" @@ -1495,7 +1499,7 @@ msgid "Your Kobo is running an updated firmware/database version. As calibre doe msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:646 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:404 msgid "Not Implemented" msgstr "" @@ -1658,84 +1662,84 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:143 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:912 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:914 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:166 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:181 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:233 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:235 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:395 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:416 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:434 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:440 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:441 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:458 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 msgid "All books removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:313 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:315 msgid "Unknown MTP device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:216 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/unix/driver.py:217 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:219 #, python-format msgid "Found object: %s" msgstr "" @@ -1748,11 +1752,6 @@ msgstr "" msgid "The Windows Portable Devices service is not available on your computer. You may need to install Windows Media Player 11 or newer and/or restart your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:222 -#, python-format -msgid "Found id: %s" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "" @@ -1790,12 +1789,12 @@ msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 msgid "All by title" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:263 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:265 msgid "All by author" msgstr "" @@ -1873,99 +1872,99 @@ msgstr "" msgid "Set this option if you want the author on the Sony to appear the same way the T1 sets it. This means it will only show the first author for books with multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:176 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:180 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:264 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:266 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:269 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:270 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:275 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "If checked, use the port number in the \"Port\" box, otherwise the driver will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "Enter the port number the driver is to use if the \"fixed port\" box is checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "Comma separated list of metadata fields to turn into collections on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:294 #, python-format msgid "If this box is checked, calibre will automatically disconnect if a connected device does nothing for %d minutes. Unchecking this box disables this timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:296 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:298 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:299 msgid "Use this option if you want to force the driver to listen on a particular IP address. The driver will listen only on the entered address, and this address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:766 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1271 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1273 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1279 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1281 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1293 msgid "Failed to allocate a random port" msgstr "" @@ -1977,35 +1976,35 @@ msgstr "" msgid "Communicate with the Teclast K3/K5 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:37 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:38 msgid "Communicate with the Newsmy reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:48 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:49 msgid "Communicate with the Archos reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:58 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:59 msgid "Communicate with the Pico reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:71 msgid "Communicate with the iPapyrus reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:81 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:82 msgid "Communicate with the Sovos reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:91 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:92 msgid "Communicate with the Sunstech EB700 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:102 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:103 msgid "Communicate with the Stash W950 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:114 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:115 msgid "Communicate with the Wexler reader." msgstr "" @@ -2180,6 +2179,7 @@ msgid "There is insufficient free space on the storage card" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:210 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/render/from_html.py:229 #, python-format msgid "Rendered %s" msgstr "" @@ -2591,47 +2591,46 @@ msgstr "" msgid "Use the new PDF conversion engine." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:71 -#, python-format -msgid "The unit of measure. Default is inch. Choices are %s Note: This does not override the unit for margins!" +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:52 +msgid "Normally, the PDF page size is set by the output profile chosen under page options. This option will cause the page size settings under PDF Output to override the size specified by the output profile." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:58 +#, python-format +msgid "The unit of measure for page sizes. Default is inch. Choices are %s Note: This does not override the unit for margins!" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:63 #, python-format msgid "The size of the paper. This size will be overridden when a non default output profile is used. Default is letter. Choices are %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:67 msgid "Custom size of the document. Use the form widthxheight EG. `123x321` to specify the width and height. This overrides any specified paper-size." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:85 -#, python-format -msgid "The orientation of the page. Default is portrait. Choices are %s" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:89 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:72 msgid "Preserve the aspect ratio of the cover, instead of stretching it to fill the full first page of the generated pdf." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:94 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:77 msgid "The font family used to render serif fonts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:80 msgid "The font family used to render sans-serif fonts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:100 -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:104 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:87 msgid "The font family used to render monospaced fonts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:90 msgid "The default font size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:110 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:93 msgid "The default font size for monospaced text" msgstr "" @@ -3418,9 +3417,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1074 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1108 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 @@ -3431,14 +3430,14 @@ msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1109 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" @@ -3471,13 +3470,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:535 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:842 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:943 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1188 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:982 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1228 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:779 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:792 msgid "Tags" msgstr "" @@ -3486,11 +3485,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2266 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2306 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 msgid "Series" msgid_plural "Series" @@ -3498,7 +3497,7 @@ msgstr[0] "" msgstr[1] "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:94 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" @@ -3510,8 +3509,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:305 msgid "Published" msgstr "" @@ -3618,47 +3617,51 @@ msgstr "" msgid "Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:491 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:508 msgid "Downloads metadata and covers from Amazon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:501 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:518 msgid "US" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:502 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:519 msgid "France" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:503 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:520 msgid "Germany" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:504 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:521 msgid "UK" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:505 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:522 msgid "Italy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:506 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:523 msgid "Japan" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:507 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:524 msgid "Spain" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:511 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:525 +msgid "Brazil" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:529 msgid "Amazon website to use:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:512 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:530 msgid "Metadata from Amazon will be fetched using this country's Amazon website." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:753 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:775 msgid "Amazon timed out. Try again later." msgstr "" @@ -3831,11 +3834,11 @@ msgid "HTML TOC generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:160 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:777 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:790 msgid "Rating" msgstr "" @@ -3880,154 +3883,154 @@ msgstr "" msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Match tags by any or all." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:143 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:150 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 msgid "Delete news books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:154 msgid "Show the cover flow in a separate window instead of in the main calibre window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:156 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:158 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 msgid "Start searching as you type. If this is disabled then search will only take place when the Enter or Return key is pressed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166 msgid "When searching, show all books with search results highlighted instead of showing only the matches. You can use the N or F3 keys to go to the next match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:191 msgid "Maximum number of simultaneous conversion/news download jobs. This number is twice the actual value for historical reasons." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:194 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:196 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:198 msgid "Automatically download the cover, if available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:200 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:202 msgid "The layout of the user interface. Wide has the book details panel on the right and narrow has it at the bottom." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:206 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:208 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:213 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 msgid "WARNING:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:289 msgid "ERROR:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:258 msgid "Show this confirmation again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:134 msgid "Restart needed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:741 msgid "Restart calibre now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:572 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:573 msgid "Choose Files" msgstr "" @@ -4136,7 +4139,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:38 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:107 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:192 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:256 @@ -4164,51 +4167,51 @@ msgstr "" msgid "Select book files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:189 msgid "Adding" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:190 msgid "Creating book records from ISBNs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:330 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:301 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:304 msgid "Select books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:342 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:332 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:343 #, python-format msgid "The following %d duplicate books were found and incoming book formats were processed and merged into your Calibre database according to your automerge settings:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:365 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:366 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:376 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:381 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:387 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:411 msgid "Add to library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:392 #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:106 @@ -4219,31 +4222,31 @@ msgstr "" msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:405 msgid "The following books are virtual and cannot be added to the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:411 msgid "No book files found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:417 msgid "Downloading books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:418 msgid "Downloading books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:437 msgid "Could not download files from the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:429 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:440 msgid "Could not download some files from the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:444 msgid "Could not download files" msgstr "" @@ -4356,6 +4359,7 @@ msgid "No existing calibre library found at %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:160 msgid "Choose Library" msgstr "" @@ -4369,7 +4373,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:58 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:171 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:172 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129 #, python-format msgid "%d books" @@ -4513,7 +4517,7 @@ msgid "Found no errors in your calibre library database. Do you want calibre to msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:423 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:975 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114 @@ -4541,7 +4545,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:534 #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:1016 msgid "Not allowed" @@ -4589,7 +4593,7 @@ msgstr "" msgid "Empty output file, probably the conversion process crashed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:401 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:405 #: /home/kovid/work/calibre/src/calibre/gui2/auto_add.py:221 @@ -4597,54 +4601,80 @@ msgstr "" msgid "%(title)s by %(author)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:59 +msgid "Choose library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:138 +msgid "Library &path:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:146 +msgid "Browse for library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:149 +msgid "&Delete after copy" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:172 msgid "Copy to library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:173 msgid "Copy selected books to the specified library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:206 msgid "(delete after copy)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:210 +msgid "Choose library by path..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:227 msgid "Cannot copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:221 +msgid "Cannot copy to current library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:232 msgid "No library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:233 #, python-format msgid "No library found at %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:182 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:239 msgid "Copying" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:250 msgid "Could not copy books: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:254 #, python-format msgid "Copied %(num)d books to %(loc)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:258 msgid "Auto merged" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:259 msgid "Some books were automatically merged into existing records in the target library. Click Show details to see which ones. This behavior is controlled by the Auto merge option in Preferences->Adding books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:279 msgid "You cannot use other libraries while using the environment variable CALIBRE_OVERRIDE_DATABASE_PATH." msgstr "" @@ -4768,19 +4798,19 @@ msgid "None of the selected books are on the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:363 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:321 msgid "Some of the selected books are on the attached device. Where do you want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 msgid "The selected books will be permanently deleted and the files removed from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:355 msgid "The selected books will be permanently deleted from your device. Are you sure?" msgstr "" @@ -4931,8 +4961,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:830 msgid "Download failed" msgstr "" @@ -4964,7 +4994,7 @@ msgid "Download complete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:892 msgid "Download log" msgstr "" @@ -5043,7 +5073,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:118 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:679 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:679 msgid "Help" msgstr "" @@ -5195,7 +5225,7 @@ msgid "Click the show details button to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:16 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:784 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:797 msgid "Show book details" msgstr "" @@ -5288,7 +5318,7 @@ msgid "this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:498 #, python-format msgid "Search for %s" msgstr "" @@ -5371,7 +5401,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:667 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" msgstr "" @@ -5540,7 +5570,7 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:283 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1137 msgid "No books" msgstr "" @@ -5699,10 +5729,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:89 @@ -5757,6 +5787,7 @@ msgid "Click to open" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:180 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:846 msgid "Ids" msgstr "" @@ -5766,7 +5797,7 @@ msgid "Book %(sidx)s of %(series)s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1078 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1112 msgid "Collections" msgstr "" @@ -5877,7 +5908,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:43 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pmlz_output_ui.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:33 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:145 @@ -5891,7 +5922,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:40 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns_ui.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54 @@ -6021,8 +6052,8 @@ msgid "Delete Rule" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:850 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:609 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4725 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:613 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:4770 msgid "False" msgstr "" @@ -6035,7 +6066,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:260 msgid "Name" msgstr "" @@ -7192,48 +7223,56 @@ msgstr "" msgid "PDF Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:115 +msgid "Note: The paper size settings below only take effect if you enable the \"Override\" checkbox below. Otherwise the size from the output profile will be used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:116 +msgid "&Override paper size set in output profile" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:117 msgid "&Paper Size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:102 -msgid "&Orientation:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:118 msgid "&Custom size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:119 +msgid "&Unit:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:120 msgid "Preserve &aspect ratio of cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:374 msgid "Se&rif family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:375 msgid "&Sans family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:123 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:376 msgid "&Monospace family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:381 msgid "S&tandard font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:125 msgid "Default font si&ze:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:395 @@ -7243,15 +7282,11 @@ msgstr "" msgid " px" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:379 msgid "Monospace &font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:113 -msgid "Note: The paper size settings below only take effect if you have set the output profile to the default output profile. Otherwise the output profile will override these settings." -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/convert/pml_output.py:14 msgid "PMLZ Output" msgstr "" @@ -7458,7 +7493,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:439 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:661 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:661 msgid "&Save" msgstr "" @@ -8001,7 +8036,7 @@ msgid "Detected the %s. Do you want calibre to manage it?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:884 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/email.py:262 msgid "No suitable formats" msgstr "" @@ -8037,86 +8072,86 @@ msgstr "" msgid "There was a temporary error talking to the device. Please unplug and reconnect the device or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1027 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1033 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1035 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1138 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1139 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1169 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1145 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1140 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1146 msgid "No device connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1162 #, python-format msgid "%(num)i of %(total)i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 #, python-format msgid "0 of %i Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1167 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1170 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1176 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1173 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1183 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1174 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1184 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1322 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1245 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1460 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1268 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1274 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1367 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1373 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1421 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1427 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1461 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1467 msgid "Could not upload the following books to the device, as no suitable formats were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1541 msgid "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1546 msgid "Incorrect destination" msgstr "" @@ -8259,26 +8294,65 @@ msgid "&Ignore the %s in calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:377 +msgid "Change scanned &folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:383 msgid "Show device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:421 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:885 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:344 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:220 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:435 #, python-format msgid "The %s will be ignored in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:495 +#, python-format +msgid "You are trying to send books into the %s folder. This folder is currently ignored by calibre when scanning the device. You have tell calibre you want this folder scanned in order to be able to send books to it. Click the configure button below to send books to it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_config.py:508 +#, python-format +msgid "Cannot send to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:92 msgid "Choose folder on device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:105 +msgid "Scanned folders:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:106 +msgid "You can select which top level folders calibre will scan when searching this device for books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:131 +msgid "Select &All" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:133 +msgid "Select &None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/mtp_folder_browser.py:136 +msgid "Choose folders to scan" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:19 msgid "How many empty books?" msgstr "" @@ -8295,6 +8369,14 @@ msgstr "" msgid "Reset author to Unknown" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:48 +msgid "Set the series of the new books to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60 +msgid "Reset series" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn.py:72 msgid "Some invalid ISBNs" msgstr "" @@ -8668,7 +8750,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 -#: /usr/src/qt-everywhere-opensource-src-4.8.2/src/gui/widgets/qdialogbuttonbox.cpp:658 +#: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -8720,8 +8802,8 @@ msgid "Location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1110 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365 @@ -8740,13 +8822,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:957 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:958 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -8821,7 +8903,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:721 msgid "No matches found" msgstr "" @@ -8869,12 +8951,12 @@ msgid "Copy to author" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1007 msgid "Invalid author name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1008 msgid "Author names cannot contain & characters." msgstr "" @@ -9000,8 +9082,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:251 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1055 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:950 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:1059 #: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:48 msgid "View log" msgstr "" @@ -9813,8 +9895,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:299 -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1379 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:303 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1419 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 msgid "Authors" msgstr "" @@ -9850,7 +9932,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:652 -#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:281 +#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:284 msgid "Search" msgstr "" @@ -10161,7 +10243,7 @@ msgid "never delete" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:279 msgid " days" msgstr "" @@ -10637,7 +10719,7 @@ msgid "The template box cannot be empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266 msgid "Set the color of the column:" msgstr "" @@ -10711,7 +10793,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:169 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:271 msgid "Switch to Advanced mode" msgstr "" @@ -10783,39 +10865,39 @@ msgstr "" msgid "You will lose any unsaved changes. To save your changes, click the Add/Update recipe button. Continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 msgid "Add custom news source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:264 msgid "Available user recipes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:265 msgid "Add/Update &recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:266 msgid "&Remove recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 msgid "&Share recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:268 msgid "S&how recipe files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 msgid "Customize &builtin recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 msgid "&Load recipe from file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:272 msgid "" "