diff --git a/resources/recipes/24sata_rs.recipe b/resources/recipes/24sata_rs.recipe index df1f92bfaa..0f879036ea 100644 --- a/resources/recipes/24sata_rs.recipe +++ b/resources/recipes/24sata_rs.recipe @@ -21,6 +21,7 @@ class Ser24Sata(BasicNewsRecipe): encoding = 'utf-8' use_embedded_content = False language = 'sr' + publication_type = 'newspaper' extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif}' conversion_options = { diff --git a/resources/recipes/b92.recipe b/resources/recipes/b92.recipe index b17440e596..20b844b57d 100644 --- a/resources/recipes/b92.recipe +++ b/resources/recipes/b92.recipe @@ -10,7 +10,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class B92(BasicNewsRecipe): title = 'B92' __author__ = 'Darko Miletic' - description = 'Dnevne vesti iz Srbije i sveta' + description = 'B92 info, najnovije vesti iz Srbije, regiona i sveta' publisher = 'B92' category = 'news, politics, Serbia' oldest_article = 2 @@ -19,6 +19,7 @@ class B92(BasicNewsRecipe): use_embedded_content = False encoding = 'cp1250' language = 'sr' + publication_type = 'newsportal' extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} ' conversion_options = { diff --git a/resources/recipes/beta.recipe b/resources/recipes/beta.recipe index 49da10e11a..039e8cef93 100644 --- a/resources/recipes/beta.recipe +++ b/resources/recipes/beta.recipe @@ -18,6 +18,7 @@ class Danas(BasicNewsRecipe): no_stylesheets = False use_embedded_content = True language = 'sr' + publication_type = 'newsportal' extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} ' conversion_options = { diff --git a/resources/recipes/blic.recipe b/resources/recipes/blic.recipe index f784c031a3..0c955bebde 100644 --- a/resources/recipes/blic.recipe +++ b/resources/recipes/blic.recipe @@ -20,7 +20,8 @@ class Blic(BasicNewsRecipe): use_embedded_content = False masthead_url = 'http://www.blic.rs/resources/images/header/header_back.png' language = 'sr' - extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Georgia, serif1, serif} .article_description{font-family: Arial, sans1, sans-serif} .img_full{float: none} img{margin-bottom: 0.8em} ' + publication_type = 'newspaper' + extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Georgia, serif1, serif} .article_description{font-family: Arial, sans1, sans-serif} .img_full{float: none} img{margin-bottom: 0.8em} ' conversion_options = { 'comment' : description @@ -41,4 +42,6 @@ class Blic(BasicNewsRecipe): return url + '/print' def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] return self.adeify_images(soup) diff --git a/resources/recipes/cetnixploitation.recipe b/resources/recipes/cetnixploitation.recipe index ee95ef599f..edc7233245 100644 --- a/resources/recipes/cetnixploitation.recipe +++ b/resources/recipes/cetnixploitation.recipe @@ -15,6 +15,7 @@ class Chetnixploitation(BasicNewsRecipe): oldest_article = 7 max_articles_per_feed = 100 language = 'sr' + publication_type = 'blog' encoding = 'utf-8' no_stylesheets = True use_embedded_content = True @@ -32,5 +33,3 @@ class Chetnixploitation(BasicNewsRecipe): def preprocess_html(self, soup): return self.adeify_images(soup) - - diff --git a/resources/recipes/danas.recipe b/resources/recipes/danas.recipe index a8cd8a5a3d..d82928e323 100644 --- a/resources/recipes/danas.recipe +++ b/resources/recipes/danas.recipe @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- __license__ = 'GPL v3' __copyright__ = '2008-2010, Darko Miletic ' ''' @@ -20,7 +21,9 @@ class Danas(BasicNewsRecipe): encoding = 'utf-8' masthead_url = 'http://www.danas.rs/images/basic/danas.gif' language = 'sr' - extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body,.lokacija{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} .nadNaslov,h1,.preamble{font-family: Georgia,"Times New Roman",Times,serif1,serif} .antrfileText{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; margin-bottom: 0; margin-top: 0} h2,.datum,.lokacija,.autor{font-size: small} .antrfileNaslov{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; font-weight:bold; margin-bottom: 0; margin-top: 0} img{margin-bottom: 0.8em} ' + publication_type = 'newspaper' + remove_empty_feeds = True + extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body,.lokacija{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} .nadNaslov,h1,.preamble{font-family: Georgia,"Times New Roman",Times,serif1,serif} .antrfileText{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; margin-bottom: 0; margin-top: 0} h2,.datum,.lokacija,.autor{font-size: small} .antrfileNaslov{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; font-weight:bold; margin-bottom: 0; margin-top: 0} img{margin-bottom: 0.8em} ' conversion_options = { 'comment' : description @@ -38,10 +41,10 @@ class Danas(BasicNewsRecipe): ,dict(name=['object','link','iframe']) ] - feeds = [ + feeds = [ (u'Politika' , u'http://www.danas.rs/rss/rss.asp?column_id=27') ,(u'Hronika' , u'http://www.danas.rs/rss/rss.asp?column_id=2' ) - ,(u'Drustvo' , u'http://www.danas.rs/rss/rss.asp?column_id=24') + ,(u'Dru\xc5\xa1tvo', u'http://www.danas.rs/rss/rss.asp?column_id=24') ,(u'Dijalog' , u'http://www.danas.rs/rss/rss.asp?column_id=1' ) ,(u'Ekonomija', u'http://www.danas.rs/rss/rss.asp?column_id=6' ) ,(u'Svet' , u'http://www.danas.rs/rss/rss.asp?column_id=25') @@ -51,13 +54,14 @@ class Danas(BasicNewsRecipe): ,(u'Scena' , u'http://www.danas.rs/rss/rss.asp?column_id=42') ,(u'Feljton' , u'http://www.danas.rs/rss/rss.asp?column_id=19') ,(u'Periskop' , u'http://www.danas.rs/rss/rss.asp?column_id=4' ) + ,(u'Famozno' , u'http://www.danas.rs/rss/rss.asp?column_id=47') ] def preprocess_html(self, soup): for item in soup.findAll(style=True): del item['style'] - return soup + return self.adeify_images(soup) def print_version(self, url): return url + '&action=print' - + diff --git a/resources/recipes/e_novine.recipe b/resources/recipes/e_novine.recipe index 7d39e448d2..6a7041baae 100644 --- a/resources/recipes/e_novine.recipe +++ b/resources/recipes/e_novine.recipe @@ -20,6 +20,7 @@ class E_novine(BasicNewsRecipe): encoding = 'utf-8' use_embedded_content = False language = 'sr' + publication_type = 'newsportal' masthead_url = 'http://www.e-novine.com/themes/e_novine/img/logo.gif' extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Arial,Helvetica,sans1,sans-serif} img{float: none; margin-bottom: 0.8em} ' diff --git a/resources/recipes/glas_srpske.recipe b/resources/recipes/glas_srpske.recipe index 157584720a..27d65f861c 100644 --- a/resources/recipes/glas_srpske.recipe +++ b/resources/recipes/glas_srpske.recipe @@ -22,6 +22,7 @@ class GlasSrpske(BasicNewsRecipe): use_embedded_content = False masthead_url = 'http://www.glassrpske.com/var/slike/glassrpske-logo.png' language = 'sr' + publication_type = 'newspaper' INDEX = 'http://www.glassrpske.com' extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} img{margin-bottom: 0.8em} ' diff --git a/resources/recipes/glasjavnosti.recipe b/resources/recipes/glasjavnosti.recipe index 15b1042818..61675ea236 100644 --- a/resources/recipes/glasjavnosti.recipe +++ b/resources/recipes/glasjavnosti.recipe @@ -18,6 +18,7 @@ class GlasJavnosti(BasicNewsRecipe): no_stylesheets = False use_embedded_content = False language = 'sr' + publication_type = 'newspaper' extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} ' conversion_options = { diff --git a/resources/recipes/irish_independent.recipe b/resources/recipes/irish_independent.recipe index e6da5410c3..c01f0d7d6d 100644 --- a/resources/recipes/irish_independent.recipe +++ b/resources/recipes/irish_independent.recipe @@ -10,7 +10,7 @@ class IrishIndependent(BasicNewsRecipe): title = u'Irish Independent' description = 'Irish and World news from Irelands Bestselling Daily Broadsheet' __author__ = 'Neil Grogan' - language = 'en_GB' + language = 'en_IE' oldest_article = 7 max_articles_per_feed = 100 remove_tags_before = dict(id='article') diff --git a/resources/recipes/irish_times.recipe b/resources/recipes/irish_times.recipe index a5f1b70d0c..ab37271638 100644 --- a/resources/recipes/irish_times.recipe +++ b/resources/recipes/irish_times.recipe @@ -10,7 +10,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class IrishTimes(BasicNewsRecipe): title = u'The Irish Times' __author__ = "Derry FitzGerald, Ray Kinsella and David O'Callaghan" - language = 'en' + language = 'en_IE' timefmt = ' (%A, %B %d, %Y)' diff --git a/resources/recipes/nin.recipe b/resources/recipes/nin.recipe index a349f0e11f..9e1aa57733 100644 --- a/resources/recipes/nin.recipe +++ b/resources/recipes/nin.recipe @@ -25,7 +25,8 @@ class Nin(BasicNewsRecipe): LOGIN = PREFIX + '/?logout=true' use_embedded_content = False language = 'sr' - extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana, Lucida, sans1, sans-serif} .article_description{font-family: Verdana, Lucida, sans1, sans-serif} .artTitle{font-size: x-large; font-weight: bold; color: #900} .izjava{font-size: x-large; font-weight: bold} .columnhead{font-size: small; font-weight: bold;} img{margin-top:0.5em; margin-bottom: 0.7em} b{margin-top: 1em} ' + publication_type = 'magazine' + extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana, Lucida, sans1, sans-serif} .article_description{font-family: Verdana, Lucida, sans1, sans-serif} .artTitle{font-size: x-large; font-weight: bold; color: #900} .izjava{font-size: x-large; font-weight: bold} .columnhead{font-size: small; font-weight: bold;} img{margin-top:0.5em; margin-bottom: 0.7em} b{margin-top: 1em} ' conversion_options = { 'comment' : description diff --git a/resources/recipes/novosti.recipe b/resources/recipes/novosti.recipe index 61bb8ffd06..3c770e883b 100644 --- a/resources/recipes/novosti.recipe +++ b/resources/recipes/novosti.recipe @@ -1,14 +1,12 @@ -#!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2008-2009, Darko Miletic ' +__copyright__ = '2008-2010, Darko Miletic ' ''' novosti.rs ''' import re from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import Tag class Novosti(BasicNewsRecipe): title = 'Vecernje Novosti' @@ -21,17 +19,16 @@ class Novosti(BasicNewsRecipe): no_stylesheets = True use_embedded_content = False encoding = 'utf-8' - language = 'sr' - - lang = 'sr-Latn-RS' - extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}' + language = 'sr' + publication_type = 'newspaper' + extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} ' conversion_options = { 'comment' : description , 'tags' : category , 'publisher' : publisher - , 'language' : lang - , 'pretty_print' : True + , 'language' : language + , 'linearize_tables' : True } preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')] @@ -42,17 +39,6 @@ class Novosti(BasicNewsRecipe): feeds = [(u'Vesti', u'http://www.novosti.rs/php/vesti/rss.php')] def preprocess_html(self, soup): - mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)]) - soup.head.insert(0,mlang) - attribs = [ 'style','font','valign' - ,'colspan','width','height' - ,'rowspan','summary','align' - ,'cellspacing','cellpadding' - ,'frames','rules','border' - ] - for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']): - item.name = 'div' - for attrib in attribs: - if item.has_key(attrib): - del item[attrib] - return soup + for item in soup.findAll(style=True): + del item['style'] + return self.adeify_images(soup) diff --git a/resources/recipes/nspm.recipe b/resources/recipes/nspm.recipe index f5f6c10b72..636f34aac2 100644 --- a/resources/recipes/nspm.recipe +++ b/resources/recipes/nspm.recipe @@ -20,6 +20,7 @@ class Nspm(BasicNewsRecipe): INDEX = 'http://www.nspm.rs/?alphabet=l' encoding = 'utf-8' language = 'sr' + publication_type = 'magazine' masthead_url = 'http://www.nspm.rs/templates/jsn_epic_pro/images/logol.jpg' extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{text-align: justify; font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}' diff --git a/resources/recipes/nytimes.recipe b/resources/recipes/nytimes.recipe index 3b9d2858e6..b168113a79 100644 --- a/resources/recipes/nytimes.recipe +++ b/resources/recipes/nytimes.recipe @@ -9,7 +9,8 @@ import re import time from calibre import entity_to_unicode from calibre.web.feeds.recipes import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString, Comment +from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString, \ +Comment, BeautifulStoneSoup class NYTimes(BasicNewsRecipe): @@ -256,7 +257,6 @@ class NYTimes(BasicNewsRecipe): # Fetch the outer table table = soup.find('table') previousTable = table - contentTable = None # Find the deepest table containing the stories while True : diff --git a/resources/recipes/nytimes_sub.recipe b/resources/recipes/nytimes_sub.recipe index 93df08220d..a3ef2555f4 100644 --- a/resources/recipes/nytimes_sub.recipe +++ b/resources/recipes/nytimes_sub.recipe @@ -89,6 +89,7 @@ class NYTimes(BasicNewsRecipe): 'header_search', 'login', 'masthead', + 'masthead-nav', 'memberTools', 'navigation', 'portfolioInline', diff --git a/resources/recipes/pescanik.recipe b/resources/recipes/pescanik.recipe index 5281aa579d..3ab9c24de3 100644 --- a/resources/recipes/pescanik.recipe +++ b/resources/recipes/pescanik.recipe @@ -1,14 +1,11 @@ -#!/usr/bin/env python - __license__ = 'GPL v3' -__copyright__ = '2008-2009, Darko Miletic ' +__copyright__ = '2008-2010, Darko Miletic ' ''' pescanik.net ''' import re from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import Tag class Pescanik(BasicNewsRecipe): title = 'Pescanik' @@ -21,17 +18,16 @@ class Pescanik(BasicNewsRecipe): no_stylesheets = True use_embedded_content = False encoding = 'utf-8' - language = 'sr' - - lang = 'sr-Latn-RS' - extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} .contentheading{font-size: x-large; font-weight: bold} .small{font-size: small} .createdate{font-size: x-small; font-weight: bold}' + language = 'sr' + publication_type = 'newsportal' + extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Arial,"Lucida Grande",Tahoma,Verdana,sans1,sans-serif} .contentheading{font-size: x-large; font-weight: bold} .small{font-size: small} .createdate{font-size: x-small; font-weight: bold}' conversion_options = { 'comment' : description , 'tags' : category , 'publisher' : publisher - , 'language' : lang - , 'pretty_print' : True + , 'language' : language + , 'linearize_tables' : True } @@ -50,17 +46,4 @@ class Pescanik(BasicNewsRecipe): return nurl + '&pop=1&page=0' def preprocess_html(self, soup): - mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)]) - soup.head.insert(0,mlang) - attribs = [ 'style','font','valign' - ,'colspan','width','height' - ,'rowspan','summary','align' - ,'cellspacing','cellpadding' - ,'frames','rules','border' - ] - for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']): - item.name = 'div' - for attrib in attribs: - if item.has_key(attrib): - del item[attrib] return self.adeify_images(soup) diff --git a/resources/recipes/rte.recipe b/resources/recipes/rte.recipe index eba684115f..cbf540069f 100644 --- a/resources/recipes/rte.recipe +++ b/resources/recipes/rte.recipe @@ -5,7 +5,7 @@ class RTE(BasicNewsRecipe): oldest_article = 7 max_articles_per_feed = 100 __author__ = u'Robin Phillips' - language = 'en_GB' + language = 'en_IE' remove_tags = [dict(attrs={'class':['topAd','botad','previousNextItem','headline','footerLinks','footernav']})] diff --git a/resources/recipes/thecultofghoul.recipe b/resources/recipes/thecultofghoul.recipe index 8a5f507971..3d78c02db6 100644 --- a/resources/recipes/thecultofghoul.recipe +++ b/resources/recipes/thecultofghoul.recipe @@ -18,6 +18,7 @@ class TheCultOfGhoul(BasicNewsRecipe): encoding = 'utf-8' no_stylesheets = True use_embedded_content = True + publication_type = 'blog' extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: "Trebuchet MS",Trebuchet,Verdana,sans1,sans-serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em; border: 1px solid #333333; padding: 4px } ' conversion_options = { diff --git a/resources/recipes/usatoday.recipe b/resources/recipes/usatoday.recipe index 368437a709..5b036d145d 100644 --- a/resources/recipes/usatoday.recipe +++ b/resources/recipes/usatoday.recipe @@ -128,7 +128,6 @@ class USAToday(BasicNewsRecipe): def parse_feeds(self, *args, **kwargs): parsed_feeds = BasicNewsRecipe.parse_feeds(self, *args, **kwargs) # Count articles for progress dialog - content_feeds = [] article_count = 0 for feed in parsed_feeds: article_count += len(feed) @@ -297,7 +296,6 @@ class USAToday(BasicNewsRecipe): if not headline_found: # Monolithic
- restructure - insert_loc = 0 tag = body.find(True) while True: insertLoc += 1 diff --git a/resources/recipes/vijesti.recipe b/resources/recipes/vijesti.recipe index cc28959e93..969b300486 100644 --- a/resources/recipes/vijesti.recipe +++ b/resources/recipes/vijesti.recipe @@ -1,7 +1,6 @@ -#!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2009, Darko Miletic ' +__copyright__ = '2009-2010, Darko Miletic ' ''' vijesti.me @@ -9,7 +8,6 @@ vijesti.me import re from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import Tag class Vijesti(BasicNewsRecipe): title = 'Vijesti' @@ -22,17 +20,16 @@ class Vijesti(BasicNewsRecipe): no_stylesheets = True encoding = 'cp1250' use_embedded_content = False - language = 'sr' - - lang ='sr-Latn-Me' - extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}' + language = 'sr' + publication_type = 'newspaper' + masthead_url = 'http://www.vijesti.me/img/logo.gif' + extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}' conversion_options = { 'comment' : description , 'tags' : category , 'publisher' : publisher - , 'language' : lang - , 'pretty_print' : True + , 'language' : language } preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')] @@ -44,15 +41,5 @@ class Vijesti(BasicNewsRecipe): feeds = [(u'Sve vijesti', u'http://www.vijesti.me/rss.php' )] def preprocess_html(self, soup): - soup.html['xml:lang'] = self.lang - soup.html['lang'] = self.lang - mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)]) - mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=UTF-8")]) - soup.head.insert(0,mlang) - soup.head.insert(1,mcharset) return self.adeify_images(soup) - def get_article_url(self, article): - raw = article.get('link', None) - return raw.replace('.cg.yu','.me') - diff --git a/resources/recipes/vreme.recipe b/resources/recipes/vreme.recipe index 6350fa67c2..a54353b78c 100644 --- a/resources/recipes/vreme.recipe +++ b/resources/recipes/vreme.recipe @@ -1,5 +1,3 @@ -#!/usr/bin/env python - __license__ = 'GPL v3' __copyright__ = '2008-2009, Darko Miletic ' ''' @@ -9,7 +7,6 @@ vreme.com import re from calibre import strftime from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import Tag class Vreme(BasicNewsRecipe): title = 'Vreme' @@ -24,22 +21,23 @@ class Vreme(BasicNewsRecipe): LOGIN = 'http://www.vreme.com/account/login.php?url=%2F' use_embedded_content = False encoding = 'utf-8' - language = 'sr' - - lang = 'sr-Latn-RS' - direction = 'ltr' + language = 'sr' + publication_type = 'magazine' + masthead_url = 'http://www.vreme.com/g/vreme-logo.gif' extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .heading1{font-family: sans1, sans-serif; font-size: x-large; font-weight: bold} .heading2{font-family: sans1, sans-serif; font-size: large; font-weight: bold} .toc-heading{font-family: sans1, sans-serif; font-size: small} .column-heading2{font-family: sans1, sans-serif; font-size: large} .column-heading1{font-family: sans1, sans-serif; font-size: x-large} .column-normal{font-family: sans1, sans-serif; font-size: medium} .large{font-family: sans1, sans-serif; font-size: large} ' conversion_options = { 'comment' : description , 'tags' : category , 'publisher' : publisher - , 'language' : lang - , 'pretty_print' : True + , 'language' : language + , 'linearize_tables' : True } preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')] + remove_tags_before = dict(attrs={'class':'toc-heading'}) + remove_tags_after = dict(attrs={'class':'footer' }) def get_browser(self): br = BasicNewsRecipe.get_browser() @@ -79,31 +77,6 @@ class Vreme(BasicNewsRecipe): def print_version(self, url): return url + '&print=yes' - def preprocess_html(self, soup): - del soup.body['text' ] - del soup.body['bgcolor'] - del soup.body['onload' ] - soup.html['lang'] = self.lang - soup.html['dir' ] = self.direction - - attribs = [ 'style','font','valign' - ,'colspan','width','height' - ,'rowspan','summary','align' - ,'cellspacing','cellpadding' - ,'frames','rules','border' - ] - for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']): - item.name = 'div' - for attrib in attribs: - if item.has_key(attrib): - del item[attrib] - - mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)]) - mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=UTF-8")]) - soup.head.insert(0,mlang) - soup.head.insert(1,mcharset) - return soup - def get_cover_url(self): cover_url = None soup = self.index_to_soup(self.INDEX) diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index 9f2efa9f9b..91130fff9e 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -30,7 +30,7 @@ class ANDROID(USBMS): EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN) VENDOR_NAME = ['HTC', 'MOTOROLA', 'GOOGLE_', 'ANDROID'] - WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'INC.NEXUS_ONE', + WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE', '___UMS_COMPOSITE',] OSX_MAIN_MEM = 'HTC Android Phone Media' diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 533bcb2357..b66f01cbcd 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -25,7 +25,6 @@ from calibre.devices.mime import mime_type_ext # are inherited from the device interface in Device. class USBMS(CLI, Device): - name = 'USBMS Base Device Interface' description = _('Communicate with an eBook reader.') author = _('John Schember') supported_platforms = ['windows', 'osx', 'linux'] diff --git a/src/calibre/ebooks/metadata/mobi.py b/src/calibre/ebooks/metadata/mobi.py index 69a7920613..408bab828d 100644 --- a/src/calibre/ebooks/metadata/mobi.py +++ b/src/calibre/ebooks/metadata/mobi.py @@ -12,7 +12,6 @@ __docformat__ = 'restructuredtext en' from struct import pack, unpack from cStringIO import StringIO -from calibre.ebooks.conversion.config import load_defaults from calibre.ebooks.mobi import MobiError from calibre.ebooks.mobi.writer import rescale_image, MAX_THUMB_DIMEN from calibre.ebooks.mobi.langcodes import iana2mobi @@ -323,11 +322,13 @@ class MetadataUpdater(object): recs = [] try: - from calibre.ebooks.conversion.config import load_defaults - prefs = load_defaults('mobi_output') - pas = prefs.get('prefer_author_sort', False) + from calibre.ebooks.conversion.config import load_defaults + prefs = load_defaults('mobi_output') + pas = prefs.get('prefer_author_sort', False) + kindle_pdoc = prefs.get('personal_doc', None) except: pas = False + kindle_pdoc = None if mi.author_sort and pas: authors = mi.author_sort update_exth_record((100, authors.encode(self.codec, 'replace'))) @@ -351,9 +352,7 @@ class MetadataUpdater(object): subjects = '; '.join(mi.tags) update_exth_record((105, subjects.encode(self.codec, 'replace'))) - prefs = load_defaults('mobi_output') - kindle_pdoc = prefs.get('personal_doc', None) - if kindle_pdoc in mi.tags: + if kindle_pdoc and kindle_pdoc in mi.tags: update_exth_record((501, str('PDOC'))) if mi.pubdate: diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index f2856da4cf..c4829ec22f 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -127,6 +127,7 @@ class BookHeader(object): self.length, self.type, self.codepage, self.unique_id, \ self.version = struct.unpack('>LLLLL', raw[20:40]) + try: self.codec = { 1252: 'cp1252', @@ -153,31 +154,24 @@ class BookHeader(object): sublangid = (langcode >> 10) & 0xFF self.language = main_language.get(langid, 'ENGLISH') self.sublanguage = sub_language.get(sublangid, 'NEUTRAL') + self.mobi_version = struct.unpack('>I', raw[0x68:0x6c])[0] + self.first_image_index = struct.unpack('>L', raw[0x6c:0x6c + 4])[0] - if ident == 'TEXTREAD': - self.mobi_version = 1 - self.first_image_index = -1 - self.exth_flag = 0 - self.exth = None - else: - self.mobi_version = struct.unpack('>I', raw[0x68:0x6c])[0] - self.first_image_index = struct.unpack('>L', raw[0x6c:0x6c + 4])[0] - self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) - - self.exth = None - if not isinstance(self.title, unicode): - self.title = self.title.decode(self.codec, 'replace') - if self.exth_flag & 0x40: + self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) + self.exth = None + if not isinstance(self.title, unicode): + self.title = self.title.decode(self.codec, 'replace') + if self.exth_flag & 0x40: + try: + self.exth = EXTHHeader(raw[16 + self.length:], self.codec, self.title) + self.exth.mi.uid = self.unique_id try: - self.exth = EXTHHeader(raw[16 + self.length:], self.codec, self.title) - self.exth.mi.uid = self.unique_id - try: - self.exth.mi.language = mobi2iana(langid, sublangid) - except: - self.log.exception("'%s': Unknown language code" % getattr(stream, 'name', 'Unnamed stream')) + self.exth.mi.language = mobi2iana(langid, sublangid) except: - self.log.exception("'%s': Invalid EXTH header" % getattr(stream, 'name', 'Unnamed stream')) - self.exth_flag = 0 + self.log.exception('Unknown language code') + except: + self.log.exception('Invalid EXTH header') + self.exth_flag = 0 class MetadataHeader(BookHeader): @@ -839,7 +833,7 @@ def get_metadata(stream): try: im = PILImage.open(buf) except: - log.exception("'%s': Failed to read MOBI cover" % getattr(stream, 'name', 'Unnamed stream')) + log.exception('Failed to read MOBI cover') else: obuf = cStringIO.StringIO() im.convert('RGB').save(obuf, format='JPEG') diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index 0f26e25609..aa2384070e 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -2030,9 +2030,7 @@ class MobiWriter(object): if (not self._periodicalCount and not self._sectionCount and not self._articleCount) or \ not self.opts.mobi_periodical : mobiType = 0x002 - elif self._periodicalCount and self._sectionCount == 1 : - mobiType = 0x102 - elif self._periodicalCount and self._sectionCount > 1 : + elif self._periodicalCount: pt = None if self._oeb.metadata.publication_type: x = unicode(self._oeb.metadata.publication_type[0]).split(':') diff --git a/src/calibre/gui2/convert/regex_builder.py b/src/calibre/gui2/convert/regex_builder.py index b1d8fbcbd5..83e548f81d 100644 --- a/src/calibre/gui2/convert/regex_builder.py +++ b/src/calibre/gui2/convert/regex_builder.py @@ -25,7 +25,7 @@ class RegexHighlighter(QSyntaxHighlighter): self.regex = u'' def update_regex(self, regex): - self.regex = qstring_to_unicode(regex) + self.regex = regex self.rehighlight() def highlightBlock(self, text): @@ -59,14 +59,22 @@ class RegexBuilder(QDialog, Ui_RegexBuilder): self.select_format(db, book_id) self.connect(self.button_box, SIGNAL('clicked(QAbstractButton*)'), self.button_clicked) - self.connect(self.regex, SIGNAL('textChanged(QString)'), self.highlighter.update_regex) - self.connect(self.highlighter, SIGNAL('regex_valid(PyQt_PyObject)'), self.regex_valid) + self.connect(self.regex, SIGNAL('textChanged(QString)'), self.regex_valid) + self.connect(self.test, SIGNAL('clicked()'), self.do_test) def regex_valid(self, valid): - if valid: - self.regex.setStyleSheet('QLineEdit { color: black; background-color: white; }') + regex = qstring_to_unicode(self.regex.text()) + if regex: + try: + re.compile(regex) + self.regex.setStyleSheet('QLineEdit { color: black; background-color: rgba(0,255,0,20%); }') + except: + self.regex.setStyleSheet('QLineEdit { color: black; background-color: rgb(255,0,0,20%); }') else: - self.regex.setStyleSheet('QLineEdit { color: black; background-color: rgb(255,0,0,20%); }') + self.regex.setStyleSheet('QLineEdit { color: black; background-color: white; }') + + def do_test(self): + self.highlighter.update_regex(qstring_to_unicode(self.regex.text())) def select_format(self, db, book_id): format = None diff --git a/src/calibre/gui2/convert/regex_builder.ui b/src/calibre/gui2/convert/regex_builder.ui index 3448c4dded..af17917676 100644 --- a/src/calibre/gui2/convert/regex_builder.ui +++ b/src/calibre/gui2/convert/regex_builder.ui @@ -14,7 +14,7 @@ Regex Builder - + Preview @@ -36,7 +36,7 @@ - + Qt::Horizontal @@ -53,8 +53,19 @@ - - + + + + + + + + + Test + + + + diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 45de68376f..af94afc1f6 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.6.45\n" -"POT-Creation-Date: 2010-03-11 23:47+MST\n" -"PO-Revision-Date: 2010-03-11 23:47+MST\n" +"POT-Creation-Date: 2010-03-28 09:20+IST\n" +"PO-Revision-Date: 2010-03-28 09:20+IST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -27,7 +27,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 #: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58 #: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:204 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 @@ -133,7 +133,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server.py:664 #: /home/kovid/work/calibre/src/calibre/library/server.py:740 #: /home/kovid/work/calibre/src/calibre/library/server.py:787 -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 @@ -453,7 +453,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:30 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 msgid "John Schember" msgstr "" @@ -481,11 +481,11 @@ msgstr "" msgid "Communicate with the Kindle eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:140 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:147 msgid "Communicate with the Kindle 2 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:150 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:157 msgid "Communicate with the Kindle DX eBook reader." msgstr "" @@ -518,12 +518,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:105 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:108 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:119 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:45 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:48 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:51 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:71 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:81 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:90 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:47 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:50 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:80 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:89 msgid "Getting list of books on device..." msgstr "" @@ -537,24 +537,24 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:139 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:141 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:116 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:118 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:115 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:117 msgid "Transferring books to device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:181 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:145 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:162 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:179 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:186 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:161 msgid "Removing books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:207 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:177 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:212 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176 msgid "Sending metadata to device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:213 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:218 msgid "Communicate with the Sony PRS-600/700/900 eBook reader." msgstr "" @@ -644,21 +644,21 @@ msgstr "" msgid "Extra customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28 msgid "Communicate with an eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:37 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:36 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:133 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:141 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:132 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:140 msgid "Adding books to device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:166 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:171 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:165 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:170 msgid "Removing books from device metadata listing..." msgstr "" @@ -1655,7 +1655,11 @@ msgstr "" msgid "Disable compression of the file contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 +msgid "Tag marking book to be filed with Personal Docs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108 msgid "All articles" msgstr "" @@ -2173,7 +2177,7 @@ msgid "No books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1617 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1654 msgid "No books found" msgstr "" @@ -2255,7 +2259,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35 @@ -2833,32 +2837,36 @@ msgstr "" msgid "Default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67 msgid "&Title for Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 msgid "Rescale images for &Palm devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69 msgid "Use author &sort for author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:70 msgid "Disable compression of the file contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71 msgid "Do not add Table of Contents to book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72 msgid "Kindle options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:64 -msgid "Masthead font:" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:73 +msgid "Periodical masthead font:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74 +msgid "Personal Doc tag:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35 @@ -2947,39 +2955,44 @@ msgstr "" msgid "RB Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1862 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1899 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:91 msgid "Cannot build regex using the GUI builder without a book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:91 msgid "No formats available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:107 msgid "Open book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:107 msgid "~" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:52 msgid "Regex Builder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:53 msgid "Preview" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:54 msgid "Regex:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 +msgid "Test" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171 msgid "Convert" msgstr "" @@ -3614,7 +3627,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:478 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1456 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1493 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "" @@ -4315,7 +4328,7 @@ msgid "Choose formats for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1239 msgid "Books" msgstr "" @@ -4962,10 +4975,6 @@ msgstr "" msgid "File &name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 -msgid "Test" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118 msgid "Title:" msgstr "" @@ -5599,7 +5608,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2004 msgid "Save only %s format to disk" msgstr "" @@ -5654,7 +5663,7 @@ msgid "Calibre Library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:488 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2123 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2160 msgid "Choose a location for your ebook library." msgstr "" @@ -5694,22 +5703,22 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1135 msgid "Use library only" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1136 msgid "User annotations generated from main library only" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:966 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1410 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1467 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1447 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1504 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1529 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1594 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1712 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1541 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1566 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1749 msgid "No books selected" msgstr "" @@ -5717,315 +5726,335 @@ msgstr "" msgid "No books selected to fetch annotations from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:989 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:992 msgid "Merging user annotations into database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1142 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1020 +msgid "%s
Last Page Read: %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1026 +msgid "%s
Last Page Read: Location %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1045 +msgid "Location %d • %s
%s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1054 +msgid "Page %d • %s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1059 +msgid "Location %d • %s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1179 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1143 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1180 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1191 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1228 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1279 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1240 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1204 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1205 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1243 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1207 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1244 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1208 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1246 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1210 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1247 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1248 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1212 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1249 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1216 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289 msgid "Some duplicates were found and merged into the following existing books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1298 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1299 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1282 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1319 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1856 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1872 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1909 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1295 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350 msgid "Choose formats not to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1351 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388 msgid "The selected books will be permanently deleted and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1409 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1446 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1462 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1464 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1464 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1429 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1488 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1452 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1489 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1455 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1492 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1503 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1528 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1565 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1531 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1568 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1564 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1601 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1565 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1602 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1573 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1609 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1610 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1574 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1611 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1595 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1632 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1612 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1618 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1655 msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1628 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1665 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668 msgid "Export Catalog Directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1632 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1669 msgid "Select destination for %s.%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1697 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1711 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1748 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1740 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1777 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1856 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1909 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1946 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1871 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1908 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1930 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1931 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1910 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1947 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1951 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1988 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1995 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1996 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2051 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2088 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2052 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2089 msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2075 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2103 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2112 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2140 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2076 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2113 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2089 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2126 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2104 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2141 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2132 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2169 msgid "Invalid library location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2133 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2170 msgid "Could not access %s. Using %s as the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2220 msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2208 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2245 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2211 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2248 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:2215 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2252 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2267 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2304 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2323 msgid "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2294 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2331 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2295 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2332 msgid "%s has been updated to version %s. See the new features. Visit the download page?" msgstr "" @@ -7364,14 +7393,18 @@ msgid "English (Yemen)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:108 -msgid "German (AT)" +msgid "English (Ireland)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:109 -msgid "Dutch (NL)" +msgid "German (AT)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:110 +msgid "Dutch (NL)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111 msgid "Dutch (BE)" msgstr "" diff --git a/src/calibre/utils/localization.py b/src/calibre/utils/localization.py index 90f86a8368..c487e66139 100644 --- a/src/calibre/utils/localization.py +++ b/src/calibre/utils/localization.py @@ -105,6 +105,7 @@ _extra_lang_codes = { 'en_PK' : _('English (Pakistan)'), 'en_SG' : _('English (Singapore)'), 'en_YE' : _('English (Yemen)'), + 'en_IE' : _('English (Ireland)'), 'de_AT' : _('German (AT)'), 'nl' : _('Dutch (NL)'), 'nl_BE' : _('Dutch (BE)'),