mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Merge + correct log warning in Bibtex catalog
This commit is contained in:
commit
b143be8c2c
@ -30,3 +30,4 @@ nbproject/
|
||||
.project
|
||||
.pydevproject
|
||||
.settings/
|
||||
*.DS_Store
|
||||
|
@ -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
|
||||
|
||||
|
@ -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')]
|
||||
|
@ -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' <a href="http://www.frazpc.pl/[^>]*?">(Skomentuj|Komentarz(e)?\([0-9]*\))</a> \|', 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' ]
|
||||
|
@ -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[^>]*> </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: '')]
|
||||
]
|
||||
|
BIN
recipes/icons/replicavedetelor.png
Normal file
BIN
recipes/icons/replicavedetelor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 709 B |
BIN
recipes/icons/rzeczpospolita.png
Normal file
BIN
recipes/icons/rzeczpospolita.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
recipes/icons/ziuaveche.png
Normal file
BIN
recipes/icons/ziuaveche.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 554 B |
36
recipes/korea_herald.recipe
Normal file
36
recipes/korea_herald.recipe
Normal 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'),
|
||||
]
|
53
recipes/replicavedetelor.recipe
Normal file
53
recipes/replicavedetelor.recipe
Normal 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)
|
||||
|
@ -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(',')
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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'
|
||||
|
@ -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","‘",string)
|
||||
|
||||
# Replace rsquo (\x92)
|
||||
fixed = re.sub("\x92","’",fixed)
|
||||
|
||||
# Replace ldquo (\x93)
|
||||
fixed = re.sub("\x93","“",fixed)
|
||||
|
||||
# Replace rdquo (\x94)
|
||||
fixed = re.sub("\x94","”",fixed)
|
||||
|
||||
# Replace ndash (\x96)
|
||||
fixed = re.sub("\x96","–",fixed)
|
||||
|
||||
# Replace mdash (\x97)
|
||||
fixed = re.sub("\x97","—",fixed)
|
||||
|
||||
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 '&'
|
||||
massaged = re.sub("&","&", 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(","," ·", 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" ·",
|
||||
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
|
||||
|
20
recipes/welt_der_physik.recipe
Normal file
20
recipes/welt_der_physik.recipe
Normal 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
53
recipes/ziuaveche.recipe
Normal 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)
|
@ -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);
|
||||
|
||||
|
@ -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>"
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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]
|
||||
|
||||
# }}}
|
||||
|
@ -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):
|
||||
|
@ -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] },
|
||||
|
@ -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:
|
||||
|
0
src/calibre/devices/boeye/__init__.py
Normal file
0
src/calibre/devices/boeye/__init__.py
Normal file
56
src/calibre/devices/boeye/driver.py
Normal file
56
src/calibre/devices/boeye/driver.py
Normal 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
|
@ -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]
|
||||
|
@ -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:
|
||||
|
@ -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']
|
||||
|
@ -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,
|
||||
'',
|
||||
'',
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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'):
|
||||
@ -71,4 +72,24 @@ class HTMLZInput(InputFormatPlugin):
|
||||
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
|
||||
|
@ -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
|
||||
|
||||
@ -80,9 +82,30 @@ class HTMLZOutput(OutputFormatPlugin):
|
||||
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)
|
||||
|
@ -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:
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
# }}}
|
||||
|
||||
|
@ -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.')),
|
||||
)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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')
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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'] = (
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 = []
|
||||
|
@ -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>&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&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->Advanced->Tweaks->Author sort name algorith
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>HistoryLineEdit</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>calibre/gui2/widgets.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
</ui>
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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><p>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 <b>and the editor windows you used to edit files in the epub</b>.</p><p>Rebuild the ePub, updating your calibre library.</p></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>&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><p>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 <b>and the editor windows you used to edit files in the epub</b>.</p><p>Rebuild the ePub, updating your calibre library.</p></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>&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>&Preview ePub</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/view.png</normaloff>:/images/view.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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):
|
||||
|
@ -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)
|
||||
|
@ -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>&Select all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="clear_all_button">
|
||||
<property name="text">
|
||||
<string>&Clear all</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -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
|
||||
|
@ -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,6 +43,8 @@ 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):
|
||||
|
92
src/calibre/gui2/store/beam_ebooks_de_plugin.py
Normal file
92
src/calibre/gui2/store/beam_ebooks_de_plugin.py
Normal 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
|
5
src/calibre/gui2/store/declined.txt
Normal file
5
src/calibre/gui2/store/declined.txt
Normal 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/)
|
80
src/calibre/gui2/store/epubbuy_de_plugin.py
Normal file
80
src/calibre/gui2/store/epubbuy_de_plugin.py
Normal 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
|
@ -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
|
||||
|
@ -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():
|
||||
|
@ -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 &external browser</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QSplitter" name="splitter_2">
|
||||
|
@ -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)
|
||||
|
76
src/calibre/gui2/store/weightless_books_plugin.py
Normal file
76
src/calibre/gui2/store/weightless_books_plugin.py
Normal 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
|
88
src/calibre/gui2/store/wizards_tower_books_plugin.py
Normal file
88
src/calibre/gui2/store/wizards_tower_books_plugin.py
Normal 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
|
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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
@ -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."
|
||||
|
||||
|
@ -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."
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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."
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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 ."
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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."
|
||||
|
||||
|
@ -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 ""
|
||||
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user