Merge + correct log warning in Bibtex catalog

This commit is contained in:
Sengian 2011-05-11 22:45:19 +02:00
commit b143be8c2c
142 changed files with 4993 additions and 4137 deletions

View File

@ -30,3 +30,4 @@ nbproject/
.project
.pydevproject
.settings/
*.DS_Store

View File

@ -19,6 +19,13 @@
# new recipes:
# - title:
- version: 0.8.0
date: 2010-05-06
new features:
- title: "Go to http://calibre-ebook.com/new-in/eight to see what's new in 0.8.0"
type: major
- version: 0.7.59
date: 2011-04-30

View File

@ -12,7 +12,6 @@ class AdvancedUserRecipe1301860159(BasicNewsRecipe):
max_articles_per_feed = 100
no_stylesheets = True
use_embedded_content = False
language = 'en_EN'
remove_javascript = True
keep_only_tags = [dict(name='div', attrs={'class':'modSectionTd2'})]
remove_tags = [dict(name='a'),dict(name='hr')]

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = u'2010, Tomasz Dlugosz <tomek3d@gmail.com>'
__copyright__ = u'2010-2011, Tomasz Dlugosz <tomek3d@gmail.com>'
'''
frazpc.pl
'''
@ -19,17 +19,20 @@ class FrazPC(BasicNewsRecipe):
use_embedded_content = False
no_stylesheets = True
feeds = [(u'Aktualno\u015bci', u'http://www.frazpc.pl/feed'), (u'Recenzje', u'http://www.frazpc.pl/kat/recenzje-2/feed') ]
keep_only_tags = [dict(name='div', attrs={'id':'FRAZ_CONTENT'})]
remove_tags = [dict(name='p', attrs={'class':'gray tagsP fs11'})]
preprocess_regexps = [
(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
[(r'<div id="post-[0-9]*"', lambda match: '<div id="FRAZ_CONTENT"'),
(r'href="/f/news/', lambda match: 'href="http://www.frazpc.pl/f/news/'),
(r' &nbsp; <a href="http://www.frazpc.pl/[^>]*?">(Skomentuj|Komentarz(e)?\([0-9]*\))</a>&nbsp; \|', lambda match: '')]
feeds = [
(u'Aktualno\u015bci', u'http://www.frazpc.pl/feed/aktualnosci'),
(u'Artyku\u0142y', u'http://www.frazpc.pl/feed/artykuly')
]
keep_only_tags = [dict(name='div', attrs={'class':'article'})]
remove_tags = [
dict(name='div', attrs={'class':'title-wrapper'}),
dict(name='p', attrs={'class':'tags'}),
dict(name='p', attrs={'class':'article-links'}),
dict(name='div', attrs={'class':'comments_box'})
]
preprocess_regexps = [(re.compile(r'\| <a href="#comments">Komentarze \([0-9]*\)</a>'), lambda match: '')]
remove_attributes = [ 'width', 'height' ]

View File

@ -21,14 +21,19 @@ class Fronda(BasicNewsRecipe):
feeds = [(u'Infformacje', u'http://fronda.pl/news/feed')]
keep_only_tags = [dict(name='h1', attrs={'class':'big'}),
dict(name='ul', attrs={'class':'about clear'}),
dict(name='div', attrs={'class':'content'})]
keep_only_tags = [dict(name='h2', attrs={'class':'news_title'}),
dict(name='div', attrs={'class':'naglowek_tresc'}),
dict(name='div', attrs={'id':'czytaj'}) ]
remove_tags = [dict(name='a', attrs={'class':'print'})]
preprocess_regexps = [
(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
[ (r'<a href="#" class="print">Drukuj</a>', lambda match: ''),
(r'<p><a href="http://fronda.pl/sklepy">.*</a></p>', lambda match: ''),
[ (r'<p><a href="http://fronda.pl/sklepy">.*</a></p>', lambda match: ''),
(r'<p><a href="http://fronda.pl/pasaz">.*</a></p>', lambda match: ''),
(r'<h3><strong>W.* lektury.*</a></p></div>', lambda match: '</div>'),
(r'<h3>Zobacz t.*?</div>', lambda match: '</div>') ]
(r'<h3>Zobacz t.*?</div>', lambda match: '</div>'),
(r'<p[^>]*>&nbsp;</p>', lambda match: ''),
(r'<p><span style=".*?"><br /></span></p> ', lambda match: ''),
(r'<a style=\'float:right;margin-top:3px;\' href="http://www.facebook.com/share.php?.*?</a>', lambda match: '')]
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
recipes/icons/ziuaveche.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

View File

@ -0,0 +1,36 @@
__license__ = 'GPL v3'
__copyright__ = '2011, Seongkyoun Yoo <Seongkyoun.yoo at gmail.com>'
'''
Profile to download KoreaHerald
'''
from calibre.web.feeds.news import BasicNewsRecipe
class KoreaHerald(BasicNewsRecipe):
title = u'KoreaHerald'
language = 'en'
description = u'Korea Herald News articles'
__author__ = 'Seongkyoun Yoo'
oldest_article = 10
recursions = 3
max_articles_per_feed = 10
no_stylesheets = True
keep_only_tags = [
dict(id=['contentLeft', '_article'])
]
remove_tags = [
dict(name='iframe'),
dict(name='div', attrs={'class':['left','htit2', 'navigation','banner_txt','banner_img']}),
dict(name='ul', attrs={'class':['link_icon', 'flow_icon','detailTextAD110113']}),
]
feeds = [
('All News','http://www.koreaherald.com/rss/020000000000.xml'),
('National','http://www.koreaherald.com/rss/020100000000.xml'),
('Business','http://www.koreaherald.com/rss/020200000000.xml'),
('Life&Style','http://www.koreaherald.com/rss/020300000000.xml'),
('Entertainment','http://www.koreaherald.com/rss/020400000000.xml'),
('Sports','http://www.koreaherald.com/rss/020500000000.xml'),
('Opinion','http://www.koreaherald.com/rss/020600000000.xml'),
('English Cafe','http://www.koreaherald.com/rss/021000000000.xml'),
]

View File

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = u'2011, '
'''
replicavedetelor.ro
'''
from calibre.web.feeds.news import BasicNewsRecipe
class ReplicaVedetelor(BasicNewsRecipe):
title = u'Replica Vedetelor'
__author__ = u'Silviu Cotoara'
description = u'Ofer\u0103 vedetelor dreptul la replic\u0103'
publisher = 'Replica Vedetelor'
oldest_article = 5
language = 'ro'
max_articles_per_feed = 100
no_stylesheets = True
use_embedded_content = False
category = 'Ziare,Reviste,Vedete'
encoding = 'utf-8'
cover_url = 'http://www.webart-software.eu/_pics/lucrari_referinta/medium/84/1-Replica-Vedetelor.jpg'
conversion_options = {
'comments' : description
,'tags' : category
,'language' : language
,'publisher' : publisher
}
keep_only_tags = [
dict(name='div', attrs={'id':'zona-continut'})
]
remove_tags = [
dict(name='ul', attrs={'id':['lista-imagini']})
, dict(name='form', attrs={'id':['f-trimite-unui-prieten']})
]
remove_tags_after = [
dict(name='form', attrs={'id':['f-trimite-unui-prieten']})
]
feeds = [
(u'Feeds', u'http://www.replicavedetelor.ro/feed')
]
def preprocess_html(self, soup):
return self.adeify_images(soup)

View File

@ -2,7 +2,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
class RzeczpospolitaRecipe(BasicNewsRecipe):
__license__ = 'GPL v3'
__author__ = 'kwetal'
__author__ = u'kwetal and Tomasz Dlugosz'
language = 'pl'
version = 1
@ -38,6 +38,8 @@ class RzeczpospolitaRecipe(BasicNewsRecipe):
remove_tags.append(dict(name = 'div', attrs = {'class' : 'clr'}))
remove_tags.append(dict(name = 'div', attrs = {'id' : 'share_bottom'}))
remove_tags.append(dict(name = 'div', attrs = {'id' : 'copyright_law'}))
remove_tags.append(dict(name = 'div', attrs = {'class' : 'more'}))
remove_tags.append(dict(name = 'div', attrs = {'class' : 'editorPicks'}))
extra_css = '''
body {font-family: verdana, arial, helvetica, geneva, sans-serif ;}
@ -48,6 +50,13 @@ class RzeczpospolitaRecipe(BasicNewsRecipe):
.fot{font-size: x-small; color: #666666;}
'''
def skip_ad_pages(self, soup):
if ('advertisement' in soup.find('title').string.lower()):
href = soup.find('a').get('href')
return self.index_to_soup(href, raw=True)
else:
return None
def print_version(self, url):
start, sep, rest = url.rpartition('/')
forget, sep, index = rest.rpartition(',')

View File

@ -1,33 +1,33 @@
# -*- coding: utf-8 -*-
__license__ = 'GPL v3'
__copyright__ = '2009, Gerhard Aigner <gerhard.aigner at gmail.com>'
import re
from calibre.web.feeds.news import BasicNewsRecipe
class TelepolisNews(BasicNewsRecipe):
title = u'Telepolis (News+Artikel)'
__author__ = 'Gerhard Aigner'
__author__ = 'syntaxis'
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
description = 'News from telepolis'
description = 'News from Telepolis'
category = 'news'
oldest_article = 7
max_articles_per_feed = 100
recursion = 0
no_stylesheets = True
encoding = "utf-8"
language = 'de_AT'
language = 'de'
use_embedded_content =False
remove_empty_feeds = True
preprocess_regexps = [(re.compile(r'<a[^>]*>', re.DOTALL|re.IGNORECASE), lambda match: ''),
(re.compile(r'</a>', re.DOTALL|re.IGNORECASE), lambda match: ''),]
keep_only_tags = [dict(name = 'td',attrs={'class':'bloghead'}),dict(name = 'td',attrs={'class':'blogfliess'})]
remove_tags = [dict(name='img'), dict(name='td',attrs={'class':'blogbottom'}), dict(name='td',attrs={'class':'forum'})]
keep_only_tags = [dict(name = 'div',attrs={'class':'head'}),dict(name = 'div',attrs={'class':'leftbox'}),dict(name='td',attrs={'class':'strict'})]
remove_tags = [ dict(name='td',attrs={'class':'blogbottom'}),
dict(name='div',attrs={'class':'forum'}), dict(name='div',attrs={'class':'social'}),dict(name='div',attrs={'class':'blog-letter p-news'}),
dict(name='div',attrs={'class':'blog-sub'}),dict(name='div',attrs={'class':'version-div'}),dict(name='div',attrs={'id':'breadcrumb'})
,dict(attrs={'class':'tp-url'}),dict(attrs={'class':'blog-name entry_'}) ]
remove_tags_after = [dict(name='span', attrs={'class':['breadcrumb']})]
feeds = [(u'News', u'http://www.heise.de/tp/news-atom.xml')]
@ -39,15 +39,8 @@ class TelepolisNews(BasicNewsRecipe):
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
def get_article_url(self, article):
'''if the linked article is of kind artikel don't take it'''
if (article.link.count('artikel') > 1) :
return None
return article.link
def preprocess_html(self, soup):
mtag = '<meta http-equiv="Content-Type" content="text/html; charset=' + self.encoding + '">'
soup.head.insert(0,mtag)
return soup

View File

@ -10,6 +10,8 @@ import re
from calibre.web.feeds.news import BasicNewsRecipe
class Time(BasicNewsRecipe):
recipe_disabled = ('This recipe has been disabled as TIME no longer'
' publish complete articles on the web.')
title = u'Time'
__author__ = 'Kovid Goyal and Sujata Raman'
description = 'Weekly magazine'

View File

@ -7,13 +7,11 @@ usatoday.com
'''
from calibre.web.feeds.news import BasicNewsRecipe
from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, NavigableString, Tag
import re
class USAToday(BasicNewsRecipe):
title = 'USA Today'
__author__ = 'GRiker'
__author__ = 'Kovid Goyal'
oldest_article = 1
timefmt = ''
max_articles_per_feed = 20
@ -31,7 +29,6 @@ class USAToday(BasicNewsRecipe):
margin-bottom: 0em; \
font-size: smaller;}\n \
.articleBody {text-align: left;}\n '
conversion_options = { 'linearize_tables' : True }
#simultaneous_downloads = 1
feeds = [
('Top Headlines', 'http://rssfeeds.usatoday.com/usatoday-NewsTopStories'),
@ -47,63 +44,26 @@ class USAToday(BasicNewsRecipe):
('Most Popular', 'http://rssfeeds.usatoday.com/Usatoday-MostViewedArticles'),
('Offbeat News', 'http://rssfeeds.usatoday.com/UsatodaycomOffbeat-TopStories'),
]
keep_only_tags = [dict(attrs={'class':[
'byLine',
'inside-copy',
'inside-head',
'inside-head2',
'item',
'item-block',
'photo-container',
]}),
dict(id=[
'applyMainStoryPhoto',
'permalink',
])]
keep_only_tags = [dict(attrs={'class':'story'})]
remove_tags = [
dict(attrs={'class':[
'share',
'reprints',
'inline-h3',
'info-extras',
'ppy-outer',
'ppy-caption',
'comments',
'jump',
'pagetools',
'post-attributes',
'tags',
'bottom-tools',
'sponsoredlinks',
]}),
dict(id=['pluck']),
]
remove_tags = [dict(attrs={'class':[
'comments',
'jump',
'pagetools',
'post-attributes',
'tags',
]}),
dict(id=[])]
#feeds = [('Most Popular', 'http://rssfeeds.usatoday.com/Usatoday-MostViewedArticles')]
def dump_hex(self, src, length=16):
''' Diagnostic '''
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
print result
def fixChars(self,string):
# Replace lsquo (\x91)
fixed = re.sub("\x91","&#8216;",string)
# Replace rsquo (\x92)
fixed = re.sub("\x92","&#8217;",fixed)
# Replace ldquo (\x93)
fixed = re.sub("\x93","&#8220;",fixed)
# Replace rdquo (\x94)
fixed = re.sub("\x94","&#8221;",fixed)
# Replace ndash (\x96)
fixed = re.sub("\x96","&#8211;",fixed)
# Replace mdash (\x97)
fixed = re.sub("\x97","&#8212;",fixed)
return fixed
def get_masthead_url(self):
masthead = 'http://i.usatoday.net/mobile/_common/_images/565x73_usat_mobile.gif'
@ -115,321 +75,4 @@ class USAToday(BasicNewsRecipe):
masthead = None
return masthead
def massageNCXText(self, description):
# Kindle TOC descriptions won't render certain characters
if description:
massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
# Replace '&' with '&#38;'
massaged = re.sub("&","&#38;", massaged)
return self.fixChars(massaged)
else:
return description
def parse_feeds(self, *args, **kwargs):
parsed_feeds = BasicNewsRecipe.parse_feeds(self, *args, **kwargs)
# Count articles for progress dialog
article_count = 0
for feed in parsed_feeds:
article_count += len(feed)
self.log( "Queued %d articles" % article_count)
return parsed_feeds
def preprocess_html(self, soup):
soup = self.strip_anchors(soup)
return soup
def postprocess_html(self, soup, first_fetch):
# Remove navLinks <div class="inside-copy" style="padding-bottom:3px">
navLinks = soup.find(True,{'style':'padding-bottom:3px'})
if navLinks:
navLinks.extract()
# Remove <div class="inside-copy" style="margin-bottom:10px">
gibberish = soup.find(True,{'style':'margin-bottom:10px'})
if gibberish:
gibberish.extract()
# Change <inside-head> to <h2>
headline = soup.find(True, {'class':['inside-head','inside-head2']})
if not headline:
headline = soup.find('h3')
if headline:
tag = Tag(soup, "h2")
tag['class'] = "headline"
tag.insert(0, headline.contents[0])
headline.replaceWith(tag)
else:
print "unable to find headline:\n%s\n" % soup
# Change byLine to byline, change commas to middot
# Kindle renders commas in byline as '&'
byline = soup.find(True, {'class':'byLine'})
if byline:
byline['class'] = 'byline'
# Replace comma with middot
byline.contents[0].replaceWith(re.sub(","," &middot;", byline.renderContents()))
jumpout_punc_list = [':','?']
# Remove the inline jumpouts in <div class="inside-copy">
paras = soup.findAll(True, {'class':'inside-copy'})
for para in paras:
if re.match("<b>[\w\W]+ ",para.renderContents()):
p = para.find('b')
for punc in jumpout_punc_list:
punc_offset = p.contents[0].find(punc)
if punc_offset == -1:
continue
if punc_offset > 1:
if p.contents[0][:punc_offset] == p.contents[0][:punc_offset].upper():
#print "extracting \n%s\n" % para.prettify()
para.extract()
# Reset class for remaining
paras = soup.findAll(True, {'class':'inside-copy'})
for para in paras:
para['class'] = 'articleBody'
# Remove inline jumpouts in <p>
paras = soup.findAll(['p'])
for p in paras:
if hasattr(p,'contents') and len(p.contents):
for punc in jumpout_punc_list:
punc_offset = p.contents[0].find(punc)
if punc_offset == -1:
continue
if punc_offset > 2 and hasattr(p,'a') and len(p.contents):
#print "evaluating %s\n" % p.contents[0][:punc_offset+1]
if p.contents[0][:punc_offset] == p.contents[0][:punc_offset].upper():
#print "extracting \n%s\n" % p.prettify()
p.extract()
# Capture the first img, insert after headline
imgs = soup.findAll('img')
print "postprocess_html(): %d images" % len(imgs)
if imgs:
divTag = Tag(soup, 'div')
divTag['class'] = 'image'
body = soup.find('body')
img = imgs[0]
#print "img: \n%s\n" % img.prettify()
# Table for photo and credit
tableTag = Tag(soup,'table')
# Photo
trimgTag = Tag(soup, 'tr')
tdimgTag = Tag(soup, 'td')
tdimgTag.insert(0,img)
trimgTag.insert(0,tdimgTag)
tableTag.insert(0,trimgTag)
# Credit
trcreditTag = Tag(soup, 'tr')
tdcreditTag = Tag(soup, 'td')
tdcreditTag['class'] = 'credit'
credit = soup.find('td',{'class':'photoCredit'})
if credit:
tdcreditTag.insert(0,NavigableString(credit.renderContents()))
else:
credit = img['credit']
if credit:
tdcreditTag.insert(0,NavigableString(credit))
else:
tdcreditTag.insert(0,NavigableString(''))
trcreditTag.insert(0,tdcreditTag)
tableTag.insert(1,trcreditTag)
dtc = 0
divTag.insert(dtc,tableTag)
dtc += 1
if False:
# Add the caption in the table
tableCaptionTag = Tag(soup,'caption')
tableCaptionTag.insert(0,soup.find('td',{'class':'photoCredit'}).renderContents())
tableTag.insert(1,tableCaptionTag)
divTag.insert(dtc,tableTag)
dtc += 1
body.insert(1,divTag)
else:
# Add the caption below the table
#print "Looking for caption in this soup:\n%s" % img.prettify()
captionTag = Tag(soup,'p')
captionTag['class'] = 'caption'
if hasattr(img,'alt') and img['alt']:
captionTag.insert(0,NavigableString('<blockquote>%s</blockquote>' % img['alt']))
divTag.insert(dtc, captionTag)
dtc += 1
else:
try:
captionTag.insert(0,NavigableString('<blockquote>%s</blockquote>' % img['cutline']))
divTag.insert(dtc, captionTag)
dtc += 1
except:
pass
hrTag = Tag(soup, 'hr')
divTag.insert(dtc, hrTag)
dtc += 1
# Delete <div id="applyMainStoryPhoto"
photoJunk = soup.find('div',{'id':'applyMainStoryPhoto'})
if photoJunk:
photoJunk.extract()
# Insert img after headline
tag = body.find(True)
insertLoc = 0
headline_found = False
while True:
# Scan the top-level tags
insertLoc += 1
if hasattr(tag,'class') and tag['class'] == 'headline':
headline_found = True
body.insert(insertLoc,divTag)
break
tag = tag.nextSibling
if not tag:
break
if not headline_found:
# Monolithic <div> - restructure
tag = body.find(True)
while True:
insertLoc += 1
try:
if hasattr(tag,'class') and tag['class'] == 'headline':
headline_found = True
tag.insert(insertLoc,divTag)
break
except:
pass
tag = tag.next
if not tag:
break
# Yank out headline, img and caption
headline = body.find('h2','headline')
img = body.find('div','image')
caption = body.find('p''class')
# body(0) is calibre_navbar
# body(1) is <div class="item">
btc = 1
headline.extract()
body.insert(1, headline)
btc += 1
if img:
img.extract()
body.insert(btc, img)
btc += 1
if caption:
caption.extract()
body.insert(btc, caption)
btc += 1
if len(imgs) > 1:
if True:
[img.extract() for img in imgs[1:]]
else:
# Format the remaining images
# This doesn't work yet
for img in imgs[1:]:
print "img:\n%s\n" % img.prettify()
divTag = Tag(soup, 'div')
divTag['class'] = 'image'
# Table for photo and credit
tableTag = Tag(soup,'table')
# Photo
trimgTag = Tag(soup, 'tr')
tdimgTag = Tag(soup, 'td')
tdimgTag.insert(0,img)
trimgTag.insert(0,tdimgTag)
tableTag.insert(0,trimgTag)
# Credit
trcreditTag = Tag(soup, 'tr')
tdcreditTag = Tag(soup, 'td')
tdcreditTag['class'] = 'credit'
try:
tdcreditTag.insert(0,NavigableString(img['credit']))
except:
tdcreditTag.insert(0,NavigableString(''))
trcreditTag.insert(0,tdcreditTag)
tableTag.insert(1,trcreditTag)
divTag.insert(0,tableTag)
soup.img.replaceWith(divTag)
return soup
def postprocess_book(self, oeb, opts, log) :
def extract_byline(href) :
# <meta name="byline" content=
soup = BeautifulSoup(str(oeb.manifest.hrefs[href]))
byline = soup.find('div',attrs={'class':'byline'})
if byline:
byline['class'] = 'byline'
# Replace comma with middot
byline.contents[0].replaceWith(re.sub(u",", u" &middot;",
byline.renderContents(encoding=None)))
return byline.renderContents(encoding=None)
else :
paras = soup.findAll(text=True)
for para in paras:
if para.startswith("Copyright"):
return para[len('Copyright xxxx '):para.find('.')]
return None
def extract_description(href) :
soup = BeautifulSoup(str(oeb.manifest.hrefs[href]))
description = soup.find('meta',attrs={'name':'description'})
if description :
return self.massageNCXText(description['content'])
else:
# Take first paragraph of article
articleBody = soup.find('div',attrs={'id':['articleBody','item']})
if articleBody:
paras = articleBody.findAll('p')
for p in paras:
if p.renderContents() > '' :
return self.massageNCXText(self.tag_to_string(p,use_alt=False))
else:
print "Didn't find <div id='articleBody'> in this soup:\n%s" % soup.prettify()
return None
# Method entry point here
# Single section toc looks different than multi-section tocs
if oeb.toc.depth() == 2 :
for article in oeb.toc :
if article.author is None :
article.author = extract_byline(article.href)
if article.description is None :
article.description = extract_description(article.href)
elif oeb.toc.depth() == 3 :
for section in oeb.toc :
for article in section :
article.author = extract_byline(article.href)
'''
if article.author is None :
article.author = self.massageNCXText(extract_byline(article.href))
else:
article.author = self.massageNCXText(article.author)
'''
if article.description is None :
article.description = extract_description(article.href)
def strip_anchors(self,soup):
paras = soup.findAll(True)
for para in paras:
aTags = para.findAll('a')
for a in aTags:
if a.img is None:
a.replaceWith(a.renderContents().decode('cp1252','replace'))
return soup

View File

@ -0,0 +1,20 @@
from calibre.web.feeds.news import BasicNewsRecipe
class AdvancedUserRecipe1303841067(BasicNewsRecipe):
title = u'Welt der Physik'
__author__ = 'schuster'
remove_tags_befor = [dict(name='div', attrs={'class':'inhalt_bild_text_printonly'})]
remove_tags_after = [dict(name='span', attrs={'class':'clearinhalt_bild'})]
remove_tags = [dict(attrs={'class':['invisible', 'searchfld', 'searchbtn', 'topnavi', 'topsearch']}),
dict(id=['naservice', 'phservicemenu', '',]),
dict(name=['naservice'])]
oldest_article = 7
max_articles_per_feed = 100
no_stylesheets = True
use_embedded_content = False
language = 'de'
remove_javascript = True
feeds = [(u'Nachrichten und Neuigkeiten', u'http://www.weltderphysik.de/rss/alles.xml')]

53
recipes/ziuaveche.recipe Normal file
View File

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = u'2011, Silviu Cotoar\u0103'
'''
ziuaveche.ro
'''
from calibre.web.feeds.news import BasicNewsRecipe
class ZiuaVeche(BasicNewsRecipe):
title = u'Ziua Veche'
__author__ = u'Silviu Cotoar\u0103'
description = 'Cotidian online'
publisher = 'Ziua Veche'
oldest_article = 5
language = 'ro'
max_articles_per_feed = 100
no_stylesheets = True
use_embedded_content = False
category = 'Ziare,Cotidiane,Stiri'
encoding = 'utf-8'
cover_url = 'http://www.ziuaveche.ro/wp-content/themes/tema/images/zv-logo-alb-old.png'
conversion_options = {
'comments' : description
,'tags' : category
,'language' : language
,'publisher' : publisher
}
keep_only_tags = [
dict(name='div', attrs={'id':'singlePost'})
]
remove_tags = [
dict(name='div', attrs={'id':'LikePluginPagelet'})
]
remove_tags_after = [
dict(name='div', attrs={'id':'LikePluginPagelet'})
]
feeds = [
(u'Feeds', u'http://www.ziuaveche.ro/feed/rss')
]
def preprocess_html(self, soup):
return self.adeify_images(soup)

View File

@ -23,6 +23,9 @@ wWinMain(HINSTANCE Inst, HINSTANCE PrevInst,
ret = execute_python_entrypoint(BASENAME, MODULE, FUNCTION,
stdout_redirect, stderr_redirect);
if (stdout != NULL) fclose(stdout);
if (stderr != NULL) fclose(stderr);
DeleteFile(stdout_redirect);
DeleteFile(stderr_redirect);

View File

@ -4,7 +4,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
__appname__ = u'calibre'
numeric_version = (0, 7, 59)
numeric_version = (0, 8, 0)
__version__ = u'.'.join(map(unicode, numeric_version))
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"

View File

@ -449,7 +449,7 @@ class CatalogPlugin(Plugin): # {{{
['author_sort','authors','comments','cover','formats',
'id','isbn','ondevice','pubdate','publisher','rating',
'series_index','series','size','tags','timestamp',
'title','uuid'])
'title_sort','title','uuid'])
all_custom_fields = set(db.custom_field_keys())
all_fields = all_std_fields.union(all_custom_fields)
@ -607,6 +607,7 @@ class StoreBase(Plugin): # {{{
supported_platforms = ['windows', 'osx', 'linux']
author = 'John Schember'
type = _('Store')
minimum_calibre_version = (0, 8, 0)
actual_plugin = None

View File

@ -613,6 +613,7 @@ from calibre.devices.misc import PALMPRE, AVANT, SWEEX, PDNOVEL, \
from calibre.devices.folder_device.driver import FOLDER_DEVICE_FOR_CONFIG
from calibre.devices.kobo.driver import KOBO
from calibre.devices.bambook.driver import BAMBOOK
from calibre.devices.boeye.driver import BOEYE_BEX, BOEYE_BDX
from calibre.library.catalog import CSV_XML, EPUB_MOBI, BIBTEX
from calibre.ebooks.epub.fix.unmanifested import Unmanifested
@ -743,6 +744,8 @@ plugins += [
EEEREADER,
NEXTBOOK,
ITUNES,
BOEYE_BEX,
BOEYE_BDX,
USER_DEFINED,
]
plugins += [x for x in list(locals().values()) if isinstance(x, type) and \
@ -1093,6 +1096,11 @@ class StoreAmazonKindleStore(StoreBase):
description = _('Kindle books from Amazon')
actual_plugin = 'calibre.gui2.store.amazon_plugin:AmazonKindleStore'
class StoreAmazonDEKindleStore(StoreBase):
name = 'Amazon DE Kindle'
description = _('Kindle eBooks')
actual_plugin = 'calibre.gui2.store.amazon_de_plugin:AmazonDEKindleStore'
class StoreAmazonUKKindleStore(StoreBase):
name = 'Amazon UK Kindle'
description = _('Kindle books from Amazon.uk')
@ -1108,6 +1116,11 @@ class StoreBNStore(StoreBase):
description = _('Books, Textbooks, eBooks, Toys, Games and More.')
actual_plugin = 'calibre.gui2.store.bn_plugin:BNStore'
class StoreBeamEBooksDEStore(StoreBase):
name = 'Beam EBooks DE'
description = _('der eBook Shop')
actual_plugin = 'calibre.gui2.store.beam_ebooks_de_plugin:BeamEBooksDEStore'
class StoreBeWriteStore(StoreBase):
name = 'BeWrite Books'
description = _('Publishers of fine books.')
@ -1123,7 +1136,12 @@ class StoreEbookscomStore(StoreBase):
description = _('The digital bookstore.')
actual_plugin = 'calibre.gui2.store.ebooks_com_plugin:EbookscomStore'
class StoreEHarlequinStoretore(StoreBase):
class StoreEPubBuyDEStore(StoreBase):
name = 'EPUBBuy DE'
description = _('EPUBReaders eBook Shop')
actual_plugin = 'calibre.gui2.store.epubbuy_de_plugin:EPubBuyDEStore'
class StoreEHarlequinStore(StoreBase):
name = 'eHarlequin'
description = _('entertain, enrich, inspire.')
actual_plugin = 'calibre.gui2.store.eharlequin_plugin:EHarlequinStore'
@ -1133,6 +1151,11 @@ class StoreFeedbooksStore(StoreBase):
description = _('Read anywhere.')
actual_plugin = 'calibre.gui2.store.feedbooks_plugin:FeedbooksStore'
class StoreFoylesUKStore(StoreBase):
name = 'Foyles UK'
description = _('Foyles of London, online')
actual_plugin = 'calibre.gui2.store.foyles_uk_plugin:FoylesUKStore'
class StoreGutenbergStore(StoreBase):
name = 'Project Gutenberg'
description = _('The first producer of free ebooks.')
@ -1168,22 +1191,23 @@ class StoreWaterstonesUKStore(StoreBase):
description = _('Feel every word')
actual_plugin = 'calibre.gui2.store.waterstones_uk_plugin:WaterstonesUKStore'
class StoreFoylesUKStore(StoreBase):
name = 'Foyles UK'
description = _('Foyles of London, online')
actual_plugin = 'calibre.gui2.store.foyles_uk_plugin:FoylesUKStore'
class StoreWeightlessBooksStore(StoreBase):
name = 'Weightless Books'
description = '(e)Books That Don\'t Weigh You Down'
actual_plugin = 'calibre.gui2.store.weightless_books_plugin:WeightlessBooksStore'
class AmazonDEKindleStore(StoreBase):
name = 'Amazon DE Kindle'
description = _('Kindle eBooks')
actual_plugin = 'calibre.gui2.store.amazon_de_plugin:AmazonDEKindleStore'
class StoreWizardsTowerBooksStore(StoreBase):
name = 'Wizards Tower Books'
description = 'Wizard\'s Tower Press'
actual_plugin = 'calibre.gui2.store.wizards_tower_books_plugin:WizardsTowerBooksStore'
plugins += [StoreAmazonKindleStore, AmazonDEKindleStore, StoreAmazonUKKindleStore,
plugins += [StoreAmazonKindleStore, StoreAmazonDEKindleStore, StoreAmazonUKKindleStore,
StoreBaenWebScriptionStore, StoreBNStore,
StoreBeWriteStore, StoreDieselEbooksStore, StoreEbookscomStore,
StoreEHarlequinStoretore, StoreFeedbooksStore,
StoreBeamEBooksDEStore, StoreBeWriteStore,
StoreDieselEbooksStore, StoreEbookscomStore, StoreEPubBuyDEStore,
StoreEHarlequinStore, StoreFeedbooksStore,
StoreFoylesUKStore, StoreGutenbergStore, StoreKoboStore, StoreManyBooksStore,
StoreMobileReadStore, StoreOpenLibraryStore, StoreSmashwordsStore,
StoreWaterstonesUKStore]
StoreWaterstonesUKStore, StoreWeightlessBooksStore, StoreWizardsTowerBooksStore]
# }}}

View File

@ -92,8 +92,7 @@ def restore_plugin_state_to_default(plugin_or_name):
config['enabled_plugins'] = ep
default_disabled_plugins = set([
'Douban Books', 'Douban.com covers', 'Nicebooks', 'Nicebooks covers',
'Fictionwise', 'Kent District Library'
'Overdrive',
])
def is_disabled(plugin):

View File

@ -62,7 +62,7 @@ class ANDROID(USBMS):
0x502 : { 0x3203 : [0x0100]},
# Dell
0x413c : { 0xb007 : [0x0100, 0x0224]},
0x413c : { 0xb007 : [0x0100, 0x0224, 0x0226]},
# LG
0x1004 : { 0x61cc : [0x100], 0x61ce : [0x100], 0x618e : [0x226] },

View File

@ -203,9 +203,11 @@ class ITUNES(DriverBase):
# 0x1294 iPhone 3GS
# 0x1297 iPhone 4
# 0x129a iPad
# 0x12a2 iPad2
# 0x129f iPad2 (WiFi)
# 0x12a2 iPad2 (GSM)
# 0x12a3 iPad2 (CDMA)
VENDOR_ID = [0x05ac]
PRODUCT_ID = [0x1292,0x1293,0x1294,0x1297,0x1299,0x129a,0x12a2]
PRODUCT_ID = [0x1292,0x1293,0x1294,0x1297,0x1299,0x129a,0x129f,0x12a2,0x12a3]
BCD = [0x01]
# Plugboard ID
@ -506,7 +508,7 @@ class ITUNES(DriverBase):
if self.iTunes:
# Check for connected book-capable device
self.sources = self._get_sources()
if 'iPod' in self.sources:
if 'iPod' in self.sources and not self.ejected:
#if DEBUG:
#sys.stdout.write('.')
#sys.stdout.flush()
@ -2036,16 +2038,17 @@ class ITUNES(DriverBase):
if 'iPod' in self.sources:
connected_device = self.sources['iPod']
device = self.iTunes.sources[connected_device]
dev_books = None
for pl in device.playlists():
if pl.special_kind() == appscript.k.Books:
if DEBUG:
self.log.info(" Book playlist: '%s'" % (pl.name()))
books = pl.file_tracks()
dev_books = pl.file_tracks()
break
else:
self.log.error(" book_playlist not found")
for book in books:
for book in dev_books:
# This may need additional entries for international iTunes users
if book.kind() in self.Audiobooks:
if DEBUG:

View File

View File

@ -0,0 +1,56 @@
__license__ = 'GPL v3'
__copyright__ = '2011, Ken <ken at szboeye.com>'
__docformat__ = 'restructuredtext en'
'''
Device driver for BOEYE serial readers
'''
from calibre.devices.usbms.driver import USBMS
class BOEYE_BEX(USBMS):
name = 'BOEYE BEX reader driver'
gui_name = 'BOEYE BEX'
description = _('Communicate with BOEYE BEX Serial eBook readers.')
author = 'szboeye'
supported_platforms = ['windows', 'osx', 'linux']
FORMATS = ['epub', 'mobi', 'fb2', 'lit', 'prc', 'pdf', 'rtf', 'txt', 'djvu', 'doc', 'chm', 'html', 'zip', 'pdb']
VENDOR_ID = [0x0085]
PRODUCT_ID = [0x600]
VENDOR_NAME = 'LINUX'
WINDOWS_MAIN_MEM = 'FILE-STOR_GADGET'
OSX_MAIN_MEM = 'Linux File-Stor Gadget Media'
MAIN_MEMORY_VOLUME_LABEL = 'BOEYE BEX Storage Card'
EBOOK_DIR_MAIN = 'Documents'
SUPPORTS_SUB_DIRS = True
class BOEYE_BDX(USBMS):
name = 'BOEYE BDX reader driver'
gui_name = 'BOEYE BDX'
description = _('Communicate with BOEYE BDX serial eBook readers.')
author = 'szboeye'
supported_platforms = ['windows', 'osx', 'linux']
FORMATS = ['epub', 'mobi', 'fb2', 'lit', 'prc', 'pdf', 'rtf', 'txt', 'djvu', 'doc', 'chm', 'html', 'zip', 'pdb']
VENDOR_ID = [0x0085]
PRODUCT_ID = [0x800]
VENDOR_NAME = 'LINUX'
WINDOWS_MAIN_MEM = 'FILE-STOR_GADGET'
WINDOWS_CARD_A_MEM = 'FILE-STOR_GADGET'
OSX_MAIN_MEM = 'Linux File-Stor Gadget Media'
OSX_CARD_A_MEM = 'Linux File-Stor Gadget Media'
MAIN_MEMORY_VOLUME_LABEL = 'BOEYE BDX Internal Memory'
STORAGE_CARD_VOLUME_LABEL = 'BOEYE BDX Storage Card'
EBOOK_DIR_MAIN = 'Documents'
EBOOK_DIR_CARD_A = 'Documents'
SUPPORTS_SUB_DIRS = True

View File

@ -64,7 +64,7 @@ class HANLINV3(USBMS):
return names
def linux_swap_drives(self, drives):
if len(drives) < 2: return drives
if len(drives) < 2 or not drives[1] or not drives[2]: return drives
drives = list(drives)
t = drives[0]
drives[0] = drives[1]
@ -95,7 +95,6 @@ class HANLINV5(HANLINV3):
gui_name = 'Hanlin V5'
description = _('Communicate with Hanlin V5 eBook readers.')
VENDOR_ID = [0x0492]
PRODUCT_ID = [0x8813]
BCD = [0x319]

View File

@ -164,7 +164,7 @@ class APNXBuilder(object):
if c == '/':
closing = True
continue
elif c in ('d', 'p'):
elif c == 'p':
if closing:
in_p = False
else:

View File

@ -38,7 +38,7 @@ class KOBO(USBMS):
VENDOR_ID = [0x2237]
PRODUCT_ID = [0x4161]
BCD = [0x0110]
BCD = [0x0110, 0x0323]
VENDOR_NAME = ['KOBO_INC', 'KOBO']
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['.KOBOEREADER', 'EREADER']

View File

@ -5,7 +5,6 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
from calibre.devices.usbms.driver import USBMS
from calibre.ebooks import BOOK_EXTENSIONS
class USER_DEFINED(USBMS):
@ -69,9 +68,9 @@ class USER_DEFINED(USBMS):
'is prepended to any send_to_device template') + '</p>',
]
EXTRA_CUSTOMIZATION_DEFAULT = [
'0x0000',
'0x0000',
'0x0000',
'0xffff',
'0xffff',
'0xffff',
None,
'',
'',
@ -108,4 +107,4 @@ class USER_DEFINED(USBMS):
except:
import traceback
traceback.print_exc()
USBMS.initialize(self)
USBMS.initialize(self)

View File

@ -68,7 +68,8 @@ def check_command_line_options(parser, args, log):
raise SystemExit(1)
output = args[2]
if output.startswith('.') and output != '.':
if output.startswith('.') and (output != '.' and not
output.startswith('..')):
output = os.path.splitext(os.path.basename(input))[0]+output
output = os.path.abspath(output)

View File

@ -8,9 +8,10 @@ __docformat__ = 'restructuredtext en'
import os
from calibre import walk
from calibre import guess_type, walk
from calibre.customize.conversion import InputFormatPlugin
from calibre.ebooks.chardet import xml_to_unicode
from calibre.ebooks.metadata.opf2 import OPF
from calibre.utils.zipfile import ZipFile
class HTMLZInput(InputFormatPlugin):
@ -27,7 +28,7 @@ class HTMLZInput(InputFormatPlugin):
# Extract content from zip archive.
zf = ZipFile(stream)
zf.extractall('.')
zf.extractall()
for x in walk('.'):
if os.path.splitext(x)[1].lower() in ('.html', '.xhtml', '.htm'):
@ -70,5 +71,25 @@ class HTMLZInput(InputFormatPlugin):
from calibre.ebooks.oeb.transforms.metadata import meta_info_to_oeb_metadata
mi = get_file_type_metadata(stream, file_ext)
meta_info_to_oeb_metadata(mi, oeb.metadata, log)
# Get the cover path from the OPF.
cover_path = None
opf = None
for x in walk('.'):
if os.path.splitext(x)[1].lower() in ('.opf'):
opf = x
break
if opf:
opf = OPF(opf, basedir=os.getcwd())
cover_path = opf.raster_cover
# Set the cover.
if cover_path:
cdata = None
with open(os.path.join(os.getcwd(), cover_path), 'rb') as cf:
cdata = cf.read()
cover_name = os.path.basename(cover_path)
id, href = oeb.manifest.generate('cover', cover_name)
oeb.manifest.add(id, href, guess_type(cover_name)[0], data=cdata)
oeb.guide.add('cover', 'Cover', href)
return oeb

View File

@ -7,11 +7,13 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import os
from cStringIO import StringIO
from lxml import etree
from calibre.customize.conversion import OutputFormatPlugin, \
OptionRecommendation
from calibre.ebooks.metadata.opf2 import OPF, metadata_to_opf
from calibre.ptempfile import TemporaryDirectory
from calibre.utils.zipfile import ZipFile
@ -79,10 +81,31 @@ class HTMLZOutput(OutputFormatPlugin):
fname = os.path.join(tdir, 'images', images[item.href])
with open(fname, 'wb') as img:
img.write(data)
# Cover
cover_path = None
try:
cover_data = None
if oeb_book.metadata.cover:
term = oeb_book.metadata.cover[0].term
cover_data = oeb_book.guide[term].item.data
if cover_data:
from calibre.utils.magick.draw import save_cover_data_to
cover_path = os.path.join(tdir, 'cover.jpg')
with open(cover_path, 'w') as cf:
cf.write('')
save_cover_data_to(cover_data, cover_path)
except:
import traceback
traceback.print_exc()
# Metadata
with open(os.path.join(tdir, 'metadata.opf'), 'wb') as mdataf:
mdataf.write(etree.tostring(oeb_book.metadata.to_opf1()))
opf = OPF(StringIO(etree.tostring(oeb_book.metadata.to_opf1())))
mi = opf.to_book_metadata()
if cover_path:
mi.cover = 'cover.jpg'
mdataf.write(metadata_to_opf(mi))
htmlz = ZipFile(output_path, 'w')
htmlz.add_dir(tdir)

View File

@ -8,7 +8,6 @@ Read meta information from extZ (TXTZ, HTMLZ...) files.
'''
import os
import posixpath
from cStringIO import StringIO
@ -31,9 +30,9 @@ def get_metadata(stream, extract_cover=True):
opf = OPF(opf_stream)
mi = opf.to_book_metadata()
if extract_cover:
cover_name = opf.raster_cover
if cover_name:
mi.cover_data = ('jpg', zf.read(cover_name))
cover_href = opf.raster_cover
if cover_href:
mi.cover_data = (os.path.splitext(cover_href)[1], zf.read(cover_href))
except:
return mi
return mi
@ -59,17 +58,17 @@ def set_metadata(stream, mi):
except:
pass
if new_cdata:
raster_cover = opf.raster_cover
if not raster_cover:
raster_cover = 'cover.jpg'
cpath = posixpath.join(posixpath.dirname(opf_path), raster_cover)
cpath = opf.raster_cover
if not cpath:
cpath = 'cover.jpg'
new_cover = _write_new_cover(new_cdata, cpath)
replacements[cpath] = open(new_cover.name, 'rb')
mi.cover = cpath
# Update the metadata.
opf.smart_update(mi, replace_metadata=True)
newopf = StringIO(opf.render())
safe_replace(stream, opf_path, newopf, extra_replacements=replacements)
safe_replace(stream, opf_path, newopf, extra_replacements=replacements, add_missing=True)
# Cleanup temporary files.
try:

View File

@ -966,7 +966,9 @@ class OPF(object): # {{{
cover_id = covers[0].get('content')
for item in self.itermanifest():
if item.get('id', None) == cover_id:
return item.get('href', None)
mt = item.get('media-type', '')
if 'xml' not in mt:
return item.get('href', None)
@dynamic_property
def cover(self):

View File

@ -338,7 +338,7 @@ class Amazon(Source):
q['field-author'] = ' '.join(author_tokens)
if not ('field-keywords' in q or 'field-isbn' in q or
('field-title' in q and 'field-author' in q)):
('field-title' in q)):
# Insufficient metadata to make an identify query
return None

View File

@ -212,6 +212,9 @@ class Source(Plugin):
def is_customizable(self):
return True
def customization_help(self):
return 'This plugin can only be customized using the GUI'
def config_widget(self):
from calibre.gui2.metadata.config import ConfigWidget
return ConfigWidget(self)
@ -288,10 +291,10 @@ class Source(Plugin):
parts = parts[1:] + parts[:1]
for tok in parts:
tok = remove_pat.sub('', tok).strip()
if len(tok) > 2 and tok.lower() not in ('von', ):
if len(tok) > 2 and tok.lower() not in ('von', 'van',
_('Unknown').lower()):
yield tok
def get_title_tokens(self, title, strip_joiners=True, strip_subtitle=False):
'''
Take a title and return a list of tokens useful for an AND search query.

View File

@ -13,6 +13,7 @@ from Queue import Queue, Empty
from threading import Thread
from io import BytesIO
from operator import attrgetter
from urlparse import urlparse
from calibre.customize.ui import metadata_plugins, all_metadata_plugins
from calibre.ebooks.metadata.sources.base import create_log, msprefs
@ -402,7 +403,7 @@ def identify(log, abort, # {{{
result.identify_plugin = plugin
if msprefs['txt_comments']:
if plugin.has_html_comments and result.comments:
result.comments = html2text(r.comments)
result.comments = html2text(result.comments)
log('The identify phase took %.2f seconds'%(time.time() - start_time))
log('The longest time (%f) was taken by:'%longest, lp)
@ -458,6 +459,14 @@ def urls_from_identifiers(identifiers): # {{{
if oclc:
ans.append(('OCLC', 'oclc', oclc,
'http://www.worldcat.org/oclc/'+oclc))
url = identifiers.get('uri', None)
if url is None:
url = identifiers.get('url', None)
if url and url.startswith('http'):
url = url[:8].replace('|', ':') + url[8:].replace('|', ',')
parts = urlparse(url)
name = parts.netloc
ans.append((name, 'url', url, url))
return ans
# }}}

View File

@ -41,7 +41,7 @@ class OverDrive(Source):
cached_cover_url_is_reliable = True
options = (
Option('get_full_metadata', 'bool', False,
Option('get_full_metadata', 'bool', True,
_('Download all metadata (slow)'),
_('Enable this option to gather all metadata available from Overdrive.')),
)

View File

@ -7,6 +7,8 @@ __docformat__ = 'restructuredtext en'
Convert an ODT file into a Open Ebook
'''
import os
from lxml import etree
from odf.odf2xhtml import ODF2XHTML
from calibre import CurrentDir, walk
@ -23,7 +25,51 @@ class Extract(ODF2XHTML):
with open(name, 'wb') as f:
f.write(data)
def __call__(self, stream, odir):
def filter_css(self, html, log):
root = etree.fromstring(html)
style = root.xpath('//*[local-name() = "style" and @type="text/css"]')
if style:
style = style[0]
css = style.text
if css:
style.text, sel_map = self.do_filter_css(css)
for x in root.xpath('//*[@class]'):
extra = []
orig = x.get('class')
for cls in orig.split():
extra.extend(sel_map.get(cls, []))
if extra:
x.set('class', orig + ' ' + ' '.join(extra))
html = etree.tostring(root, encoding='utf-8',
xml_declaration=True)
return html
def do_filter_css(self, css):
from cssutils import parseString
from cssutils.css import CSSRule
sheet = parseString(css)
rules = list(sheet.cssRules.rulesOfType(CSSRule.STYLE_RULE))
sel_map = {}
count = 0
for r in rules:
# Check if we have only class selectors for this rule
nc = [x for x in r.selectorList if not
x.selectorText.startswith('.')]
if len(r.selectorList) > 1 and not nc:
# Replace all the class selectors with a single class selector
# This will be added to the class attribute of all elements
# that have one of these selectors.
replace_name = 'c_odt%d'%count
count += 1
for sel in r.selectorList:
s = sel.selectorText[1:]
if s not in sel_map:
sel_map[s] = []
sel_map[s].append(replace_name)
r.selectorText = '.'+replace_name
return sheet.cssText, sel_map
def __call__(self, stream, odir, log):
from calibre.utils.zipfile import ZipFile
from calibre.ebooks.metadata.meta import get_metadata
from calibre.ebooks.metadata.opf2 import OPFCreator
@ -32,13 +78,17 @@ class Extract(ODF2XHTML):
if not os.path.exists(odir):
os.makedirs(odir)
with CurrentDir(odir):
print 'Extracting ODT file...'
log('Extracting ODT file...')
html = self.odf2xhtml(stream)
# A blanket img specification like this causes problems
# with EPUB output as the contaiing element often has
# with EPUB output as the containing element often has
# an absolute height and width set that is larger than
# the available screen real estate
html = html.replace('img { width: 100%; height: 100%; }', '')
try:
html = self.filter_css(html, log)
except:
log.exception('Failed to filter CSS, conversion may be slow')
with open('index.xhtml', 'wb') as f:
f.write(html.encode('utf-8'))
zf = ZipFile(stream, 'r')
@ -67,7 +117,7 @@ class ODTInput(InputFormatPlugin):
def convert(self, stream, options, file_ext, log,
accelerators):
return Extract()(stream, '.')
return Extract()(stream, '.', log)
def postprocess_book(self, oeb, opts, log):
# Fix <p><div> constructs as the asinine epubchecker complains

View File

@ -36,7 +36,7 @@ def meta_info_to_oeb_metadata(mi, m, log, override_input_metadata=False):
m.clear('description')
m.add('description', mi.comments)
elif override_input_metadata:
m.clear('description')
m.clear('description')
if not mi.is_null('publisher'):
m.clear('publisher')
m.add('publisher', mi.publisher)

View File

@ -32,10 +32,11 @@ class PDFInput(InputFormatPlugin):
def convert_new(self, stream, accelerators):
from calibre.ebooks.pdf.reflow import PDFDocument
from calibre.utils.cleantext import clean_ascii_chars
if pdfreflow_err:
raise RuntimeError('Failed to load pdfreflow: ' + pdfreflow_err)
pdfreflow.reflow(stream.read(), 1, -1)
xml = open('index.xml', 'rb').read()
xml = clean_ascii_chars(open('index.xml', 'rb').read())
PDFDocument(xml, self.opts, self.log)
return os.path.join(os.getcwd(), 'metadata.opf')

View File

@ -15,7 +15,6 @@ import cStringIO
from lxml import etree
from calibre.ebooks.metadata import authors_to_string
from calibre.utils.filenames import ascii_text
from calibre.utils.magick.draw import save_cover_data_to, identify_data
TAGS = {
@ -79,8 +78,7 @@ def txt2rtf(text):
elif val <= 127:
buf.write(x)
else:
repl = ascii_text(x)
c = r'\uc{2}\u{0:d}{1}'.format(val, repl, len(repl))
c = r'\u{0:d}?'.format(val)
buf.write(c)
return buf.getvalue()

View File

@ -34,7 +34,7 @@ if isosx:
)
gprefs.defaults['action-layout-toolbar'] = (
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
'Choose Library', 'Donate', None, 'Fetch News', 'Save To Disk',
'Choose Library', 'Donate', None, 'Fetch News', 'Store', 'Save To Disk',
'Connect Share', None, 'Remove Books',
)
gprefs.defaults['action-layout-toolbar-device'] = (
@ -48,7 +48,7 @@ else:
gprefs.defaults['action-layout-menubar-device'] = ()
gprefs.defaults['action-layout-toolbar'] = (
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
'Choose Library', 'Donate', None, 'Fetch News', 'Save To Disk',
'Choose Library', 'Donate', None, 'Fetch News', 'Store', 'Save To Disk',
'Connect Share', None, 'Remove Books', None, 'Help', 'Preferences',
)
gprefs.defaults['action-layout-toolbar-device'] = (

View File

@ -20,6 +20,9 @@ class GenerateCatalogAction(InterfaceAction):
action_spec = (_('Create a catalog of the books in your calibre library'), 'catalog.png', 'Catalog builder', None)
dont_add_to = frozenset(['menubar-device', 'toolbar-device', 'context-menu-device'])
def genesis(self):
self.qaction.triggered.connect(self.generate_catalog)
def generate_catalog(self):
rows = self.gui.library_view.selectionModel().selectedRows()
if not rows or len(rows) < 2:

View File

@ -246,7 +246,8 @@ class ChooseLibraryAction(InterfaceAction):
def delete_requested(self, name, location):
loc = location.replace('/', os.sep)
if not question_dialog(self.gui, _('Are you sure?'), '<p>'+
_('All files from %s will be '
_('<b style="color: red">All files</b> (not just ebooks) '
'from <br><br><b>%s</b><br><br> will be '
'<b>permanently deleted</b>. Are you sure?') % loc,
show_copy_button=False):
return

View File

@ -10,7 +10,7 @@ from PyQt4.Qt import QIcon, QMenu, Qt
from calibre.gui2.actions import InterfaceAction
from calibre.gui2.preferences.main import Preferences
from calibre.gui2 import error_dialog
from calibre.constants import DEBUG
from calibre.constants import DEBUG, isosx
class PreferencesAction(InterfaceAction):
@ -19,7 +19,8 @@ class PreferencesAction(InterfaceAction):
def genesis(self):
pm = QMenu()
pm.addAction(QIcon(I('config.png')), _('Preferences'), self.do_config)
acname = _('Change calibre behavior') if isosx else _('Preferences')
pm.addAction(QIcon(I('config.png')), acname, self.do_config)
pm.addAction(QIcon(I('wizard.png')), _('Run welcome wizard'),
self.gui.run_wizard)
if not DEBUG:

View File

@ -27,7 +27,7 @@ class StoreAction(InterfaceAction):
self.store_menu.clear()
self.store_menu.addAction(_('Search'), self.search)
self.store_menu.addSeparator()
for n, p in self.gui.istores.items():
for n, p in sorted(self.gui.istores.items(), key=lambda x: x[0].lower()):
self.store_menu.addAction(n, partial(self.open_store, p))
self.qaction.setMenu(self.store_menu)

View File

@ -439,6 +439,7 @@ def populate_metadata_page(layout, db, book_id, bulk=False, two_column=False, pa
w = widget_factory(dt, col)
ans.append(w)
for c in range(0, len(w.widgets), 2):
w.widgets[c].setWordWrap(True)
w.widgets[c].setBuddy(w.widgets[c+1])
layout.addWidget(w.widgets[c], row, column)
layout.addWidget(w.widgets[c+1], row, column+1)

View File

@ -3,12 +3,13 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
__license__ = 'GPL v3'
from PyQt4.Qt import Qt, QDialog, QTableWidgetItem, QAbstractItemView
from PyQt4.Qt import (Qt, QDialog, QTableWidgetItem, QAbstractItemView, QIcon,
QDialogButtonBox, QFrame, QLabel, QTimer, QMenu, QApplication)
from calibre.ebooks.metadata import author_to_author_sort
from calibre.gui2 import error_dialog
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
from calibre.utils.icu import sort_key, strcmp
from calibre.utils.icu import sort_key
class tableItem(QTableWidgetItem):
def __ge__(self, other):
@ -19,7 +20,7 @@ class tableItem(QTableWidgetItem):
class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
def __init__(self, parent, db, id_to_select):
def __init__(self, parent, db, id_to_select, select_sort):
QDialog.__init__(self, parent)
Ui_EditAuthorsDialog.__init__(self)
self.setupUi(self)
@ -30,14 +31,23 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
self.buttonBox.accepted.connect(self.accepted)
# Set up the column headings
self.table.setSelectionMode(QAbstractItemView.SingleSelection)
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels([_('Author'), _('Author sort')])
self.down_arrow_icon = QIcon(I('arrow-down.png'))
self.up_arrow_icon = QIcon(I('arrow-up.png'))
self.blank_icon = QIcon(I('blank.png'))
self.auth_col = QTableWidgetItem(_('Author'))
self.table.setHorizontalHeaderItem(0, self.auth_col)
self.auth_col.setIcon(self.blank_icon)
self.aus_col = QTableWidgetItem(_('Author sort'))
self.table.setHorizontalHeaderItem(1, self.aus_col)
self.aus_col.setIcon(self.up_arrow_icon)
# Add the data
self.authors = {}
auts = db.get_authors_with_ids()
self.table.setRowCount(len(auts))
setattr(self.table, '__lt__', lambda x, y: True if strcmp(x, y) < 0 else False)
select_item = None
for row, (id, author, sort) in enumerate(auts):
author = author.replace('|', ',')
@ -48,7 +58,10 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
self.table.setItem(row, 0, aut)
self.table.setItem(row, 1, sort)
if id == id_to_select:
select_item = sort
if select_sort:
select_item = sort
else:
select_item = aut
self.table.resizeColumnsToContents()
# set up the cellChanged signal only after the table is filled
@ -69,23 +82,153 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
self.recalc_author_sort.clicked.connect(self.do_recalc_author_sort)
self.auth_sort_to_author.clicked.connect(self.do_auth_sort_to_author)
# Position on the desired item
if select_item is not None:
self.table.setCurrentItem(select_item)
self.table.editItem(select_item)
self.start_find_pos = select_item.row() * 2 + select_item.column()
else:
self.table.setCurrentCell(0, 0)
self.start_find_pos = -1
# set up the search box
self.find_box.initialize('manage_authors_search')
self.find_box.lineEdit().returnPressed.connect(self.do_find)
self.find_box.editTextChanged.connect(self.find_text_changed)
self.find_button.clicked.connect(self.do_find)
l = QLabel(self.table)
self.not_found_label = l
l.setFrameStyle(QFrame.StyledPanel)
l.setAutoFillBackground(True)
l.setText(_('No matches found'))
l.setAlignment(Qt.AlignVCenter)
l.resize(l.sizeHint())
l.move(10,20)
l.setVisible(False)
self.not_found_label.move(40, 40)
self.not_found_label_timer = QTimer()
self.not_found_label_timer.setSingleShot(True)
self.not_found_label_timer.timeout.connect(
self.not_found_label_timer_event, type=Qt.QueuedConnection)
self.table.setContextMenuPolicy(Qt.CustomContextMenu)
self.table.customContextMenuRequested .connect(self.show_context_menu)
def show_context_menu(self, point):
self.context_item = self.table.itemAt(point)
case_menu = QMenu(_('Change Case'))
action_upper_case = case_menu.addAction(_('Upper Case'))
action_lower_case = case_menu.addAction(_('Lower Case'))
action_swap_case = case_menu.addAction(_('Swap Case'))
action_title_case = case_menu.addAction(_('Title Case'))
action_capitalize = case_menu.addAction(_('Capitalize'))
action_upper_case.triggered.connect(self.upper_case)
action_lower_case.triggered.connect(self.lower_case)
action_swap_case.triggered.connect(self.swap_case)
action_title_case.triggered.connect(self.title_case)
action_capitalize.triggered.connect(self.capitalize)
m = self.au_context_menu = QMenu()
ca = m.addAction(_('Copy'))
ca.triggered.connect(self.copy_to_clipboard)
ca = m.addAction(_('Paste'))
ca.triggered.connect(self.paste_from_clipboard)
m.addSeparator()
if self.context_item.column() == 0:
ca = m.addAction(_('Copy to author sort'))
ca.triggered.connect(self.copy_au_to_aus)
else:
ca = m.addAction(_('Copy to author'))
ca.triggered.connect(self.copy_aus_to_au)
m.addSeparator()
m.addMenu(case_menu)
m.exec_(self.table.mapToGlobal(point))
def copy_to_clipboard(self):
cb = QApplication.clipboard()
cb.setText(unicode(self.context_item.text()))
def paste_from_clipboard(self):
cb = QApplication.clipboard()
self.context_item.setText(cb.text())
def upper_case(self):
self.context_item.setText(icu_upper(unicode(self.context_item.text())))
def lower_case(self):
self.context_item.setText(icu_lower(unicode(self.context_item.text())))
def swap_case(self):
self.context_item.setText(unicode(self.context_item.text()).swapcase())
def title_case(self):
from calibre.utils.titlecase import titlecase
self.context_item.setText(titlecase(unicode(self.context_item.text())))
def capitalize(self):
from calibre.utils.icu import capitalize
self.context_item.setText(capitalize(unicode(self.context_item.text())))
def copy_aus_to_au(self):
row = self.context_item.row()
dest = self.table.item(row, 0)
dest.setText(self.context_item.text())
def copy_au_to_aus(self):
row = self.context_item.row()
dest = self.table.item(row, 1)
dest.setText(self.context_item.text())
def not_found_label_timer_event(self):
self.not_found_label.setVisible(False)
def find_text_changed(self):
self.start_find_pos = -1
def do_find(self):
self.not_found_label.setVisible(False)
# For some reason the button box keeps stealing the RETURN shortcut.
# Steal it back
self.buttonBox.button(QDialogButtonBox.Ok).setDefault(False)
self.buttonBox.button(QDialogButtonBox.Ok).setAutoDefault(False)
self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(False)
self.buttonBox.button(QDialogButtonBox.Cancel).setAutoDefault(False)
st = icu_lower(unicode(self.find_box.currentText()))
for i in range(0, self.table.rowCount()*2):
self.start_find_pos = (self.start_find_pos + 1) % (self.table.rowCount()*2)
r = (self.start_find_pos/2)%self.table.rowCount()
c = self.start_find_pos % 2
item = self.table.item(r, c)
text = icu_lower(unicode(item.text()))
if st in text:
self.table.setCurrentItem(item)
self.table.setFocus(True)
return
# Nothing found. Pop up the little dialog for 1.5 seconds
self.not_found_label.setVisible(True)
self.not_found_label_timer.start(1500)
def do_sort_by_author(self):
self.author_order = 1 if self.author_order == 0 else 0
self.table.sortByColumn(0, self.author_order)
self.sort_by_author.setChecked(True)
self.sort_by_author_sort.setChecked(False)
self.auth_col.setIcon(self.down_arrow_icon if self.author_order
else self.up_arrow_icon)
self.aus_col.setIcon(self.blank_icon)
def do_sort_by_author_sort(self):
self.author_sort_order = 1 if self.author_sort_order == 0 else 0
self.table.sortByColumn(1, self.author_sort_order)
self.sort_by_author.setChecked(False)
self.sort_by_author_sort.setChecked(True)
self.aus_col.setIcon(self.down_arrow_icon if self.author_sort_order
else self.up_arrow_icon)
self.auth_col.setIcon(self.blank_icon)
def accepted(self):
self.result = []

View File

@ -20,6 +20,50 @@
<string>Manage authors</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="">
<item>
<widget class="QLabel">
<property name="text">
<string>&amp;Search for:</string>
</property>
<property name="buddy">
<cstring>find_box</cstring>
</property>
</widget>
</item>
<item>
<widget class="HistoryLineEdit" name="find_box">
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="find_button">
<property name="text">
<string>F&amp;ind</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QTableWidget" name="table">
<property name="sizePolicy">
@ -143,4 +187,11 @@ after changing Preferences-&gt;Advanced-&gt;Tweaks-&gt;Author sort name algorith
</hints>
</connection>
</connections>
<customwidgets>
<customwidget>
<class>HistoryLineEdit</class>
<extends>QComboBox</extends>
<header>calibre/gui2/widgets.h</header>
</customwidget>
</customwidgets>
</ui>

View File

@ -19,17 +19,23 @@ class MessageBox(QDialog, Ui_Dialog): # {{{
INFO = 2
QUESTION = 3
def __init__(self, type_, title, msg, det_msg='', show_copy_button=True,
parent=None):
def __init__(self, type_, title, msg,
det_msg='',
q_icon=None,
show_copy_button=True,
parent=None):
QDialog.__init__(self, parent)
icon = {
self.ERROR : 'error',
self.WARNING: 'warning',
self.INFO: 'information',
self.QUESTION: 'question',
}[type_]
icon = 'dialog_%s.png'%icon
self.icon = QIcon(I(icon))
if q_icon is None:
icon = {
self.ERROR : 'error',
self.WARNING: 'warning',
self.INFO: 'information',
self.QUESTION: 'question',
}[type_]
icon = 'dialog_%s.png'%icon
self.icon = QIcon(I(icon))
else:
self.icon = q_icon
self.setupUi(self)
self.setWindowTitle(title)
@ -44,7 +50,6 @@ class MessageBox(QDialog, Ui_Dialog): # {{{
self.bb.ActionRole)
self.ctc_button.clicked.connect(self.copy_to_clipboard)
self.show_det_msg = _('Show &details')
self.hide_det_msg = _('Hide &details')
self.det_msg_toggle = self.bb.addButton(self.show_det_msg, self.bb.ActionRole)

View File

@ -7,16 +7,16 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import os, shutil
from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
from PyQt4.Qt import QDialog
from calibre.constants import isosx
from calibre.gui2 import open_local_file
from calibre.gui2 import open_local_file, error_dialog
from calibre.gui2.dialogs.tweak_epub_ui import Ui_Dialog
from calibre.libunzip import extract as zipextract
from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.ptempfile import (PersistentTemporaryDirectory,
PersistentTemporaryFile)
class TweakEpub(QDialog, Ui_Dialog):
'''
@ -37,11 +37,15 @@ class TweakEpub(QDialog, Ui_Dialog):
self.cancel_button.clicked.connect(self.reject)
self.explode_button.clicked.connect(self.explode)
self.rebuild_button.clicked.connect(self.rebuild)
self.preview_button.clicked.connect(self.preview)
# Position update dialog overlaying top left of app window
parent_loc = parent.pos()
self.move(parent_loc.x(),parent_loc.y())
self.gui = parent
self._preview_files = []
def cleanup(self):
if isosx:
try:
@ -55,6 +59,11 @@ class TweakEpub(QDialog, Ui_Dialog):
# Delete directory containing exploded ePub
if self._exploded is not None:
shutil.rmtree(self._exploded, ignore_errors=True)
for x in self._preview_files:
try:
os.remove(x)
except:
pass
def display_exploded(self):
'''
@ -71,9 +80,8 @@ class TweakEpub(QDialog, Ui_Dialog):
self.rebuild_button.setEnabled(True)
self.explode_button.setEnabled(False)
def rebuild(self, *args):
self._output = os.path.join(self._exploded, 'rebuilt.epub')
with closing(ZipFile(self._output, 'w', compression=ZIP_DEFLATED)) as zf:
def do_rebuild(self, src):
with ZipFile(src, 'w', compression=ZIP_DEFLATED) as zf:
# Write mimetype
zf.write(os.path.join(self._exploded,'mimetype'), 'mimetype', compress_type=ZIP_STORED)
# Write everything else
@ -86,5 +94,23 @@ class TweakEpub(QDialog, Ui_Dialog):
zfn = os.path.relpath(absfn,
self._exploded).replace(os.sep, '/')
zf.write(absfn, zfn)
def preview(self):
if not self._exploded:
return error_dialog(self, _('Cannot preview'),
_('You must first explode the epub before previewing.'),
show=True)
tf = PersistentTemporaryFile('.epub')
tf.close()
self._preview_files.append(tf.name)
self.do_rebuild(tf.name)
self.gui.iactions['View']._view_file(tf.name)
def rebuild(self, *args):
self._output = os.path.join(self._exploded, 'rebuilt.epub')
self.do_rebuild(self._output)
return QDialog.accept(self)

View File

@ -23,6 +23,16 @@
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;p&gt;Explode the ePub to display contents in a file browser window. To tweak individual files, right-click, then 'Open with...' your editor of choice. When tweaks are complete, close the file browser window &lt;b&gt;and the editor windows you used to edit files in the epub&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Rebuild the ePub, updating your calibre library.&lt;/p&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="explode_button">
<property name="statusTip">
@ -37,23 +47,6 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="rebuild_button">
<property name="enabled">
<bool>false</bool>
</property>
<property name="statusTip">
<string>Rebuild ePub from exploded contents</string>
</property>
<property name="text">
<string>&amp;Rebuild ePub</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/exec.png</normaloff>:/images/exec.png</iconset>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="cancel_button">
<property name="statusTip">
@ -68,13 +61,31 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>&lt;p&gt;Explode the ePub to display contents in a file browser window. To tweak individual files, right-click, then 'Open with...' your editor of choice. When tweaks are complete, close the file browser window &lt;b&gt;and the editor windows you used to edit files in the epub&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Rebuild the ePub, updating your calibre library.&lt;/p&gt;</string>
<item row="3" column="1">
<widget class="QPushButton" name="rebuild_button">
<property name="enabled">
<bool>false</bool>
</property>
<property name="wordWrap">
<bool>true</bool>
<property name="statusTip">
<string>Rebuild ePub from exploded contents</string>
</property>
<property name="text">
<string>&amp;Rebuild ePub</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/exec.png</normaloff>:/images/exec.png</iconset>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="preview_button">
<property name="text">
<string>&amp;Preview ePub</string>
</property>
<property name="icon">
<iconset resource="../../../../resources/images.qrc">
<normaloff>:/images/view.png</normaloff>:/images/view.png</iconset>
</property>
</widget>
</item>

View File

@ -44,18 +44,19 @@ class LocationManager(QObject): # {{{
receiver = partial(self._location_selected, name)
ac.triggered.connect(receiver)
self.tooltips[name] = tooltip
m = QMenu(parent)
self._mem.append(m)
a = m.addAction(icon, tooltip)
a.triggered.connect(receiver)
if name != 'library':
m = QMenu(parent)
self._mem.append(m)
a = m.addAction(icon, tooltip)
a.triggered.connect(receiver)
self._mem.append(a)
a = m.addAction(QIcon(I('eject.png')), _('Eject this device'))
a.triggered.connect(self._eject_requested)
ac.setMenu(m)
self._mem.append(a)
else:
ac.setToolTip(tooltip)
ac.setMenu(m)
ac.calibre_name = name
return ac
@ -71,7 +72,12 @@ class LocationManager(QObject): # {{{
def set_switch_actions(self, quick_actions, rename_actions, delete_actions,
switch_actions, choose_action):
self.switch_menu = QMenu()
self.switch_menu = self.library_action.menu()
if self.switch_menu:
self.switch_menu.addSeparator()
else:
self.switch_menu = QMenu()
self.switch_menu.addAction(choose_action)
self.cs_menus = []
for t, acs in [(_('Quick switch'), quick_actions),
@ -85,7 +91,9 @@ class LocationManager(QObject): # {{{
self.switch_menu.addSeparator()
for ac in switch_actions:
self.switch_menu.addAction(ac)
self.library_action.setMenu(self.switch_menu)
if self.switch_menu != self.library_action.menu():
self.library_action.setMenu(self.switch_menu)
def _location_selected(self, location, *args):
if location != self.current_location and hasattr(self,

View File

@ -439,10 +439,16 @@ class BooksView(QTableView): # {{{
if tweaks['sort_columns_at_startup'] is not None:
sh = []
for c,d in tweaks['sort_columns_at_startup']:
if not isinstance(d, bool):
d = True if d == 0 else False
sh.append((c, d))
try:
for c,d in tweaks['sort_columns_at_startup']:
if not isinstance(d, bool):
d = True if d == 0 else False
sh.append((c, d))
except:
# Ignore invalid tweak values as users seem to often get them
# wrong
import traceback
traceback.print_exc()
old_state['sort_history'] = sh
self.apply_state(old_state)

View File

@ -299,13 +299,13 @@ def run_gui(opts, args, actions, listener, app, gui_debug=None):
if getattr(runner.main, 'debug_on_restart', False):
run_in_debug_mode()
else:
import subprocess
print 'Restarting with:', e, sys.argv
if hasattr(sys, 'frameworks_dir'):
app = os.path.dirname(os.path.dirname(sys.frameworks_dir))
import subprocess
subprocess.Popen('sleep 3s; open '+app, shell=True)
else:
os.execvp(e, sys.argv)
subprocess.Popen([e] + sys.argv[1:])
else:
if iswindows:
try:

View File

@ -9,8 +9,8 @@ __docformat__ = 'restructuredtext en'
import textwrap, re, os
from PyQt4.Qt import (Qt, QDateEdit, QDate, pyqtSignal,
QIcon, QToolButton, QWidget, QLabel, QGridLayout,
from PyQt4.Qt import (Qt, QDateEdit, QDate, pyqtSignal, QMessageBox,
QIcon, QToolButton, QWidget, QLabel, QGridLayout, QApplication,
QDoubleSpinBox, QListWidgetItem, QSize, QPixmap,
QPushButton, QSpinBox, QLineEdit, QSizePolicy)
@ -19,10 +19,10 @@ from calibre.gui2.complete import MultiCompleteLineEdit, MultiCompleteComboBox
from calibre.utils.icu import sort_key
from calibre.utils.config import tweaks, prefs
from calibre.ebooks.metadata import (title_sort, authors_to_string,
string_to_authors, check_isbn)
string_to_authors, check_isbn, authors_to_sort_string)
from calibre.ebooks.metadata.meta import get_metadata
from calibre.gui2 import (file_icon_provider, UNDEFINED_QDATE, UNDEFINED_DATE,
choose_files, error_dialog, choose_images, question_dialog)
choose_files, error_dialog, choose_images)
from calibre.utils.date import local_tz, qt_to_dt
from calibre import strftime
from calibre.ebooks import BOOK_EXTENSIONS
@ -31,6 +31,16 @@ from calibre.utils.date import utcfromtimestamp
from calibre.gui2.comments_editor import Editor
from calibre.library.comments import comments_to_html
from calibre.gui2.dialogs.tag_editor import TagEditor
from calibre.utils.icu import strcmp
def save_dialog(parent, title, msg, det_msg=''):
d = QMessageBox(parent)
d.setWindowTitle(title)
d.setText(msg)
d.setStandardButtons(QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
return d.exec_()
'''
The interface common to all widgets used to set basic metadata
@ -156,7 +166,7 @@ class AuthorsEdit(MultiCompleteComboBox):
TOOLTIP = ''
LABEL = _('&Author(s):')
def __init__(self, parent):
def __init__(self, parent, manage_authors):
self.dialog = parent
self.books_to_refresh = set([])
MultiCompleteComboBox.__init__(self, parent)
@ -164,6 +174,28 @@ class AuthorsEdit(MultiCompleteComboBox):
self.setWhatsThis(self.TOOLTIP)
self.setEditable(True)
self.setSizeAdjustPolicy(self.AdjustToMinimumContentsLengthWithIcon)
manage_authors.triggered.connect(self.manage_authors)
def manage_authors(self):
if self.original_val != self.current_val:
d = save_dialog(self, _('Authors changed'),
_('You have changed the authors for this book. You must save '
'these changes before you can use Manage authors. Do you '
'want to save these changes?'))
if d == QMessageBox.Cancel:
return
if d == QMessageBox.Yes:
self.commit(self.db, self.id_)
self.db.commit()
self.original_val = self.current_val
else:
self.current_val = self.original_val
first_author = self.current_val[0] if len(self.current_val) else None
first_author_id = self.db.get_author_id(first_author) if first_author else None
self.dialog.parent().do_author_sort_edit(self, first_author_id,
select_sort=False)
self.initialize(self.db, self.id_)
self.dialog.author_sort.initialize(self.db, self.id_)
def get_default(self):
return _('Unknown')
@ -175,8 +207,8 @@ class AuthorsEdit(MultiCompleteComboBox):
self.clear()
for i in all_authors:
id, name = i
name = [name.strip().replace('|', ',') for n in name.split(',')]
self.addItem(authors_to_string(name))
name = name.strip().replace('|', ',')
self.addItem(name)
self.set_separator('&')
self.set_space_before_sep(True)
@ -188,6 +220,8 @@ class AuthorsEdit(MultiCompleteComboBox):
au = _('Unknown')
self.current_val = [a.strip().replace('|', ',') for a in au.split(',')]
self.original_val = self.current_val
self.id_ = id_
self.db = db
def commit(self, db, id_):
authors = self.current_val
@ -238,7 +272,7 @@ class AuthorSortEdit(EnLineEdit):
'No action is required if this is what you want.'))
self.tooltips = (ok_tooltip, bad_tooltip)
self.authors_edit.editTextChanged.connect(self.update_state)
self.authors_edit.editTextChanged.connect(self.update_state_and_val)
self.textChanged.connect(self.update_state)
autogen_button.clicked.connect(self.auto_generate)
@ -260,12 +294,19 @@ class AuthorSortEdit(EnLineEdit):
return property(fget=fget, fset=fset)
def update_state_and_val(self):
# Handle case change if the authors box changed
aus = authors_to_sort_string(self.authors_edit.current_val)
if strcmp(aus, self.current_val) == 0:
self.current_val = aus
self.update_state()
def update_state(self, *args):
au = unicode(self.authors_edit.text())
au = re.sub(r'\s+et al\.$', '', au)
au = self.db.author_sort_from_authors(string_to_authors(au))
normal = au == self.current_val
normal = strcmp(au, self.current_val) == 0
if normal:
col = 'rgb(0, 255, 0, 20%)'
else:
@ -900,10 +941,13 @@ class TagsEdit(MultiCompleteLineEdit): # {{{
def edit(self, db, id_):
if self.changed:
if question_dialog(self, _('Tags changed'),
d = save_dialog(self, _('Tags changed'),
_('You have changed the tags. In order to use the tags'
' editor, you must either discard or apply these '
'changes. Apply changes?'), show_copy_button=False):
'changes. Apply changes?'))
if d == QMessageBox.Cancel:
return
if d == QMessageBox.Yes:
self.commit(db, id_)
db.commit()
self.original_val = self.current_val
@ -993,6 +1037,13 @@ class IdentifiersEdit(QLineEdit): # {{{
self.setToolTip(tt+extra)
self.setStyleSheet('QLineEdit { background-color: %s }'%col)
def paste_isbn(self):
text = unicode(QApplication.clipboard().text()).strip()
if text:
vals = self.current_val
vals['isbn'] = text
self.current_val = vals
# }}}
class PublisherEdit(MultiCompleteComboBox): # {{{
@ -1075,7 +1126,7 @@ class DateEdit(QDateEdit): # {{{
@dynamic_property
def current_val(self):
def fget(self):
return qt_to_dt(self.date())
return qt_to_dt(self.date(), as_utc=False)
def fset(self, val):
if val is None:
val = UNDEFINED_DATE

View File

@ -31,6 +31,7 @@ class MetadataSingleDialogBase(ResizableDialog):
view_format = pyqtSignal(object, object)
cc_two_column = tweaks['metadata_single_use_2_cols_for_custom_fields']
one_line_comments_toolbar = False
use_toolbutton_for_config_metadata = True
def __init__(self, db, parent=None):
self.db = db
@ -69,7 +70,11 @@ class MetadataSingleDialogBase(ResizableDialog):
self.setLayout(self.l)
self.l.setMargin(0)
self.l.addWidget(self.scroll_area)
self.l.addWidget(self.button_box)
ll = self.button_box_layout = QHBoxLayout()
self.l.addLayout(ll)
ll.addSpacing(10)
ll.addWidget(self.button_box)
ll.addSpacing(10)
self.setWindowIcon(QIcon(I('edit_input.png')))
self.setWindowTitle(_('Edit Metadata'))
@ -103,16 +108,18 @@ class MetadataSingleDialogBase(ResizableDialog):
self.basic_metadata_widgets.extend([self.title, self.title_sort])
self.deduce_author_sort_button = b = QToolButton(self)
b.setToolTip(_(
'Automatically create the author sort entry based on the current'
' author entry.\n'
'Using this button to create author sort will change author sort from'
' red to green.'))
b.setToolTip('<p>' +
_('Automatically create the author sort entry based on the current '
'author entry. Using this button to create author sort will '
'change author sort from red to green. There is a menu of '
'functions available under this button. Click and hold '
'on the button to see it.') + '</p>')
b.m = m = QMenu()
ac = m.addAction(QIcon(I('forward.png')), _('Set author sort from author'))
ac2 = m.addAction(QIcon(I('back.png')), _('Set author from author sort'))
ac3 = m.addAction(QIcon(I('user_profile.png')), _('Manage authors'))
b.setMenu(m)
self.authors = AuthorsEdit(self)
self.authors = AuthorsEdit(self, ac3)
self.author_sort = AuthorSortEdit(self, self.authors, b, self.db, ac,
ac2)
self.basic_metadata_widgets.extend([self.authors, self.author_sort])
@ -123,6 +130,13 @@ class MetadataSingleDialogBase(ResizableDialog):
'Swap the author and title'))
self.swap_title_author_button.clicked.connect(self.swap_title_author)
self.manage_authors_button = QToolButton(self)
self.manage_authors_button.setIcon(QIcon(I('user_profile.png')))
self.manage_authors_button.setToolTip('<p>' + _(
'Manage authors. Use to rename authors and correct '
'individual author\'s sort values') + '</p>')
self.manage_authors_button.clicked.connect(self.authors.manage_authors)
self.series = SeriesEdit(self)
self.remove_unused_series_button = QToolButton(self)
self.remove_unused_series_button.setToolTip(
@ -159,6 +173,12 @@ class MetadataSingleDialogBase(ResizableDialog):
self.clear_identifiers_button = QToolButton(self)
self.clear_identifiers_button.setIcon(QIcon(I('trash.png')))
self.clear_identifiers_button.clicked.connect(self.identifiers.clear)
self.paste_isbn_button = QToolButton(self)
self.paste_isbn_button.setToolTip('<p>' +
_('Paste the contents of the clipboard into the '
'identifiers box prefixed with isbn:') + '</p>')
self.paste_isbn_button.setIcon(QIcon(I('edit-paste.png')))
self.paste_isbn_button.clicked.connect(self.identifiers.paste_isbn)
self.publisher = PublisherEdit(self)
self.basic_metadata_widgets.append(self.publisher)
@ -174,7 +194,12 @@ class MetadataSingleDialogBase(ResizableDialog):
font.setBold(True)
self.fetch_metadata_button.setFont(font)
self.config_metadata_button = QToolButton(self)
if self.use_toolbutton_for_config_metadata:
self.config_metadata_button = QToolButton(self)
self.config_metadata_button.setIcon(QIcon(I('config.png')))
else:
self.config_metadata_button = QPushButton(self)
self.config_metadata_button.setText(_('Configure download metadata'))
self.config_metadata_button.setIcon(QIcon(I('config.png')))
self.config_metadata_button.clicked.connect(self.configure_metadata)
self.config_metadata_button.setToolTip(
@ -198,7 +223,7 @@ class MetadataSingleDialogBase(ResizableDialog):
ans = self.custom_metadata_widgets
for i in range(len(ans)-1):
if before is not None and i == 0:
pass# Do something
pass
if len(ans[i+1].widgets) == 2:
sto(ans[i].widgets[-1], ans[i+1].widgets[1])
else:
@ -206,7 +231,7 @@ class MetadataSingleDialogBase(ResizableDialog):
for c in range(2, len(ans[i].widgets), 2):
sto(ans[i].widgets[c-1], ans[i].widgets[c+1])
if after is not None:
pass # Do something
pass
# }}}
def do_view_format(self, path, fmt):
@ -290,13 +315,17 @@ class MetadataSingleDialogBase(ResizableDialog):
show=True)
return
def update_from_mi(self, mi):
def update_from_mi(self, mi, update_sorts=True):
if not mi.is_null('title'):
self.title.current_val = mi.title
if update_sorts:
self.title_sort.auto_generate()
if not mi.is_null('authors'):
self.authors.current_val = mi.authors
if not mi.is_null('author_sort'):
self.author_sort.current_val = mi.author_sort
elif update_sorts:
self.author_sort.auto_generate()
if not mi.is_null('rating'):
try:
self.rating.current_val = mi.rating
@ -493,7 +522,8 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
sto(one, two)
sto(two, three)
tl.addWidget(self.swap_title_author_button, 0, 0, 2, 1)
tl.addWidget(self.swap_title_author_button, 0, 0, 1, 1)
tl.addWidget(self.manage_authors_button, 1, 0, 1, 1)
create_row(0, self.title, self.deduce_title_sort_button, self.title_sort)
sto(self.title_sort, self.authors)
@ -502,6 +532,7 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
create_row(2, self.series, self.remove_unused_series_button,
self.series_index, icon='trash.png')
sto(self.series_index, self.swap_title_author_button)
sto(self.swap_title_author_button, self.manage_authors_button)
tl.addWidget(self.formats_manager, 0, 6, 3, 1)
@ -512,7 +543,7 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
self.tabs[0].gb = gb = QGroupBox(_('Change cover'), self)
gb.l = l = QGridLayout()
gb.setLayout(l)
sto(self.swap_title_author_button, self.cover.buttons[0])
sto(self.manage_authors_button, self.cover.buttons[0])
for i, b in enumerate(self.cover.buttons[:3]):
l.addWidget(b, 0, i, 1, 1)
sto(b, self.cover.buttons[i+1])
@ -526,10 +557,16 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
w.setLayout(w.l)
l.setMargin(0)
self.splitter.addWidget(w)
def create_row2(row, widget, button=None):
def create_row2(row, widget, button=None, front_button=None):
row += 1
ql = BuddyLabel(widget)
l.addWidget(ql, row, 0, 1, 1)
if front_button:
ltl = QHBoxLayout()
ltl.addWidget(front_button)
ltl.addWidget(ql)
l.addLayout(ltl, row, 0, 1, 1)
else:
l.addWidget(ql, row, 0, 1, 1)
l.addWidget(widget, row, 1, 1, 2 if button is None else 1)
if button is not None:
l.addWidget(button, row, 2, 1, 1)
@ -544,8 +581,10 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
create_row2(1, self.rating)
sto(self.rating, self.tags)
create_row2(2, self.tags, self.tags_editor_button)
sto(self.tags_editor_button, self.identifiers)
create_row2(3, self.identifiers, self.clear_identifiers_button)
sto(self.tags_editor_button, self.paste_isbn_button)
sto(self.paste_isbn_button, self.identifiers)
create_row2(3, self.identifiers, self.clear_identifiers_button,
front_button=self.paste_isbn_button)
sto(self.clear_identifiers_button, self.timestamp)
create_row2(4, self.timestamp, self.timestamp.clear_button)
sto(self.timestamp.clear_button, self.pubdate)
@ -583,6 +622,7 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
cc_two_column = False
one_line_comments_toolbar = True
use_toolbutton_for_config_metadata = False
on_drag_enter = pyqtSignal()
@ -618,13 +658,11 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
self.tabs[0].l.addWidget(gb, 0, 0, 1, 1)
gb.setLayout(tl)
self.button_box.addButton(self.fetch_metadata_button,
QDialogButtonBox.ActionRole)
self.config_metadata_button.setToolButtonStyle(Qt.ToolButtonTextOnly)
self.config_metadata_button.setText(_('Configure metadata downloading'))
self.button_box.addButton(self.config_metadata_button,
QDialogButtonBox.ActionRole)
sto(self.button_box, self.title)
self.button_box_layout.insertWidget(1, self.fetch_metadata_button)
self.button_box_layout.insertWidget(2, self.config_metadata_button)
sto(self.button_box, self.fetch_metadata_button)
sto(self.fetch_metadata_button, self.config_metadata_button)
sto(self.config_metadata_button, self.title)
def create_row(row, widget, tab_to, button=None, icon=None, span=1):
ql = BuddyLabel(widget)
@ -642,6 +680,8 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
sto(widget, tab_to)
tl.addWidget(self.swap_title_author_button, 0, 0, 2, 1)
tl.addWidget(self.manage_authors_button, 2, 0, 1, 1)
tl.addWidget(self.paste_isbn_button, 11, 0, 1, 1)
create_row(0, self.title, self.title_sort,
button=self.deduce_title_sort_button, span=2,
@ -663,6 +703,9 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
button=self.timestamp.clear_button, icon='trash.png')
create_row(11, self.identifiers, self.comments,
button=self.clear_identifiers_button, icon='trash.png')
sto(self.clear_identifiers_button, self.swap_title_author_button)
sto(self.swap_title_author_button, self.manage_authors_button)
sto(self.manage_authors_button, self.paste_isbn_button)
tl.addItem(QSpacerItem(1, 1, QSizePolicy.Fixed, QSizePolicy.Expanding),
12, 1, 1 ,1)
@ -702,7 +745,6 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
gb = QGroupBox(_('Change cover'), tab1)
l = QGridLayout()
gb.setLayout(l)
sto(self.swap_title_author_button, self.cover.buttons[0])
for i, b in enumerate(self.cover.buttons[:3]):
l.addWidget(b, 0, i, 1, 1)
sto(b, self.cover.buttons[i+1])
@ -728,7 +770,139 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
# }}}
editors = {'default': MetadataSingleDialog, 'alt1': MetadataSingleDialogAlt1}
class MetadataSingleDialogAlt2(MetadataSingleDialogBase): # {{{
cc_two_column = False
one_line_comments_toolbar = True
use_toolbutton_for_config_metadata = False
def do_layout(self):
self.central_widget.clear()
self.labels = []
sto = QWidget.setTabOrder
self.central_widget.tabBar().setVisible(False)
tab0 = QWidget(self)
self.central_widget.addTab(tab0, _("&Metadata"))
l = QGridLayout()
tab0.setLayout(l)
# Basic metadata in col 0
tl = QGridLayout()
gb = QGroupBox(_('Basic metadata'), tab0)
l.addWidget(gb, 0, 0, 1, 1)
gb.setLayout(tl)
self.button_box_layout.insertWidget(1, self.fetch_metadata_button)
self.button_box_layout.insertWidget(2, self.config_metadata_button)
sto(self.button_box, self.fetch_metadata_button)
sto(self.fetch_metadata_button, self.config_metadata_button)
sto(self.config_metadata_button, self.title)
def create_row(row, widget, tab_to, button=None, icon=None, span=1):
ql = BuddyLabel(widget)
tl.addWidget(ql, row, 1, 1, 1)
tl.addWidget(widget, row, 2, 1, 1)
if button is not None:
tl.addWidget(button, row, 3, span, 1)
if icon is not None:
button.setIcon(QIcon(I(icon)))
if tab_to is not None:
if button is not None:
sto(widget, button)
sto(button, tab_to)
else:
sto(widget, tab_to)
tl.addWidget(self.swap_title_author_button, 0, 0, 2, 1)
tl.addWidget(self.manage_authors_button, 2, 0, 2, 1)
tl.addWidget(self.paste_isbn_button, 11, 0, 1, 1)
create_row(0, self.title, self.title_sort,
button=self.deduce_title_sort_button, span=2,
icon='auto_author_sort.png')
create_row(1, self.title_sort, self.authors)
create_row(2, self.authors, self.author_sort,
button=self.deduce_author_sort_button,
span=2, icon='auto_author_sort.png')
create_row(3, self.author_sort, self.series)
create_row(4, self.series, self.series_index,
button=self.remove_unused_series_button, icon='trash.png')
create_row(5, self.series_index, self.tags)
create_row(6, self.tags, self.rating, button=self.tags_editor_button)
create_row(7, self.rating, self.pubdate)
create_row(8, self.pubdate, self.publisher,
button=self.pubdate.clear_button, icon='trash.png')
create_row(9, self.publisher, self.timestamp)
create_row(10, self.timestamp, self.identifiers,
button=self.timestamp.clear_button, icon='trash.png')
create_row(11, self.identifiers, self.comments,
button=self.clear_identifiers_button, icon='trash.png')
sto(self.clear_identifiers_button, self.swap_title_author_button)
sto(self.swap_title_author_button, self.manage_authors_button)
sto(self.manage_authors_button, self.paste_isbn_button)
tl.addItem(QSpacerItem(1, 1, QSizePolicy.Fixed, QSizePolicy.Expanding),
12, 1, 1 ,1)
# Custom metadata in col 1
w = getattr(self, 'custom_metadata_widgets_parent', None)
if w is not None:
gb = QGroupBox(_('Custom metadata'), tab0)
gbl = QVBoxLayout()
gb.setLayout(gbl)
sr = QScrollArea(gb)
sr.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
sr.setWidgetResizable(True)
sr.setBackgroundRole(QPalette.Base)
sr.setFrameStyle(QFrame.NoFrame)
sr.setWidget(w)
gbl.addWidget(sr)
l.addWidget(gb, 0, 1, 1, 1)
sp = QSizePolicy()
sp.setVerticalStretch(10)
sp.setHorizontalPolicy(QSizePolicy.Minimum)
sp.setVerticalPolicy(QSizePolicy.Expanding)
gb.setSizePolicy(sp)
self.set_custom_metadata_tab_order()
# comments span col 0 & 1
w = QGroupBox(_('Comments'), tab0)
sp = QSizePolicy()
sp.setVerticalStretch(10)
sp.setHorizontalPolicy(QSizePolicy.Expanding)
sp.setVerticalPolicy(QSizePolicy.Expanding)
w.setSizePolicy(sp)
lb = QHBoxLayout()
w.setLayout(lb)
lb.addWidget(self.comments)
l.addWidget(w, 1, 0, 1, 2)
# Cover & formats in col 3
gb = QGroupBox(_('Cover'), tab0)
lb = QGridLayout()
gb.setLayout(lb)
lb.addWidget(self.cover, 0, 0, 1, 3, alignment=Qt.AlignCenter)
sto(self.manage_authors_button, self.cover.buttons[0])
for i, b in enumerate(self.cover.buttons[:3]):
lb.addWidget(b, 1, i, 1, 1)
sto(b, self.cover.buttons[i+1])
hl = QHBoxLayout()
for b in self.cover.buttons[3:]:
hl.addWidget(b)
sto(self.cover.buttons[-2], self.cover.buttons[-1])
lb.addLayout(hl, 2, 0, 1, 3)
l.addWidget(gb, 0, 2, 1, 1)
l.addWidget(self.formats_manager, 1, 2, 1, 1)
sto(self.cover.buttons[-1], self.formats_manager)
self.formats_manager.formats.setMaximumWidth(10000)
self.formats_manager.formats.setIconSize(QSize(32, 32))
# }}}
editors = {'default': MetadataSingleDialog, 'alt1': MetadataSingleDialogAlt1,
'alt2': MetadataSingleDialogAlt2}
def edit_metadata(db, row_list, current_row, parent=None, view_slot=None,
set_current_callback=None):

View File

@ -61,7 +61,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
r('bools_are_tristate', db.prefs, restart_required=True)
r = self.register
choices = [(_('Default'), 'default'), (_('Compact Metadata'), 'alt1')]
choices = [(_('Default'), 'default'), (_('Compact Metadata'), 'alt1'),
(_('All on 1 tab'), 'alt2')]
r('edit_metadata_single_layout', gprefs, choices=choices)
def initialize(self):

View File

@ -190,7 +190,15 @@ class FieldsModel(QAbstractListModel): # {{{
return ans | Qt.ItemIsUserCheckable
def restore_defaults(self):
self.overrides = dict([(f, self.state(f, True)) for f in self.fields])
self.overrides = dict([(f, self.state(f, Qt.Checked)) for f in self.fields])
self.reset()
def select_all(self):
self.overrides = dict([(f, Qt.Checked) for f in self.fields])
self.reset()
def clear_all(self):
self.overrides = dict([(f, Qt.Unchecked) for f in self.fields])
self.reset()
def setData(self, index, val, role):
@ -273,6 +281,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
self.fields_view.setModel(self.fields_model)
self.fields_model.dataChanged.connect(self.changed_signal)
self.select_all_button.clicked.connect(self.fields_model.select_all)
self.clear_all_button.clicked.connect(self.fields_model.clear_all)
def configure_plugin(self):
for index in self.sources_view.selectionModel().selectedRows():
plugin = self.sources_model.data(index, Qt.UserRole)

View File

@ -77,8 +77,8 @@
<property name="title">
<string>Downloaded metadata fields</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0" colspan="2">
<widget class="QListView" name="fields_view">
<property name="toolTip">
<string>If you uncheck any fields, metadata for those fields will not be downloaded</string>
@ -88,6 +88,20 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="select_all_button">
<property name="text">
<string>&amp;Select all</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="clear_all_button">
<property name="text">
<string>&amp;Clear all</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@ -75,6 +75,8 @@ class PluginModel(QAbstractItemModel, SearchQueryParser): # {{{
def find(self, query):
query = query.strip()
if not query:
return QModelIndex()
matches = self.parse(query)
if not matches:
return QModelIndex()
@ -87,6 +89,8 @@ class PluginModel(QAbstractItemModel, SearchQueryParser): # {{{
def find_next(self, idx, query, backwards=False):
query = query.strip()
if not query:
return idx
matches = self.parse(query)
if not matches:
return idx

View File

@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en'
class StorePlugin(object): # {{{
'''
A plugin representing an online ebook repository (store). The store can
be a comercial store that sells ebooks or a source of free downloadable
be a commercial store that sells ebooks or a source of free downloadable
ebooks.
Note that this class is the base class for these plugins, however, to
@ -43,11 +43,13 @@ class StorePlugin(object): # {{{
The easiest way to handle affiliate money payouts is to randomly select
between the author's affiliate id and calibre's affiliate id so that
70% of the time the author's id is used.
See declined.txt for a list of stores that do not want to be included.
'''
def __init__(self, gui, name):
from calibre.gui2 import JSONConfig
self.gui = gui
self.name = name
self.base_plugin = None
@ -79,14 +81,14 @@ class StorePlugin(object): # {{{
return items as a generator.
Don't be lazy with the search! Load as much data as possible in the
:class:`calibre.gui2.store.search_result.SearchResult` object.
:class:`calibre.gui2.store.search_result.SearchResult` object.
However, if data (such as cover_url)
isn't available because the store does not display cover images then it's okay to
ignore it.
At the very least a :class:`calibre.gui2.store.search_result.SearchResult`
returned by this function must have the title, author and id.
If you have to parse multiple pages to get all of the data then implement
:meth:`get_deatils` for retrieving additional information.
@ -105,24 +107,24 @@ class StorePlugin(object): # {{{
item_data is plugin specific and is used in :meth:`open` to open to a specifc place in the store.
'''
raise NotImplementedError()
def get_details(self, search_result, timeout=60):
'''
Delayed search for information about specific search items.
Typically, this will be used when certain information such as
formats, drm status, cover url are not part of the main search
results and the information is on another web page.
Using this function allows for the main information (title, author)
to be displayed in the search results while other information can
take extra time to load. Splitting retrieving data that takes longer
to load into a separate function will give the illusion of the search
being faster.
:param search_result: A search result that need details set.
:param timeout: The maximum amount of time in seconds to spend downloading details.
:return: True if the search_result was modified otherwise False
'''
return False
@ -133,30 +135,30 @@ class StorePlugin(object): # {{{
is called to update the caches. It is recommended to call this function
from :meth:`open`. Especially if :meth:`open` does anything other than
open a web page.
This function can be called at any time. It is up to the plugin to determine
if the cache really does need updating. Unless :param:`force` is True, then
the plugin must update the cache. The only time force should be True is if
this function is called by the plugin's configuration dialog.
if :param:`suppress_progress` is False it is safe to assume that this function
is being called from the main GUI thread so it is safe and recommended to use
a QProgressDialog to display what is happening and allow the user to cancel
the operation. if :param:`suppress_progress` is True then run the update
silently. In this case there is no guarantee what thread is calling this
function so no Qt related functionality that requires being run in the main
GUI thread should be run. E.G. Open a QProgressDialog.
GUI thread should be run. E.G. Open a QProgressDialog.
:param parent: The parent object to be used by an GUI dialogs.
:param timeout: The maximum amount of time that should be spent in
any given network connection.
:param force: Force updating the cache even if the plugin has determined
it is not necessary.
:param suppress_progress: Should a progress indicator be shown.
:return: True if the cache was updated, False otherwise.
'''
return False

View File

@ -0,0 +1,92 @@
# -*- coding: utf-8 -*-
from __future__ import (unicode_literals, division, absolute_import, print_function)
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing
from lxml import html
from PyQt4.Qt import QUrl
from calibre import browser
from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin
from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog
class BeamEBooksDEStore(BasicStoreConfig, StorePlugin):
def open(self, parent=None, detail_item=None, external=False):
url = 'http://klick.affiliwelt.net/klick.php?bannerid=10072&pid=32307&prid=908'
url_details = ('http://klick.affiliwelt.net/klick.php?'
'bannerid=10730&pid=32307&prid=908&prodid={0}')
if external or self.config.get('open_external', False):
if detail_item:
url = url_details.format(detail_item)
open_url(QUrl(url))
else:
detail_url = None
if detail_item:
detail_url = url_details.format(detail_item)
d = WebStoreDialog(self.gui, url, parent, detail_url)
d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', ''))
d.exec_()
def search(self, query, max_results=10, timeout=60):
url = 'http://www.beam-ebooks.de/suchergebnis.php?Type=&sw=' + urllib2.quote(query)
br = browser()
counter = max_results
with closing(br.open(url, timeout=timeout)) as f:
doc = html.fromstring(f.read())
for data in doc.xpath('//table[tr/td/div[@class="stil2"]]'):
if counter <= 0:
break
id = ''.join(data.xpath('./tr/td/div[@class="stil2"]/a/@href')).strip()
if not id:
continue
id = id[7:]
cover_url = ''.join(data.xpath('./tr/td[1]/a/img/@src'))
if cover_url:
cover_url = 'http://www.beam-ebooks.de' + cover_url
title = ''.join(data.xpath('./tr/td/div[@class="stil2"]/a/b/text()'))
author = ' '.join(data.xpath('./tr/td/div[@class="stil2"]/'
'child::b/text()'
'|'
'./tr/td/div[@class="stil2"]/'
'child::strong/text()'))
price = ''.join(data.xpath('./tr/td[3]/text()'))
pdf = data.xpath(
'boolean(./tr/td[3]/a/img[contains(@alt, "PDF")]/@alt)')
epub = data.xpath(
'boolean(./tr/td[3]/a/img[contains(@alt, "ePub")]/@alt)')
mobi = data.xpath(
'boolean(./tr/td[3]/a/img[contains(@alt, "Mobipocket")]/@alt)')
counter -= 1
s = SearchResult()
s.cover_url = cover_url
s.title = title.strip()
s.author = author.strip()
s.price = price
s.drm = SearchResult.DRM_UNLOCKED
s.detail_item = id
formats = []
if epub:
formats.append('ePub')
if pdf:
formats.append('PDF')
if mobi:
formats.append('MOBI')
s.formats = ', '.join(formats)
yield s

View File

@ -0,0 +1,5 @@
This is a list of stores that objected, declined
or asked not to be included in the store integration.
* Borders (http://www.borders.com/)
* WH Smith (http://www.whsmith.co.uk/)

View File

@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-
from __future__ import (unicode_literals, division, absolute_import, print_function)
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import urllib2
from contextlib import closing
from lxml import html
from PyQt4.Qt import QUrl
from calibre import browser
from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin
from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog
class EPubBuyDEStore(BasicStoreConfig, StorePlugin):
def open(self, parent=None, detail_item=None, external=False):
url = 'http://klick.affiliwelt.net/klick.php?bannerid=47653&pid=32307&prid=2627'
url_details = ('http://klick.affiliwelt.net/klick.php?bannerid=47653'
'&pid=32307&prid=2627&prodid={0}')
if external or self.config.get('open_external', False):
if detail_item:
url = url_details.format(detail_item)
open_url(QUrl(url))
else:
detail_url = None
if detail_item:
detail_url = url_details.format(detail_item)
d = WebStoreDialog(self.gui, url, parent, detail_url)
d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', ''))
d.exec_()
def search(self, query, max_results=10, timeout=60):
url = 'http://www.epubbuy.com/search.php?search_query=' + urllib2.quote(query)
br = browser()
counter = max_results
with closing(br.open(url, timeout=timeout)) as f:
doc = html.fromstring(f.read())
for data in doc.xpath('//li[contains(@class, "ajax_block_product")]'):
if counter <= 0:
break
id = ''.join(data.xpath('./div[@class="center_block"]'
'/p[contains(text(), "artnr:")]/text()')).strip()
if not id:
continue
id = id[6:].strip()
if not id:
continue
cover_url = ''.join(data.xpath('./div[@class="center_block"]'
'/a[@class="product_img_link"]/img/@src'))
if cover_url:
cover_url = 'http://www.epubbuy.com' + cover_url
title = ''.join(data.xpath('./div[@class="center_block"]'
'/a[@class="product_img_link"]/@title'))
author = ''.join(data.xpath('./div[@class="center_block"]/a[2]/text()'))
price = ''.join(data.xpath('.//span[@class="price"]/text()'))
counter -= 1
s = SearchResult()
s.cover_url = cover_url
s.title = title.strip()
s.author = author.strip()
s.price = price
s.drm = SearchResult.DRM_UNLOCKED
s.detail_item = id
s.formats = 'ePub'
yield s

View File

@ -73,6 +73,6 @@ class FoylesUKStore(BasicStoreConfig, StorePlugin):
s.price = price
s.detail_item = id
s.drm = SearchResult.DRM_LOCKED
s.formats = 'EPUB'
s.formats = 'ePub'
yield s

View File

@ -47,7 +47,7 @@ class SearchDialog(QDialog, Ui_Dialog):
# per search basis.
stores_group_layout = QVBoxLayout()
self.stores_group.setLayout(stores_group_layout)
for x in self.store_plugins:
for x in sorted(self.store_plugins.keys(), key=lambda x: x.lower()):
cbox = QCheckBox(x)
cbox.setChecked(True)
stores_group_layout.addWidget(cbox)
@ -155,6 +155,7 @@ class SearchDialog(QDialog, Ui_Dialog):
self.config['results_view_column_width'] = [self.results_view.columnWidth(i) for i in range(self.results_view.model().columnCount())]
self.config['sort_col'] = self.results_view.model().sort_col
self.config['sort_order'] = self.results_view.model().sort_order
self.config['open_external'] = self.open_external.isChecked()
store_check = {}
for n in self.store_plugins:
@ -179,6 +180,8 @@ class SearchDialog(QDialog, Ui_Dialog):
else:
self.resize_columns()
self.open_external.setChecked(self.config.get('open_external', False))
store_check = self.config.get('store_checked', None)
if store_check:
for n in store_check:
@ -212,7 +215,7 @@ class SearchDialog(QDialog, Ui_Dialog):
def open_store(self, index):
result = self.results_view.model().get_result(index)
self.store_plugins[result.store_name].open(self, result.detail_item)
self.store_plugins[result.store_name].open(self, result.detail_item, self.open_external.isChecked())
def check_progress(self):
if not self.search_pool.threads_running() and not self.results_view.model().cover_pool.threads_running() and not self.results_view.model().details_pool.threads_running():

View File

@ -70,7 +70,7 @@
<x>0</x>
<y>0</y>
<width>215</width>
<height>116</height>
<height>93</height>
</rect>
</property>
</widget>
@ -101,6 +101,16 @@
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="open_external">
<property name="toolTip">
<string>Open a selected book in the system's web browser</string>
</property>
<property name="text">
<string>Open in &amp;external browser</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QSplitter" name="splitter_2">

View File

@ -76,7 +76,7 @@ class WaterstonesUKStore(BasicStoreConfig, StorePlugin):
s.detail_item = id
formats = []
if epub:
formats.append('EPUB')
formats.append('ePub')
if pdf:
formats.append('PDF')
s.formats = ', '.join(formats)

View File

@ -0,0 +1,76 @@
# -*- coding: utf-8 -*-
from __future__ import (unicode_literals, division, absolute_import, print_function)
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing
from lxml import html
from PyQt4.Qt import QUrl
from calibre import browser, url_slash_cleaner
from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin
from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog
class WeightlessBooksStore(BasicStoreConfig, StorePlugin):
def open(self, parent=None, detail_item=None, external=False):
url = 'http://weightlessbooks.com/'
if external or self.config.get('open_external', False):
open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url)))
else:
d = WebStoreDialog(self.gui, url, parent, detail_item)
d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', ''))
d.exec_()
def search(self, query, max_results=10, timeout=60):
url = 'http://weightlessbooks.com/?s=' + urllib.quote_plus(query)
br = browser()
counter = max_results
with closing(br.open(url, timeout=timeout)) as f:
doc = html.fromstring(f.read())
for data in doc.xpath('//li[@id="product"]'):
if counter <= 0:
break
id = ''.join(data.xpath('.//div[@class="cover"]/a/@href'))
if not id:
continue
cover_url = ''.join(data.xpath('.//div[@class="cover"]/a/img/@src'))
price = ''.join(data.xpath('.//div[@class="buy_buttons"]/b[1]/text()'))
if not price:
continue
formats = ', '.join(data.xpath('.//select[@class="eStore_variation"]//option//text()'))
formats = formats.upper()
title = ''.join(data.xpath('.//h3/a/text()'))
author = ''.join(data.xpath('.//h3//text()'))
author = author.replace(title, '')
counter -= 1
s = SearchResult()
s.cover_url = cover_url
s.title = title.strip()
s.author = author.strip()
s.price = price.strip()
s.detail_item = id.strip()
s.drm = SearchResult.DRM_UNLOCKED
s.formats = formats
yield s

View File

@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
from __future__ import (unicode_literals, division, absolute_import, print_function)
__license__ = 'GPL 3'
__copyright__ = '2011, John Schember <john@nachtimwald.com>'
__docformat__ = 'restructuredtext en'
import urllib
from contextlib import closing
from lxml import html
from PyQt4.Qt import QUrl
from calibre import browser, url_slash_cleaner
from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin
from calibre.gui2.store.basic_config import BasicStoreConfig
from calibre.gui2.store.search_result import SearchResult
from calibre.gui2.store.web_store_dialog import WebStoreDialog
class WizardsTowerBooksStore(BasicStoreConfig, StorePlugin):
url = 'http://www.wizardstowerbooks.com/'
def open(self, parent=None, detail_item=None, external=False):
if detail_item:
detail_item = self.url + detail_item
if external or self.config.get('open_external', False):
open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url)))
else:
d = WebStoreDialog(self.gui, self.url, parent, detail_item)
d.setWindowTitle(self.name)
d.set_tags(self.config.get('tags', ''))
d.exec_()
def search(self, query, max_results=10, timeout=60):
url = 'http://www.wizardstowerbooks.com/search.html?for=' + urllib.quote(query)
br = browser()
counter = max_results
with closing(br.open(url, timeout=timeout)) as f:
doc = html.fromstring(f.read())
for data in doc.xpath('//table[@class="gridp"]//td'):
if counter <= 0:
break
id = ''.join(data.xpath('.//span[@class="prti"]/a/@href'))
id = id.strip()
if not id:
continue
cover_url = ''.join(data.xpath('.//div[@class="prim"]/a/img/@src'))
cover_url = url_slash_cleaner(self.url + cover_url.strip())
price = ''.join(data.xpath('.//font[@class="selling_price"]//text()'))
price = price.strip()
if not price:
continue
title = ''.join(data.xpath('.//span[@class="prti"]/a/b/text()'))
author = ''.join(data.xpath('.//p[@class="last"]/text()'))
a, b, author = author.partition(' by ')
counter -= 1
s = SearchResult()
s.cover_url = cover_url
s.title = title.strip()
s.author = author.strip()
s.price = price.strip()
s.detail_item = id.strip()
s.drm = SearchResult.DRM_UNLOCKED
yield s
def get_details(self, search_result, timeout):
br = browser()
with closing(br.open(url_slash_cleaner(self.url + search_result.detail_item), timeout=timeout)) as nf:
idata = html.fromstring(nf.read())
formats = ', '.join(idata.xpath('//select[@id="N1_"]//option//text()'))
search_result.formats = formats.upper()
return True

View File

@ -2048,12 +2048,12 @@ class TagBrowserMixin(object): # {{{
self.library_view.select_rows(ids)
# refreshing the tags view happens at the emit()/call() site
def do_author_sort_edit(self, parent, id):
def do_author_sort_edit(self, parent, id, select_sort=True):
'''
Open the manage authors dialog
'''
db = self.library_view.model().db
editor = EditAuthorsDialog(parent, db, id)
editor = EditAuthorsDialog(parent, db, id, select_sort)
d = editor.exec_()
if d:
for (id, old_author, new_author, new_sort) in editor.result:

View File

@ -435,7 +435,7 @@ class DevicePage(QWizardPage, DeviceUI):
self.registerField("device", self.device_view)
def initializePage(self):
self.label.setText(_('Choose you e-book device. If your device is'
self.label.setText(_('Choose your e-book device. If your device is'
' not in the list, choose a "%s" device.')%Device.manufacturer)
self.man_model = ManufacturerModel()
self.manufacturer_view.setModel(self.man_model)

View File

@ -27,7 +27,7 @@ from calibre.utils.logging import default_log as log
from calibre.utils.magick.draw import thumbnail
from calibre.utils.zipfile import ZipFile, ZipInfo
FIELDS = ['all', 'title', 'author_sort', 'authors', 'comments',
FIELDS = ['all', 'title', 'title_sort', 'author_sort', 'authors', 'comments',
'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher',
'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid']
@ -66,7 +66,7 @@ class CSV_XML(CatalogPlugin): # {{{
dest = 'sort_by',
action = None,
help = _('Output field to sort on.\n'
'Available fields: author_sort, id, rating, size, timestamp, title.\n'
'Available fields: author_sort, id, rating, size, timestamp, title_sort\n'
"Default: '%default'\n"
"Applies to: CSV, XML output formats"))]
@ -76,7 +76,7 @@ class CSV_XML(CatalogPlugin): # {{{
if opts.verbose:
opts_dict = vars(opts)
log("%s(): Generating %s" % (self.name,self.fmt))
log("%s(): Generating %s" % (self.name,self.fmt.upper()))
if opts.connected_device['is_device_connected']:
log(" connected_device: %s" % opts.connected_device['name'])
if opts_dict['search_text']:
@ -126,8 +126,11 @@ class CSV_XML(CatalogPlugin): # {{{
for field in fields:
if field.startswith('#'):
item = db.get_field(entry['id'],field,index_is_id=True)
elif field == 'title_sort':
item = entry['sort']
else:
item = entry[field]
if item is None:
outstr.append('""')
continue
@ -167,7 +170,7 @@ class CSV_XML(CatalogPlugin): # {{{
item = getattr(E, field.replace('#','_'))(val)
record.append(item)
for field in ('id', 'uuid', 'title', 'publisher', 'rating', 'size',
for field in ('id', 'uuid', 'publisher', 'rating', 'size',
'isbn','ondevice'):
if field in fields:
val = r[field]
@ -178,6 +181,10 @@ class CSV_XML(CatalogPlugin): # {{{
item = getattr(E, field)(val)
record.append(item)
if 'title' in fields:
title = E.title(r['title'], sort=r['sort'])
record.append(title)
if 'authors' in fields:
aus = E.authors(sort=r['author_sort'])
for au in r['authors']:
@ -367,7 +374,7 @@ class BIBTEX(CatalogPlugin): # {{{
try:
item = html2text(item)
except:
log(" WARNING: error in converting comments to text")
log.warn("Failed to convert comments to text")
bibtex_entry.append(u'note = "%s"' % bibtexdict.utf8ToBibtex(item))
elif field == 'isbn' :
@ -461,17 +468,17 @@ class BIBTEX(CatalogPlugin): # {{{
if opts.bibfile_enc in bibfile_enc :
bibfile_enc = opts.bibfile_enc
else :
log(" WARNING: incorrect --choose-encoding flag, revert to default")
log.warn("Incorrect --choose-encoding flag, revert to default")
bibfile_enc = bibfile_enc[0]
if opts.bibfile_enctag in bibfile_enctag :
bibfile_enctag = opts.bibfile_enctag
else :
log(" WARNING: incorrect --choose-encoding-configuration flag, revert to default")
log.warn("Incorrect --choose-encoding-configuration flag, revert to default")
bibfile_enctag = bibfile_enctag[0]
if opts.bib_entry in bib_entry :
bib_entry = opts.bib_entry
else :
log(" WARNING: incorrect --entry-type flag, revert to default")
log.warn("Incorrect --entry-type flag, revert to default")
bib_entry = bib_entry[0]
if opts.verbose:
@ -528,7 +535,7 @@ class BIBTEX(CatalogPlugin): # {{{
elif opts.impcit == 'True' :
citation_bibtex= True
else :
log(" WARNING: incorrect --create-citation, revert to default")
log.warn("Incorrect --create-citation, revert to default")
citation_bibtex= True
else :
citation_bibtex= opts.impcit
@ -540,7 +547,7 @@ class BIBTEX(CatalogPlugin): # {{{
elif opts.addfiles == 'True' :
addfiles_bibtex = True
else :
log(" WARNING: incorrect --add-files-path, revert to default")
log.warn("Incorrect --add-files-path, revert to default")
addfiles_bibtex= True
else :
addfiles_bibtex = opts.addfiles
@ -558,7 +565,7 @@ class BIBTEX(CatalogPlugin): # {{{
if bib_entry == 'book' :
nb_books = len(filter(check_entry_book_valid, data))
if nb_books < nb_entries :
log(" WARNING: only %d entries in %d are book compatible" % (nb_books, nb_entries))
log.warn("Only %d entries in %d are book compatible" % (nb_books, nb_entries))
nb_entries = nb_books
# If connected device, add 'On Device' values to data
@ -944,6 +951,7 @@ class EPUB_MOBI(CatalogPlugin):
catalog.createDirectoryStructure()
catalog.copyResources()
catalog.buildSources()
Options managed in gui2.catalog.catalog_epub_mobi.py
'''
# A single number creates 'Last x days' only.

View File

@ -33,7 +33,7 @@ from calibre import isbytestring
from calibre.utils.filenames import ascii_filename
from calibre.utils.date import utcnow, now as nowf, utcfromtimestamp
from calibre.utils.config import prefs, tweaks, from_json, to_json
from calibre.utils.icu import sort_key
from calibre.utils.icu import sort_key, strcmp
from calibre.utils.search_query_parser import saved_searches, set_saved_searches
from calibre.ebooks import BOOK_EXTENSIONS, check_ebook_format
from calibre.utils.magick.draw import save_cover_data_to
@ -1920,6 +1920,18 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
result.append(r)
return ' & '.join(result).replace('|', ',')
def _update_author_in_cache(self, id_, ss, final_authors):
self.conn.execute('UPDATE books SET author_sort=? WHERE id=?', (ss, id_))
self.data.set(id_, self.FIELD_MAP['authors'],
','.join([a.replace(',', '|') for a in final_authors]),
row_is_id=True)
self.data.set(id_, self.FIELD_MAP['author_sort'], ss, row_is_id=True)
aum = self.authors_with_sort_strings(id_, index_is_id=True)
self.data.set(id_, self.FIELD_MAP['au_map'],
':#:'.join([':::'.join((au.replace(',', '|'), aus)) for (au, aus) in aum]),
row_is_id=True)
def _set_authors(self, id, authors, allow_case_change=False):
if not authors:
authors = [_('Unknown')]
@ -1933,14 +1945,17 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
a = a.strip().replace(',', '|')
if not isinstance(a, unicode):
a = a.decode(preferred_encoding, 'replace')
aus = self.conn.get('SELECT id, name FROM authors WHERE name=?', (a,))
aus = self.conn.get('SELECT id, name, sort FROM authors WHERE name=?', (a,))
if aus:
aid, name = aus[0]
aid, name, sort = aus[0]
# Handle change of case
if name != a:
if allow_case_change:
self.conn.execute('''UPDATE authors
SET name=? WHERE id=?''', (a, aid))
ns = author_to_author_sort(a.replace('|', ','))
if strcmp(sort, ns) == 0:
sort = ns
self.conn.execute('''UPDATE authors SET name=?, sort=?
WHERE id=?''', (a, sort, aid))
case_change = True
else:
a = name
@ -1957,17 +1972,14 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
bks = self.conn.get('''SELECT book FROM books_authors_link
WHERE author=?''', (aid,))
books_to_refresh |= set([bk[0] for bk in bks])
for bk in books_to_refresh:
ss = self.author_sort_from_book(id, index_is_id=True)
aus = self.author_sort(bk, index_is_id=True)
if strcmp(aus, ss) == 0:
self._update_author_in_cache(bk, ss, final_authors)
# This can repeat what was done above in rare cases. Let it.
ss = self.author_sort_from_book(id, index_is_id=True)
self.conn.execute('UPDATE books SET author_sort=? WHERE id=?',
(ss, id))
self.data.set(id, self.FIELD_MAP['authors'],
','.join([a.replace(',', '|') for a in final_authors]),
row_is_id=True)
self.data.set(id, self.FIELD_MAP['author_sort'], ss, row_is_id=True)
aum = self.authors_with_sort_strings(id, index_is_id=True)
self.data.set(id, self.FIELD_MAP['au_map'],
':#:'.join([':::'.join((au.replace(',', '|'), aus)) for (au, aus) in aum]),
row_is_id=True)
self._update_author_in_cache(id, ss, final_authors)
return books_to_refresh
def set_authors(self, id, authors, notify=True, commit=True,
@ -2273,6 +2285,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
return []
return result
def get_author_id(self, author):
author = author.replace(',', '|')
result = self.conn.get('SELECT id FROM authors WHERE name=?',
(author,), all=False)
return result
def set_sort_field_for_author(self, old_id, new_sort, commit=True, notify=False):
self.conn.execute('UPDATE authors SET sort=? WHERE id=?', \
(new_sort.strip(), old_id))
@ -3038,7 +3056,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
'''
if prefix is None:
prefix = self.library_path
FIELDS = set(['title', 'authors', 'author_sort', 'publisher', 'rating',
FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher', 'rating',
'timestamp', 'size', 'tags', 'comments', 'series', 'series_index',
'uuid', 'pubdate', 'last_modified', 'identifiers'])
for x in self.custom_column_num_map:

View File

@ -19,7 +19,7 @@ Editing the metadata of one book at a time
Click the book you want to edit and then click the :guilabel:`Edit metadata` button or press the ``E`` key. A dialog opens that allows you to edit all aspects of the metadata. It has various features to make editing faster and more efficient. A list of the commonly used tips:
* You can click the button in between title and authors to swap them automatically.
* You can click the button next to author sort to automatically to have |app| automatically fill it from the author name.
* You can click the button next to author sort to have |app| automatically fill it in using the sort values stored with each author. Use the :guilabel:`Manage authors` dialog to see and change the authors' sort values. This dialog can be opened by clicking and holding the button next to author sort.
* You can click the button next to tags to use the Tag Editor to manage the tags associated with the book.
* The ISBN box will have a red background if you enter an invalid ISBN. It will be green for valid ISBNs
* The author sort box will be red if the author sort value differs from what |app| thinks it should be.

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2009-11-06 19:11+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: Afrikaans <af@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:34+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:34+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -866,59 +866,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -934,7 +934,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -942,7 +942,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-01-03 01:54+0000\n"
"Last-Translator: Amr Hesham <Unknown>\n"
"Language-Team: Arabic <ar@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:34+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:35+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121
@ -937,59 +937,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "جهاز أبل"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "التواصل عن طريق iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "تم الكشف عن جهاز ابل, يتم تشغيل iTunes, الرجاء الانتظار..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d من %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "تم"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1005,7 +1005,7 @@ msgstr ""
msgid "News"
msgstr "الأخبار"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1013,7 +1013,7 @@ msgstr "الأخبار"
msgid "Catalog"
msgstr "الفهرس"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "تواصل معا iTunes"

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-01-31 21:37+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: Asturian <ast@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:34+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:35+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -866,59 +866,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -934,7 +934,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -942,7 +942,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -6,14 +6,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre 0.4.51\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"PO-Revision-Date: 2011-03-30 01:18+0000\n"
"Last-Translator: Yassen Nikolov <Unknown>\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-05-02 10:13+0000\n"
"Last-Translator: airmaxbg <airmax_reg@abv.bg>\n"
"Language-Team: bg\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:35+0000\n"
"X-Launchpad-Export-Date: 2011-05-03 04:37+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"Generated-By: pygettext.py 1.5\n"
@ -193,13 +193,13 @@ msgstr "Основен"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148
msgid "Customize"
msgstr ""
msgstr "Персонализиране"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:156
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:41
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
msgid "Cannot configure"
msgstr ""
msgstr "Не може да се конфигурира"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
msgid "File type"
@ -234,7 +234,7 @@ msgstr "Предпочитания"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:609
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
msgid "Store"
msgstr ""
msgstr "Съхраняване"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:18
msgid ""
@ -271,6 +271,9 @@ msgid ""
"Textile references to images. The referenced images as well as the TXT file "
"are added to the archive."
msgstr ""
"Създаване на TXTZ архив когато TXT файл е внесъл съдържащи маркови или "
"текстилни справки към снимки. Съответните изображения както и TXT файлове се "
"добавят към архива."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:168
msgid "Extract cover from comic files"
@ -888,60 +891,60 @@ msgstr "Кеширай обложки от iTunes/iBooks"
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr "Разреши кеширане и показване на обложки от iTunes/iBooks"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple устройство"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Комуникирай с iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
"Apple устройство разпознато, стартиране на iTunes, моля изчакайте ..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d от %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "завършено"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -957,7 +960,7 @@ msgstr ""
msgid "News"
msgstr "Новини"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -965,7 +968,7 @@ msgstr "Новини"
msgid "Catalog"
msgstr "Каталог"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-12-11 02:29+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: Bengali <bn@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:35+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:36+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -861,59 +861,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -929,7 +929,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -937,7 +937,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-01-18 21:03+0000\n"
"Last-Translator: Senad Sopovic <Unknown>\n"
"Language-Team: Bosnian <bs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:35+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:36+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -861,59 +861,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple uređah"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "završeno"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -929,7 +929,7 @@ msgstr ""
msgid "News"
msgstr "Vijesti"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -937,7 +937,7 @@ msgstr "Vijesti"
msgid "Catalog"
msgstr "Katalog"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: ca\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"PO-Revision-Date: 2011-04-27 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-04-30 18:09+0000\n"
"Last-Translator: FerranRius <frius64@hotmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:36+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:37+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -546,7 +546,7 @@ msgstr "Llibres per al Kindle d'Amazon"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
msgid "Kindle books from Amazon.uk"
msgstr ""
msgstr "Llibres per al Kindle d'Amazon.uk"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
msgid "Ebooks for readers."
@ -602,15 +602,15 @@ msgstr "El vostre llibre. A la vostra manera."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
msgid "Feel every word"
msgstr ""
msgstr "Sentiu cada paraula"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
msgid "Foyles of London, online"
msgstr ""
msgstr "Foyles de Londres en línia"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
msgid "Kindle eBooks"
msgstr ""
msgstr "Llibres per al Kindle"
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
msgid "Conversion Input"
@ -936,20 +936,20 @@ 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:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Dispositiu Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Comunica't amb iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
"S'ha detectat un dispositiu Apple, s'està engegant l'iTunes, espereu ..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -958,28 +958,28 @@ 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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
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:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d de %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "s'ha acabat"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -989,7 +989,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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -997,7 +997,7 @@ 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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1013,7 +1013,7 @@ msgstr ""
msgid "News"
msgstr "Notícies"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1021,7 +1021,7 @@ msgstr "Notícies"
msgid "Catalog"
msgstr "Catàleg"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Comunica't amb l'iTunes"
@ -6172,11 +6172,11 @@ msgstr "Feu clic per obrir"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:123
msgid "Ids"
msgstr ""
msgstr "Identificadors"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
msgid "Book %s of <span class=\"series_name\">%s</span>"
msgstr ""
msgstr "Llibre %s de <span class=\"series_name\">%s</span>"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:144
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:978
@ -11542,7 +11542,7 @@ msgstr "Grandària (MB)"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
msgid "Modified"
msgstr ""
msgstr "Modificat"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:717
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
@ -11725,6 +11725,9 @@ 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 ""
"Fa que es tanqui qualsevol instància del calibre, si n'hi ha alguna. "
"Vigileu, ja que si hi ha tasques en execució s'interrompran sense cap "
"confirmació."
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:69
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:678
@ -12965,19 +12968,19 @@ msgstr "Canvia el tipus de &lletra (caldrà reiniciar)"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:210
msgid "Main Interface"
msgstr ""
msgstr "Interfície principal"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
msgid "Select displayed metadata"
msgstr ""
msgstr "Selecciona les metadades que es visualitzen"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
msgid "Move up"
msgstr ""
msgstr "Desplaça cap amunt"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
msgid "Move down"
msgstr ""
msgstr "Desplaça cap avall"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
msgid "Use &Roman numerals for series"
@ -12988,6 +12991,8 @@ msgid ""
"Note that <b>comments</b> will always be displayed at the end, regardless of "
"the position you assign here."
msgstr ""
"Tingueu en compte que els <b>comentaris</b> 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:217
msgid "Tags browser category &partitioning method:"
@ -14282,11 +14287,11 @@ msgstr "Aplica els canvis que s'ha fet a l'ajustament"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:339
msgid "Delete current search"
msgstr ""
msgstr "Suprimeix la cerca actual"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
msgid "No search is selected"
msgstr ""
msgstr "No s'ha seleccionat cap cerca"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
msgid "The selected search will be <b>permanently deleted</b>. Are you sure?"
@ -14315,18 +14320,20 @@ msgid ""
"Save current search under the name shown in the box. Press and hold for a "
"pop-up options menu."
msgstr ""
"Desa la cerca actual amb el nom que hi ha al quadre. Premeu i manteniu per a "
"un menú d'opcions emergent."
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:458
msgid "Create saved search"
msgstr ""
msgstr "Crea una cerca per desar"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
msgid "Delete saved search"
msgstr ""
msgstr "Suprimeix la cerca desada"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
msgid "Manage saved searches"
msgstr ""
msgstr "Gestiona les cerques desades"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
msgid "*Current search"
@ -14438,31 +14445,31 @@ msgstr "No disponible"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py:51
msgid "Updating book cache"
msgstr ""
msgstr "S'està actualitzant la memòria cau de llibres"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:42
msgid "Checking last download date."
msgstr ""
msgstr "S'està comprovant la darrera data de descàrrega."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:48
msgid "Downloading book list from MobileRead."
msgstr ""
msgstr "S'està descarregant la llista de llibres des de MobileRead."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:61
msgid "Processing books."
msgstr ""
msgstr "S'està processant els llibres."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
msgid "%s of %s books processed."
msgstr ""
msgstr "S'ha processat %s de %s llibres."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/mobileread_plugin.py:62
msgid "Updating MobileRead book cache..."
msgstr ""
msgstr "S'està actualitzant la memòria cau de llibres MobileRead..."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:69
msgid "&Query:"
msgstr ""
msgstr "&Consulta:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:72
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:63
@ -14483,11 +14490,11 @@ msgstr "Cerca:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
msgid "&Price:"
msgstr ""
msgstr "&Preu:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
msgid "Titl&e/Author/Price ..."
msgstr ""
msgstr "Tít&ol/autor/preu..."
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
msgid "DRM"
@ -15973,7 +15980,7 @@ msgstr "buit"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
msgid "Invalid boolean query \"{0}\""
msgstr ""
msgstr "Consulta booleana no vàlida «{0}»"
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
msgid ""
@ -17192,6 +17199,8 @@ msgstr "La data de publicació"
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
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:48
msgid "The calibre internal id"

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-04-24 21:34+0000\n"
"Last-Translator: Marek Sušický <Unknown>\n"
"Language-Team: Czech <cs@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:36+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:37+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -903,19 +903,19 @@ msgstr "Ukládat obálky z iTunes/iBooks do mezipaměti"
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Zařízení Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Komunikovat s iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Nalezeno zařízení Apple, spouštění iTunes, čekejte..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -923,28 +923,28 @@ msgstr ""
"Nelze kopírovat knihy přímo z iDevice. Přetáhněte je z knihovny iTunes na "
"plochu a pak je přidejte do okna knihovny calibre."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Záznamy metadat v zařízení se aktualizují..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d z %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "dokončeno"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -954,7 +954,7 @@ msgstr ""
"Smazat pomocí aplikace iBooks.\n"
"Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -962,7 +962,7 @@ msgstr ""
"Některé obálky nelze převést.\n"
"Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -978,7 +978,7 @@ msgstr ""
msgid "News"
msgstr "Zprávy"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -986,7 +986,7 @@ msgstr "Zprávy"
msgid "Catalog"
msgstr "Katalog"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Komunikovat s iTunes."

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-12-19 12:26+0000\n"
"Last-Translator: Glenn <Unknown>\n"
"Language-Team: Danish <da@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:37+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -906,19 +906,19 @@ msgstr "Cache omslag fra iTunes/iBooks"
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple enhed"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Kommunikér med iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Apple-enhed fundet, starter iTunes, vent venligst..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -926,28 +926,28 @@ msgstr ""
"Kan ikke kopiere bøger direkte fra iDevice. Træk fra iTunes-bibliotek til "
"skrivebord, tilføj herefter til calibres biblioteksvindue."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Opdaterer enhed metadata listen..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d af %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "afsluttet"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -957,7 +957,7 @@ msgstr ""
"Sletter ved at anvende iBooks app.\n"
"Klik 'Show Details' for en liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -965,7 +965,7 @@ msgstr ""
"Nogle omslagsdele kunne ikke konverteres.\n"
"Klik 'Show Details' for en liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -981,7 +981,7 @@ msgstr ""
msgid "News"
msgstr "Nyheder"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -989,7 +989,7 @@ msgstr "Nyheder"
msgid "Catalog"
msgstr "Katalog"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Kommunikér med iTunes."

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"PO-Revision-Date: 2011-04-29 15:02+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-05-01 08:37+0000\n"
"Last-Translator: Armin Geller <Unknown>\n"
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:39+0000\n"
"X-Launchpad-Export-Date: 2011-05-02 04:34+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"Generated-By: pygettext.py 1.5\n"
@ -542,7 +542,7 @@ msgstr "Kindle Bücher von Amazone"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
msgid "Kindle books from Amazon.uk"
msgstr ""
msgstr "Kindle Bücher fon Amazon.uk"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
msgid "Ebooks for readers."
@ -932,19 +932,19 @@ msgstr ""
"Ermöglicht das Zwischenspeichern und anzeigen von Umschlägen aus "
"iTunes/iBooks"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple- Gerät"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Kommunikation mit iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Gerät von Apple entdeckt, starte iTunes, einen Moment bitte..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -952,28 +952,28 @@ msgstr ""
"Kann Bücher nicht direkt vom iDevice kopieren. Ziehen Sie sie aus der iTunes "
"Bibliothek auf den Desktop, fügen Sie sie dann Calibres Bibliothek hinzu."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Aktualisiere die Liste der Geräte-Metadaten..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d von %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "abgeschlossen"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -983,7 +983,7 @@ msgstr ""
"Zum Löschen die iBooks App verwenden.\n"
"Klicken Sie 'Zeige Details' für eine Liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -991,7 +991,7 @@ msgstr ""
"Einige Umschlagbilder konnten nicht konvertiert werden.\n"
"Klicken Sie 'Zeige Details' für eine Liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1007,7 +1007,7 @@ msgstr ""
msgid "News"
msgstr "Nachrichten"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1015,7 +1015,7 @@ msgstr "Nachrichten"
msgid "Catalog"
msgstr "Katalog"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Kommunikation mit iTunes."
@ -4771,7 +4771,7 @@ msgstr "Anmerkungen abrufen (experimentell)"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:56
msgid "Not supported"
msgstr ""
msgstr "Nicht unterstützt"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:57
msgid "Fetching annotations is not supported for this device"
@ -5539,7 +5539,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:545
msgid "Applying changed metadata"
msgstr ""
msgstr "Geänerte Metadaten übernehmen"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:606
msgid "Some failures"
@ -8571,11 +8571,11 @@ msgstr "Format"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:50
msgid "Existing"
msgstr ""
msgstr "Bestehende"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:51
msgid "Convertible"
msgstr ""
msgstr "konvertierbar"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:43
msgid "Choose location for calibre library"
@ -9185,26 +9185,29 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:587
msgid "Delete saved search/replace"
msgstr ""
msgstr "Löschen der gespeicherten Suchen/Ersetzen-Aktion"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:991
msgid "The selected saved search/replace will be deleted. Are you sure?"
msgstr ""
"Die ausgewählte Suchen/Ersetzen-Aktion wird gelöscht. Sind Sie sicher?"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1008
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1016
msgid "Save search/replace"
msgstr ""
msgstr "Speichern der Suchen/Ersetzen-Aktion"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1009
msgid "Search/replace name:"
msgstr ""
msgstr "Suchen/Ersetzen-Aktion Name:"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1017
msgid ""
"That saved search/replace already exists and will be overwritten. Are you "
"sure?"
msgstr ""
"die gesicherte Suchen/Ersetzen-Aktion existiert schon und wird ersetzt. Sind "
"Sie sicher?"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:524
msgid "Edit Meta information"
@ -11470,7 +11473,7 @@ msgstr "Größe (MB)"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
msgid "Modified"
msgstr ""
msgstr "Geändert"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:717
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
@ -11809,15 +11812,15 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:476
msgid "Set metadata for the book from the selected format"
msgstr ""
msgstr "Einstellen der Metadaten vom ausgewählten Buchformat"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:483
msgid "Add a format to this book"
msgstr ""
msgstr "Hinzufügen eines Formates zu dem Buch"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:490
msgid "Remove the selected format from this book"
msgstr ""
msgstr "Löschen des ausgewählten Buchformates"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:755
msgid "Invalid cover"
@ -11946,11 +11949,11 @@ msgstr "Herunterladen von Metadaten gestartet"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:111
msgid "(Failed metadata)"
msgstr ""
msgstr "(Fehlerhafte Metadaten)"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:113
msgid "(Failed cover)"
msgstr ""
msgstr "(Fehlerhafter Umschlag)"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:190
msgid "Downloaded %d of %d"

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-03-04 12:33+0000\n"
"Last-Translator: cosmix <Unknown>\n"
"Language-Team: Greek <el@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:40+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:40+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -907,59 +907,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Συσκευή Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Επικοινωνία με iTunes/iBook"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Συσκευή της Apple εντοπίστηκε, έναρξη iTunes, παρακαλώ περιμένετε..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Ενημέρωση καταλόγου μεταδεδομένων της συσκευής"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d από %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "ολοκληρώθηκε"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -975,7 +975,7 @@ msgstr ""
msgid "News"
msgstr "Νέα"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -983,7 +983,7 @@ msgstr "Νέα"
msgid "Catalog"
msgstr "Κατάλογος"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Επικοινωνία με το iTunes"

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-05-21 07:30+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: English (Australia) <en_AU@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:51+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:52+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -861,59 +861,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -929,7 +929,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -937,7 +937,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-02-27 02:43+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: English (Canada) <en_CA@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:52+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:53+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -870,59 +870,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -938,7 +938,7 @@ msgstr ""
msgid "News"
msgstr "News"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -946,7 +946,7 @@ msgstr "News"
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-02-15 08:46+0000\n"
"Last-Translator: Vladimir Oka <Unknown>\n"
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:51+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:51+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -903,19 +903,19 @@ msgstr "Cache covers from iTunes/iBooks"
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple device"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Communicate with iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Apple device detected, launching iTunes, please wait ..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -923,28 +923,28 @@ msgstr ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Updating device metadata listing..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d of %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "finished"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -954,7 +954,7 @@ msgstr ""
"Delete using the iBooks app.\n"
"Click 'Show Details' for a list."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -962,7 +962,7 @@ msgstr ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -978,7 +978,7 @@ msgstr ""
msgid "News"
msgstr "News"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -986,7 +986,7 @@ msgstr "News"
msgid "Catalog"
msgstr "Catalogue"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Communicate with iTunes."

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-01-09 00:03+0000\n"
"Last-Translator: Kalle Kniivilä <kalle@kniivila.net>\n"
"Language-Team: Esperanto <eo@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:37+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:38+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -897,59 +897,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -965,7 +965,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -973,7 +973,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: es\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"PO-Revision-Date: 2011-04-23 10:33+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-05-02 12:20+0000\n"
"Last-Translator: Jellby <Unknown>\n"
"Language-Team: Spanish\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:47+0000\n"
"X-Launchpad-Export-Date: 2011-05-03 04:38+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
@ -566,7 +566,7 @@ msgstr "Libros de Amazon para Kindle"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
msgid "Kindle books from Amazon.uk"
msgstr ""
msgstr "Libros Kindle de Amazon.uk"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
msgid "Ebooks for readers."
@ -622,15 +622,15 @@ msgstr "Su libro. Su modo."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
msgid "Feel every word"
msgstr ""
msgstr "Detectar todas las palabras"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
msgid "Foyles of London, online"
msgstr ""
msgstr "Foyles de Londres, en línea"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
msgid "Kindle eBooks"
msgstr ""
msgstr "Libros Kindle"
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
msgid "Conversion Input"
@ -941,20 +941,20 @@ msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
"Actívelo para mostrar y guardar en caché las portadas de iTunes o iBooks"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Dispositivo Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Comunicarse con iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
"Dispositivo Apple detectado. Iniciando iTunes. Un momento, por favor..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -963,28 +963,28 @@ msgstr ""
"la biblioteca de iTunes al escritorio, y entonces añadelos en la ventana "
"Biblioteca."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Actualizando listado de meta datos..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d de %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "terminado"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -994,7 +994,7 @@ msgstr ""
"Bórrelos utilizando la aplicación iBooks.\n"
"Pulse \"Mostrar Detalles\" para ver una lista."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -1002,7 +1002,7 @@ msgstr ""
"Algunas portadas no se pudieron convertir.\n"
"Pulse en \"Mostrar detalles\" para ver una lista."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1018,7 +1018,7 @@ msgstr ""
msgid "News"
msgstr "Noticias"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1026,7 +1026,7 @@ msgstr "Noticias"
msgid "Catalog"
msgstr "Catálogo"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Comunicarse con iTunes."
@ -6203,11 +6203,11 @@ msgstr "Clic para abrir"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:123
msgid "Ids"
msgstr ""
msgstr "Id."
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
msgid "Book %s of <span class=\"series_name\">%s</span>"
msgstr ""
msgstr "Libro %s de <span class=\"series_name\">%s</span>"
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:144
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:978
@ -11548,7 +11548,7 @@ msgstr "Tamaño (MB)"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
msgid "Modified"
msgstr ""
msgstr "Modificado"
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:717
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
@ -11731,6 +11731,8 @@ 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 ""
"Cierra cualquier sesión de calibre que pueda estar abierta. Tenga cuidado, "
"porque si hay tareas en ejecución serán abortadas,"
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:69
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:678
@ -12968,19 +12970,19 @@ msgstr "Cambiar &tipo de letra (requiere reinicio)"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:210
msgid "Main Interface"
msgstr ""
msgstr "Interfaz principal"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
msgid "Select displayed metadata"
msgstr ""
msgstr "Seleccionar metadatos mostrados"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
msgid "Move up"
msgstr ""
msgstr "Mover hacia arriba"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
msgid "Move down"
msgstr ""
msgstr "Mover hacia abajo"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
msgid "Use &Roman numerals for series"
@ -12991,6 +12993,8 @@ msgid ""
"Note that <b>comments</b> will always be displayed at the end, regardless of "
"the position you assign here."
msgstr ""
"Los <b>comentarios</b> se mostrarán siempre al final, independientemente de "
"la posición que se asigne aquí."
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:217
msgid "Tags browser category &partitioning method:"
@ -14270,11 +14274,11 @@ msgstr "Aplicar los cambios realizados en este ajuste"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:339
msgid "Delete current search"
msgstr ""
msgstr "Borrar búsqueda actual"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
msgid "No search is selected"
msgstr ""
msgstr "No hay ninguna búsqueda seleccionada"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
msgid "The selected search will be <b>permanently deleted</b>. Are you sure?"
@ -14303,18 +14307,20 @@ msgid ""
"Save current search under the name shown in the box. Press and hold for a "
"pop-up options menu."
msgstr ""
"Guarda la búsqueda actual con el nombre que se muestra en el cuadro. "
"Mantenga el botón pulsado para obtener un menú emergente de opciones."
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:458
msgid "Create saved search"
msgstr ""
msgstr "Crear búsqueda guardada"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
msgid "Delete saved search"
msgstr ""
msgstr "Borrar búsqueda guardada"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
msgid "Manage saved searches"
msgstr ""
msgstr "Administrar búsquedas guardadas"
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
msgid "*Current search"
@ -14426,31 +14432,31 @@ msgstr "No disponible"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py:51
msgid "Updating book cache"
msgstr ""
msgstr "Actualizando el caché de libros"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:42
msgid "Checking last download date."
msgstr ""
msgstr "Comprobando la fecha de la última descarga."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:48
msgid "Downloading book list from MobileRead."
msgstr ""
msgstr "Descargando lista de libros de MobileRead."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:61
msgid "Processing books."
msgstr ""
msgstr "Procesando libros"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
msgid "%s of %s books processed."
msgstr ""
msgstr "%s de %s libros procesados."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/mobileread_plugin.py:62
msgid "Updating MobileRead book cache..."
msgstr ""
msgstr "Actualizando el caché de libros de MobileRead..."
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:69
msgid "&Query:"
msgstr ""
msgstr "&Consulta:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:72
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:63
@ -14471,11 +14477,11 @@ msgstr "Buscar:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
msgid "&Price:"
msgstr ""
msgstr "&Precio:"
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
msgid "Titl&e/Author/Price ..."
msgstr ""
msgstr "&Título/autor/precio..."
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
msgid "DRM"
@ -15951,7 +15957,7 @@ msgstr "empty"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
msgid "Invalid boolean query \"{0}\""
msgstr ""
msgstr "Consulta booleana \"{0}\" no válida"
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
msgid ""
@ -17173,6 +17179,7 @@ msgstr "La fecha de publicación"
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
msgid "The date when the metadata for this book record was last modified"
msgstr ""
"La fecha en que se modificaron por última vez los metadatos de este libro."
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48
msgid "The calibre internal id"

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-03-02 12:04+0000\n"
"Last-Translator: gorkaazk <gorkaazkarate@euskalerria.org>\n"
"Language-Team: Basque <eu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:35+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:35+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -925,21 +925,21 @@ msgstr "iTunes/iBooks horietatik cache-azalak"
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Apple markako gailua"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "iTunes/iBooks horiekin komunikatu."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
"Apple enpresako gailua detektatu egin da, iTunes-en nabigatzen ari da, "
"mesedez itxaron..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -947,28 +947,28 @@ msgstr ""
"Ezin dira liburuak zuzenean gailu elektronikotik kopiatu. Herrestan eraman "
"iTunes Liburutegitik mahaigainera, gero itsatsi calibre liburutegiko leihoan."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Irakurgailuaren zerrendatze metadatuak eguneratzen..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d-tik %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "amaiturik"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -978,7 +978,7 @@ msgstr ""
"Ezabatu \"iBooks app\" erabiliz.\n"
"Egin ezazu klik 'Zehaztasunak erakutsi' zerrenda ikusteko."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -986,7 +986,7 @@ msgstr ""
"Azalaren arte lan batzuk ezin izan dira bihurtu.\n"
"Egin ezazu klik 'Zehaztasunak erakutsi' zerrenda ikusteko."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1002,7 +1002,7 @@ msgstr ""
msgid "News"
msgstr "Albisteak"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1010,7 +1010,7 @@ msgstr "Albisteak"
msgid "Catalog"
msgstr "Katalogoa"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Komunikatu iTunes horrekin ."

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-04-09 04:20+0000\n"
"Last-Translator: Milad Naseri <m.m.naseri@gmail.com>\n"
"Language-Team: Persian <fa@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:44+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:45+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -882,59 +882,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -950,7 +950,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -958,7 +958,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"PO-Revision-Date: 2010-10-08 20:55+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-05-04 13:38+0000\n"
"Last-Translator: Aleksi Kinnunen <Unknown>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:38+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Launchpad-Export-Date: 2011-05-05 04:37+0000\n"
"X-Generator: Launchpad (build 12959)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@ -199,7 +199,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:41
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
msgid "Cannot configure"
msgstr ""
msgstr "Ei voida määrittää"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
msgid "File type"
@ -359,7 +359,7 @@ msgstr "Lisää/poista sarakkeita calibren kirjaluetteloon"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:916
msgid "Toolbar"
msgstr ""
msgstr "Työkalurivi"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:922
msgid ""
@ -530,11 +530,11 @@ msgstr "Sekalaiset kehittyneet asetukset"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1109
msgid "Kindle books from Amazon"
msgstr ""
msgstr "Amazonin Kindle-kirjat"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
msgid "Kindle books from Amazon.uk"
msgstr ""
msgstr "Amazon.uk:in Kindle-kirjat"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
msgid "Ebooks for readers."
@ -542,7 +542,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1124
msgid "Books, Textbooks, eBooks, Toys, Games and More."
msgstr ""
msgstr "Kirjoja, oppikirjoja, e-kirjoja, leluja, pelejä ja paljon muuta."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1129
msgid "Publishers of fine books."
@ -562,7 +562,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1149
msgid "Read anywhere."
msgstr ""
msgstr "Lue missä vain."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1154
msgid "The first producer of free ebooks."
@ -570,11 +570,11 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1159
msgid "eReading: anytime. anyplace."
msgstr ""
msgstr "eReading: missä vain, milloin vain."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1164
msgid "The best ebooks at the best price: free!"
msgstr ""
msgstr "Parhaat e-kirjat parhaaseen hintaan: ilmaiseksi!"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1169
msgid "Ebooks handcrafted with the utmost care"
@ -586,7 +586,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1179
msgid "Your ebook. Your way."
msgstr ""
msgstr "Sinun e-kirjasi. Sinun tavallasi."
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
msgid "Feel every word"
@ -598,7 +598,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
msgid "Kindle eBooks"
msgstr ""
msgstr "Kindlen e-kirjat"
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
msgid "Conversion Input"
@ -744,6 +744,8 @@ msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
"Tarkoitettu Samsung Galaxy Tabille ja muille vastaaville tableteille joiden "
"resoluutio on 600x1280."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:472
msgid "This profile is intended for the Kobo Reader."
@ -907,46 +909,46 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Kommunikoi iTunesin/iBooksin kanssa"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Apple-laite havaittu, ladataan iTunes, odota hetki..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Päivittää laitteen metatietolistausta..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d %d:stä"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "Valmis"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -956,7 +958,7 @@ msgstr ""
"Poista iBooks-sovelluksella.\n"
"Valitse 'Näytä yksityiskohdat' nähdäksesi listan."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -964,7 +966,7 @@ msgstr ""
"Osaa kansitaiteesta ei voitu kääntää.\n"
"Valitse 'Näytä yksityiskohdat' nähdäksesi listan."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -980,7 +982,7 @@ msgstr ""
msgid "News"
msgstr "Uutiset"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -988,7 +990,7 @@ msgstr "Uutiset"
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Kommunikoi iTunesin kanssa."

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2010-06-11 18:48+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: Faroese <fo@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:38+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:38+0000\n"
"X-Generator: Launchpad (build 12758)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@ -861,59 +861,59 @@ msgstr ""
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
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:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
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:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
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:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -929,7 +929,7 @@ msgstr ""
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -937,7 +937,7 @@ msgstr ""
msgid "Catalog"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr ""

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre 0.4.22\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-04-29 12:01+0000\n"
"Last-Translator: sengian <Unknown>\n"
"Language-Team: Français <kde-i18n-doc@kde.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:38+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:39+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"X-Poedit-Bookmarks: 1177,1104,-1,-1,-1,-1,-1,-1,-1,-1\n"
"Generated-By: pygettext.py 1.5\n"
@ -940,19 +940,19 @@ msgstr ""
"Activer la mise en cache et l'affichage des couvertures provenant de "
"iTunes/iBooks"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Appareil Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Communiquer avec iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr "Appareil Apple détecté, lancement d'iTunes, veuillez patienter..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -961,28 +961,28 @@ msgstr ""
"le bureau à partir de la bibliothèque, puis ajouter à la fenêtre de la "
"bibliothèque Calibre."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Mise à jour de la liste des métadonnées de l'appareil..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d sur %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "Terminé"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -992,7 +992,7 @@ msgstr ""
"Les supprimer en utilisant l'application iBooks.\n"
"Cliquer 'Afficher détails' pour obtenir la liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -1000,7 +1000,7 @@ msgstr ""
"Certaines illustrations de couverture n'ont pu être converties.\n"
"Cliquer sur 'Afficher Détails' pour une liste."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1016,7 +1016,7 @@ msgstr ""
msgid "News"
msgstr "Informations"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1024,7 +1024,7 @@ msgstr "Informations"
msgid "Catalog"
msgstr "Catalogue"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Communiquer avec iTunes"

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-04-29 18:21+0000\n"
"POT-Creation-Date: 2011-04-30 16:30+0000\n"
"PO-Revision-Date: 2011-04-07 18:57+0000\n"
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
"Language-Team: dev@gl.openoffice.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-04-30 04:39+0000\n"
"X-Launchpad-Export-Date: 2011-05-01 04:40+0000\n"
"X-Generator: Launchpad (build 12758)\n"
"Language: gl\n"
@ -934,20 +934,20 @@ msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
"Actíveo para amosar e gardar en caché as portadas de iTunes ou iBooks"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:176
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
msgid "Apple device"
msgstr "Dispositivo Apple"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:178
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Communicate with iTunes/iBooks."
msgstr "Comunicar con iTunes/iBooks."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:190
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
"Detectouse un dispositivo de Apple. Estase a iniciar o iTunes, agarde..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid ""
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
"desktop, then add to calibre's Library window."
@ -956,28 +956,28 @@ msgstr ""
"biblioteca de iTunes ao escritorio, e logo, poderá engadilos na xanela "
"Biblioteca de Calibre."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
msgid "Updating device metadata listing..."
msgstr "Actualizando a relación de metadatos..."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
msgid "%d of %d"
msgstr "%d de %d"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr "rematado"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
@ -987,7 +987,7 @@ msgstr ""
"Eliminar co aplicativo do iBooks\n"
"Premer «Amosar detalles» para obter unha lista."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
msgid ""
"Some cover art could not be converted.\n"
"Click 'Show Details' for a list."
@ -995,7 +995,7 @@ msgstr ""
"Algunhas cubertas non se converteron. \n"
"Prema «Amosar detalles» para relacionalas."
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2664
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2666
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@ -1011,7 +1011,7 @@ msgstr ""
msgid "News"
msgstr "Noticias"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2665
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2667
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
@ -1019,7 +1019,7 @@ msgstr "Noticias"
msgid "Catalog"
msgstr "Catálogo"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2986
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2988
msgid "Communicate with iTunes."
msgstr "Comunicar con iTunes."

Some files were not shown because too many files have changed in this diff Show More