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
|
.project
|
||||||
.pydevproject
|
.pydevproject
|
||||||
.settings/
|
.settings/
|
||||||
|
*.DS_Store
|
||||||
|
@ -19,6 +19,13 @@
|
|||||||
# new recipes:
|
# new recipes:
|
||||||
# - title:
|
# - 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
|
- version: 0.7.59
|
||||||
date: 2011-04-30
|
date: 2011-04-30
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ class AdvancedUserRecipe1301860159(BasicNewsRecipe):
|
|||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'en_EN'
|
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
keep_only_tags = [dict(name='div', attrs={'class':'modSectionTd2'})]
|
keep_only_tags = [dict(name='div', attrs={'class':'modSectionTd2'})]
|
||||||
remove_tags = [dict(name='a'),dict(name='hr')]
|
remove_tags = [dict(name='a'),dict(name='hr')]
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = u'2010, Tomasz Dlugosz <tomek3d@gmail.com>'
|
__copyright__ = u'2010-2011, Tomasz Dlugosz <tomek3d@gmail.com>'
|
||||||
'''
|
'''
|
||||||
frazpc.pl
|
frazpc.pl
|
||||||
'''
|
'''
|
||||||
@ -19,17 +19,20 @@ class FrazPC(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
|
||||||
feeds = [(u'Aktualno\u015bci', u'http://www.frazpc.pl/feed'), (u'Recenzje', u'http://www.frazpc.pl/kat/recenzje-2/feed') ]
|
feeds = [
|
||||||
|
(u'Aktualno\u015bci', u'http://www.frazpc.pl/feed/aktualnosci'),
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'FRAZ_CONTENT'})]
|
(u'Artyku\u0142y', u'http://www.frazpc.pl/feed/artykuly')
|
||||||
|
|
||||||
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: '')]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
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' ]
|
remove_attributes = [ 'width', 'height' ]
|
||||||
|
@ -21,14 +21,19 @@ class Fronda(BasicNewsRecipe):
|
|||||||
|
|
||||||
feeds = [(u'Infformacje', u'http://fronda.pl/news/feed')]
|
feeds = [(u'Infformacje', u'http://fronda.pl/news/feed')]
|
||||||
|
|
||||||
keep_only_tags = [dict(name='h1', attrs={'class':'big'}),
|
keep_only_tags = [dict(name='h2', attrs={'class':'news_title'}),
|
||||||
dict(name='ul', attrs={'class':'about clear'}),
|
dict(name='div', attrs={'class':'naglowek_tresc'}),
|
||||||
dict(name='div', attrs={'class':'content'})]
|
dict(name='div', attrs={'id':'czytaj'}) ]
|
||||||
|
|
||||||
|
remove_tags = [dict(name='a', attrs={'class':'print'})]
|
||||||
|
|
||||||
preprocess_regexps = [
|
preprocess_regexps = [
|
||||||
(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
|
(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'<p><a href="http://fronda.pl/pasaz">.*</a></p>', lambda match: ''),
|
||||||
(r'<h3><strong>W.* lektury.*</a></p></div>', lambda match: '</div>'),
|
(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):
|
class RzeczpospolitaRecipe(BasicNewsRecipe):
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__author__ = 'kwetal'
|
__author__ = u'kwetal and Tomasz Dlugosz'
|
||||||
language = 'pl'
|
language = 'pl'
|
||||||
version = 1
|
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 = {'class' : 'clr'}))
|
||||||
remove_tags.append(dict(name = 'div', attrs = {'id' : 'share_bottom'}))
|
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 = {'id' : 'copyright_law'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class' : 'more'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class' : 'editorPicks'}))
|
||||||
|
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
body {font-family: verdana, arial, helvetica, geneva, sans-serif ;}
|
body {font-family: verdana, arial, helvetica, geneva, sans-serif ;}
|
||||||
@ -48,6 +50,13 @@ class RzeczpospolitaRecipe(BasicNewsRecipe):
|
|||||||
.fot{font-size: x-small; color: #666666;}
|
.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):
|
def print_version(self, url):
|
||||||
start, sep, rest = url.rpartition('/')
|
start, sep, rest = url.rpartition('/')
|
||||||
forget, sep, index = rest.rpartition(',')
|
forget, sep, index = rest.rpartition(',')
|
||||||
|
@ -1,33 +1,33 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
|
||||||
__copyright__ = '2009, Gerhard Aigner <gerhard.aigner at gmail.com>'
|
|
||||||
|
|
||||||
|
|
||||||
import re
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class TelepolisNews(BasicNewsRecipe):
|
class TelepolisNews(BasicNewsRecipe):
|
||||||
title = u'Telepolis (News+Artikel)'
|
title = u'Telepolis (News+Artikel)'
|
||||||
__author__ = 'Gerhard Aigner'
|
__author__ = 'syntaxis'
|
||||||
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
||||||
description = 'News from telepolis'
|
description = 'News from Telepolis'
|
||||||
category = 'news'
|
category = 'news'
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
recursion = 0
|
recursion = 0
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
encoding = "utf-8"
|
encoding = "utf-8"
|
||||||
language = 'de_AT'
|
language = 'de'
|
||||||
|
|
||||||
|
|
||||||
use_embedded_content =False
|
|
||||||
remove_empty_feeds = True
|
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')]
|
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 + '"'
|
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):
|
def preprocess_html(self, soup):
|
||||||
mtag = '<meta http-equiv="Content-Type" content="text/html; charset=' + self.encoding + '">'
|
mtag = '<meta http-equiv="Content-Type" content="text/html; charset=' + self.encoding + '">'
|
||||||
soup.head.insert(0,mtag)
|
soup.head.insert(0,mtag)
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,8 @@ import re
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Time(BasicNewsRecipe):
|
class Time(BasicNewsRecipe):
|
||||||
|
recipe_disabled = ('This recipe has been disabled as TIME no longer'
|
||||||
|
' publish complete articles on the web.')
|
||||||
title = u'Time'
|
title = u'Time'
|
||||||
__author__ = 'Kovid Goyal and Sujata Raman'
|
__author__ = 'Kovid Goyal and Sujata Raman'
|
||||||
description = 'Weekly magazine'
|
description = 'Weekly magazine'
|
||||||
|
@ -7,13 +7,11 @@ usatoday.com
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, NavigableString, Tag
|
|
||||||
import re
|
|
||||||
|
|
||||||
class USAToday(BasicNewsRecipe):
|
class USAToday(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'USA Today'
|
title = 'USA Today'
|
||||||
__author__ = 'GRiker'
|
__author__ = 'Kovid Goyal'
|
||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
timefmt = ''
|
timefmt = ''
|
||||||
max_articles_per_feed = 20
|
max_articles_per_feed = 20
|
||||||
@ -31,7 +29,6 @@ class USAToday(BasicNewsRecipe):
|
|||||||
margin-bottom: 0em; \
|
margin-bottom: 0em; \
|
||||||
font-size: smaller;}\n \
|
font-size: smaller;}\n \
|
||||||
.articleBody {text-align: left;}\n '
|
.articleBody {text-align: left;}\n '
|
||||||
conversion_options = { 'linearize_tables' : True }
|
|
||||||
#simultaneous_downloads = 1
|
#simultaneous_downloads = 1
|
||||||
feeds = [
|
feeds = [
|
||||||
('Top Headlines', 'http://rssfeeds.usatoday.com/usatoday-NewsTopStories'),
|
('Top Headlines', 'http://rssfeeds.usatoday.com/usatoday-NewsTopStories'),
|
||||||
@ -47,63 +44,26 @@ class USAToday(BasicNewsRecipe):
|
|||||||
('Most Popular', 'http://rssfeeds.usatoday.com/Usatoday-MostViewedArticles'),
|
('Most Popular', 'http://rssfeeds.usatoday.com/Usatoday-MostViewedArticles'),
|
||||||
('Offbeat News', 'http://rssfeeds.usatoday.com/UsatodaycomOffbeat-TopStories'),
|
('Offbeat News', 'http://rssfeeds.usatoday.com/UsatodaycomOffbeat-TopStories'),
|
||||||
]
|
]
|
||||||
keep_only_tags = [dict(attrs={'class':[
|
keep_only_tags = [dict(attrs={'class':'story'})]
|
||||||
'byLine',
|
remove_tags = [
|
||||||
'inside-copy',
|
dict(attrs={'class':[
|
||||||
'inside-head',
|
'share',
|
||||||
'inside-head2',
|
'reprints',
|
||||||
'item',
|
'inline-h3',
|
||||||
'item-block',
|
'info-extras',
|
||||||
'photo-container',
|
'ppy-outer',
|
||||||
]}),
|
'ppy-caption',
|
||||||
dict(id=[
|
'comments',
|
||||||
'applyMainStoryPhoto',
|
'jump',
|
||||||
'permalink',
|
'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):
|
def get_masthead_url(self):
|
||||||
masthead = 'http://i.usatoday.net/mobile/_common/_images/565x73_usat_mobile.gif'
|
masthead = 'http://i.usatoday.net/mobile/_common/_images/565x73_usat_mobile.gif'
|
||||||
@ -115,321 +75,4 @@ class USAToday(BasicNewsRecipe):
|
|||||||
masthead = None
|
masthead = None
|
||||||
return masthead
|
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,
|
ret = execute_python_entrypoint(BASENAME, MODULE, FUNCTION,
|
||||||
stdout_redirect, stderr_redirect);
|
stdout_redirect, stderr_redirect);
|
||||||
|
|
||||||
|
if (stdout != NULL) fclose(stdout);
|
||||||
|
if (stderr != NULL) fclose(stderr);
|
||||||
|
|
||||||
DeleteFile(stdout_redirect);
|
DeleteFile(stdout_redirect);
|
||||||
DeleteFile(stderr_redirect);
|
DeleteFile(stderr_redirect);
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
__appname__ = u'calibre'
|
__appname__ = u'calibre'
|
||||||
numeric_version = (0, 7, 59)
|
numeric_version = (0, 8, 0)
|
||||||
__version__ = u'.'.join(map(unicode, numeric_version))
|
__version__ = u'.'.join(map(unicode, numeric_version))
|
||||||
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"
|
__author__ = u"Kovid Goyal <kovid@kovidgoyal.net>"
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ class CatalogPlugin(Plugin): # {{{
|
|||||||
['author_sort','authors','comments','cover','formats',
|
['author_sort','authors','comments','cover','formats',
|
||||||
'id','isbn','ondevice','pubdate','publisher','rating',
|
'id','isbn','ondevice','pubdate','publisher','rating',
|
||||||
'series_index','series','size','tags','timestamp',
|
'series_index','series','size','tags','timestamp',
|
||||||
'title','uuid'])
|
'title_sort','title','uuid'])
|
||||||
all_custom_fields = set(db.custom_field_keys())
|
all_custom_fields = set(db.custom_field_keys())
|
||||||
all_fields = all_std_fields.union(all_custom_fields)
|
all_fields = all_std_fields.union(all_custom_fields)
|
||||||
|
|
||||||
@ -607,6 +607,7 @@ class StoreBase(Plugin): # {{{
|
|||||||
supported_platforms = ['windows', 'osx', 'linux']
|
supported_platforms = ['windows', 'osx', 'linux']
|
||||||
author = 'John Schember'
|
author = 'John Schember'
|
||||||
type = _('Store')
|
type = _('Store')
|
||||||
|
minimum_calibre_version = (0, 8, 0)
|
||||||
|
|
||||||
actual_plugin = None
|
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.folder_device.driver import FOLDER_DEVICE_FOR_CONFIG
|
||||||
from calibre.devices.kobo.driver import KOBO
|
from calibre.devices.kobo.driver import KOBO
|
||||||
from calibre.devices.bambook.driver import BAMBOOK
|
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.library.catalog import CSV_XML, EPUB_MOBI, BIBTEX
|
||||||
from calibre.ebooks.epub.fix.unmanifested import Unmanifested
|
from calibre.ebooks.epub.fix.unmanifested import Unmanifested
|
||||||
@ -743,6 +744,8 @@ plugins += [
|
|||||||
EEEREADER,
|
EEEREADER,
|
||||||
NEXTBOOK,
|
NEXTBOOK,
|
||||||
ITUNES,
|
ITUNES,
|
||||||
|
BOEYE_BEX,
|
||||||
|
BOEYE_BDX,
|
||||||
USER_DEFINED,
|
USER_DEFINED,
|
||||||
]
|
]
|
||||||
plugins += [x for x in list(locals().values()) if isinstance(x, type) and \
|
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')
|
description = _('Kindle books from Amazon')
|
||||||
actual_plugin = 'calibre.gui2.store.amazon_plugin:AmazonKindleStore'
|
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):
|
class StoreAmazonUKKindleStore(StoreBase):
|
||||||
name = 'Amazon UK Kindle'
|
name = 'Amazon UK Kindle'
|
||||||
description = _('Kindle books from Amazon.uk')
|
description = _('Kindle books from Amazon.uk')
|
||||||
@ -1108,6 +1116,11 @@ class StoreBNStore(StoreBase):
|
|||||||
description = _('Books, Textbooks, eBooks, Toys, Games and More.')
|
description = _('Books, Textbooks, eBooks, Toys, Games and More.')
|
||||||
actual_plugin = 'calibre.gui2.store.bn_plugin:BNStore'
|
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):
|
class StoreBeWriteStore(StoreBase):
|
||||||
name = 'BeWrite Books'
|
name = 'BeWrite Books'
|
||||||
description = _('Publishers of fine books.')
|
description = _('Publishers of fine books.')
|
||||||
@ -1123,7 +1136,12 @@ class StoreEbookscomStore(StoreBase):
|
|||||||
description = _('The digital bookstore.')
|
description = _('The digital bookstore.')
|
||||||
actual_plugin = 'calibre.gui2.store.ebooks_com_plugin:EbookscomStore'
|
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'
|
name = 'eHarlequin'
|
||||||
description = _('entertain, enrich, inspire.')
|
description = _('entertain, enrich, inspire.')
|
||||||
actual_plugin = 'calibre.gui2.store.eharlequin_plugin:EHarlequinStore'
|
actual_plugin = 'calibre.gui2.store.eharlequin_plugin:EHarlequinStore'
|
||||||
@ -1133,6 +1151,11 @@ class StoreFeedbooksStore(StoreBase):
|
|||||||
description = _('Read anywhere.')
|
description = _('Read anywhere.')
|
||||||
actual_plugin = 'calibre.gui2.store.feedbooks_plugin:FeedbooksStore'
|
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):
|
class StoreGutenbergStore(StoreBase):
|
||||||
name = 'Project Gutenberg'
|
name = 'Project Gutenberg'
|
||||||
description = _('The first producer of free ebooks.')
|
description = _('The first producer of free ebooks.')
|
||||||
@ -1168,22 +1191,23 @@ class StoreWaterstonesUKStore(StoreBase):
|
|||||||
description = _('Feel every word')
|
description = _('Feel every word')
|
||||||
actual_plugin = 'calibre.gui2.store.waterstones_uk_plugin:WaterstonesUKStore'
|
actual_plugin = 'calibre.gui2.store.waterstones_uk_plugin:WaterstonesUKStore'
|
||||||
|
|
||||||
class StoreFoylesUKStore(StoreBase):
|
class StoreWeightlessBooksStore(StoreBase):
|
||||||
name = 'Foyles UK'
|
name = 'Weightless Books'
|
||||||
description = _('Foyles of London, online')
|
description = '(e)Books That Don\'t Weigh You Down'
|
||||||
actual_plugin = 'calibre.gui2.store.foyles_uk_plugin:FoylesUKStore'
|
actual_plugin = 'calibre.gui2.store.weightless_books_plugin:WeightlessBooksStore'
|
||||||
|
|
||||||
class AmazonDEKindleStore(StoreBase):
|
class StoreWizardsTowerBooksStore(StoreBase):
|
||||||
name = 'Amazon DE Kindle'
|
name = 'Wizards Tower Books'
|
||||||
description = _('Kindle eBooks')
|
description = 'Wizard\'s Tower Press'
|
||||||
actual_plugin = 'calibre.gui2.store.amazon_de_plugin:AmazonDEKindleStore'
|
actual_plugin = 'calibre.gui2.store.wizards_tower_books_plugin:WizardsTowerBooksStore'
|
||||||
|
|
||||||
plugins += [StoreAmazonKindleStore, AmazonDEKindleStore, StoreAmazonUKKindleStore,
|
plugins += [StoreAmazonKindleStore, StoreAmazonDEKindleStore, StoreAmazonUKKindleStore,
|
||||||
StoreBaenWebScriptionStore, StoreBNStore,
|
StoreBaenWebScriptionStore, StoreBNStore,
|
||||||
StoreBeWriteStore, StoreDieselEbooksStore, StoreEbookscomStore,
|
StoreBeamEBooksDEStore, StoreBeWriteStore,
|
||||||
StoreEHarlequinStoretore, StoreFeedbooksStore,
|
StoreDieselEbooksStore, StoreEbookscomStore, StoreEPubBuyDEStore,
|
||||||
|
StoreEHarlequinStore, StoreFeedbooksStore,
|
||||||
StoreFoylesUKStore, StoreGutenbergStore, StoreKoboStore, StoreManyBooksStore,
|
StoreFoylesUKStore, StoreGutenbergStore, StoreKoboStore, StoreManyBooksStore,
|
||||||
StoreMobileReadStore, StoreOpenLibraryStore, StoreSmashwordsStore,
|
StoreMobileReadStore, StoreOpenLibraryStore, StoreSmashwordsStore,
|
||||||
StoreWaterstonesUKStore]
|
StoreWaterstonesUKStore, StoreWeightlessBooksStore, StoreWizardsTowerBooksStore]
|
||||||
|
|
||||||
# }}}
|
# }}}
|
||||||
|
@ -92,8 +92,7 @@ def restore_plugin_state_to_default(plugin_or_name):
|
|||||||
config['enabled_plugins'] = ep
|
config['enabled_plugins'] = ep
|
||||||
|
|
||||||
default_disabled_plugins = set([
|
default_disabled_plugins = set([
|
||||||
'Douban Books', 'Douban.com covers', 'Nicebooks', 'Nicebooks covers',
|
'Overdrive',
|
||||||
'Fictionwise', 'Kent District Library'
|
|
||||||
])
|
])
|
||||||
|
|
||||||
def is_disabled(plugin):
|
def is_disabled(plugin):
|
||||||
|
@ -62,7 +62,7 @@ class ANDROID(USBMS):
|
|||||||
0x502 : { 0x3203 : [0x0100]},
|
0x502 : { 0x3203 : [0x0100]},
|
||||||
|
|
||||||
# Dell
|
# Dell
|
||||||
0x413c : { 0xb007 : [0x0100, 0x0224]},
|
0x413c : { 0xb007 : [0x0100, 0x0224, 0x0226]},
|
||||||
|
|
||||||
# LG
|
# LG
|
||||||
0x1004 : { 0x61cc : [0x100], 0x61ce : [0x100], 0x618e : [0x226] },
|
0x1004 : { 0x61cc : [0x100], 0x61ce : [0x100], 0x618e : [0x226] },
|
||||||
|
@ -203,9 +203,11 @@ class ITUNES(DriverBase):
|
|||||||
# 0x1294 iPhone 3GS
|
# 0x1294 iPhone 3GS
|
||||||
# 0x1297 iPhone 4
|
# 0x1297 iPhone 4
|
||||||
# 0x129a iPad
|
# 0x129a iPad
|
||||||
# 0x12a2 iPad2
|
# 0x129f iPad2 (WiFi)
|
||||||
|
# 0x12a2 iPad2 (GSM)
|
||||||
|
# 0x12a3 iPad2 (CDMA)
|
||||||
VENDOR_ID = [0x05ac]
|
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]
|
BCD = [0x01]
|
||||||
|
|
||||||
# Plugboard ID
|
# Plugboard ID
|
||||||
@ -506,7 +508,7 @@ class ITUNES(DriverBase):
|
|||||||
if self.iTunes:
|
if self.iTunes:
|
||||||
# Check for connected book-capable device
|
# Check for connected book-capable device
|
||||||
self.sources = self._get_sources()
|
self.sources = self._get_sources()
|
||||||
if 'iPod' in self.sources:
|
if 'iPod' in self.sources and not self.ejected:
|
||||||
#if DEBUG:
|
#if DEBUG:
|
||||||
#sys.stdout.write('.')
|
#sys.stdout.write('.')
|
||||||
#sys.stdout.flush()
|
#sys.stdout.flush()
|
||||||
@ -2036,16 +2038,17 @@ class ITUNES(DriverBase):
|
|||||||
if 'iPod' in self.sources:
|
if 'iPod' in self.sources:
|
||||||
connected_device = self.sources['iPod']
|
connected_device = self.sources['iPod']
|
||||||
device = self.iTunes.sources[connected_device]
|
device = self.iTunes.sources[connected_device]
|
||||||
|
dev_books = None
|
||||||
for pl in device.playlists():
|
for pl in device.playlists():
|
||||||
if pl.special_kind() == appscript.k.Books:
|
if pl.special_kind() == appscript.k.Books:
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
self.log.info(" Book playlist: '%s'" % (pl.name()))
|
self.log.info(" Book playlist: '%s'" % (pl.name()))
|
||||||
books = pl.file_tracks()
|
dev_books = pl.file_tracks()
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.log.error(" book_playlist not found")
|
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
|
# This may need additional entries for international iTunes users
|
||||||
if book.kind() in self.Audiobooks:
|
if book.kind() in self.Audiobooks:
|
||||||
if DEBUG:
|
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
|
return names
|
||||||
|
|
||||||
def linux_swap_drives(self, drives):
|
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)
|
drives = list(drives)
|
||||||
t = drives[0]
|
t = drives[0]
|
||||||
drives[0] = drives[1]
|
drives[0] = drives[1]
|
||||||
@ -95,7 +95,6 @@ class HANLINV5(HANLINV3):
|
|||||||
gui_name = 'Hanlin V5'
|
gui_name = 'Hanlin V5'
|
||||||
description = _('Communicate with Hanlin V5 eBook readers.')
|
description = _('Communicate with Hanlin V5 eBook readers.')
|
||||||
|
|
||||||
|
|
||||||
VENDOR_ID = [0x0492]
|
VENDOR_ID = [0x0492]
|
||||||
PRODUCT_ID = [0x8813]
|
PRODUCT_ID = [0x8813]
|
||||||
BCD = [0x319]
|
BCD = [0x319]
|
||||||
|
@ -164,7 +164,7 @@ class APNXBuilder(object):
|
|||||||
if c == '/':
|
if c == '/':
|
||||||
closing = True
|
closing = True
|
||||||
continue
|
continue
|
||||||
elif c in ('d', 'p'):
|
elif c == 'p':
|
||||||
if closing:
|
if closing:
|
||||||
in_p = False
|
in_p = False
|
||||||
else:
|
else:
|
||||||
|
@ -38,7 +38,7 @@ class KOBO(USBMS):
|
|||||||
|
|
||||||
VENDOR_ID = [0x2237]
|
VENDOR_ID = [0x2237]
|
||||||
PRODUCT_ID = [0x4161]
|
PRODUCT_ID = [0x4161]
|
||||||
BCD = [0x0110]
|
BCD = [0x0110, 0x0323]
|
||||||
|
|
||||||
VENDOR_NAME = ['KOBO_INC', 'KOBO']
|
VENDOR_NAME = ['KOBO_INC', 'KOBO']
|
||||||
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['.KOBOEREADER', 'EREADER']
|
WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = ['.KOBOEREADER', 'EREADER']
|
||||||
|
@ -5,7 +5,6 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
from calibre.devices.usbms.driver import USBMS
|
from calibre.devices.usbms.driver import USBMS
|
||||||
from calibre.ebooks import BOOK_EXTENSIONS
|
|
||||||
|
|
||||||
class USER_DEFINED(USBMS):
|
class USER_DEFINED(USBMS):
|
||||||
|
|
||||||
@ -69,9 +68,9 @@ class USER_DEFINED(USBMS):
|
|||||||
'is prepended to any send_to_device template') + '</p>',
|
'is prepended to any send_to_device template') + '</p>',
|
||||||
]
|
]
|
||||||
EXTRA_CUSTOMIZATION_DEFAULT = [
|
EXTRA_CUSTOMIZATION_DEFAULT = [
|
||||||
'0x0000',
|
'0xffff',
|
||||||
'0x0000',
|
'0xffff',
|
||||||
'0x0000',
|
'0xffff',
|
||||||
None,
|
None,
|
||||||
'',
|
'',
|
||||||
'',
|
'',
|
||||||
|
@ -68,7 +68,8 @@ def check_command_line_options(parser, args, log):
|
|||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
|
|
||||||
output = args[2]
|
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.splitext(os.path.basename(input))[0]+output
|
||||||
output = os.path.abspath(output)
|
output = os.path.abspath(output)
|
||||||
|
|
||||||
|
@ -8,9 +8,10 @@ __docformat__ = 'restructuredtext en'
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from calibre import walk
|
from calibre import guess_type, walk
|
||||||
from calibre.customize.conversion import InputFormatPlugin
|
from calibre.customize.conversion import InputFormatPlugin
|
||||||
from calibre.ebooks.chardet import xml_to_unicode
|
from calibre.ebooks.chardet import xml_to_unicode
|
||||||
|
from calibre.ebooks.metadata.opf2 import OPF
|
||||||
from calibre.utils.zipfile import ZipFile
|
from calibre.utils.zipfile import ZipFile
|
||||||
|
|
||||||
class HTMLZInput(InputFormatPlugin):
|
class HTMLZInput(InputFormatPlugin):
|
||||||
@ -27,7 +28,7 @@ class HTMLZInput(InputFormatPlugin):
|
|||||||
|
|
||||||
# Extract content from zip archive.
|
# Extract content from zip archive.
|
||||||
zf = ZipFile(stream)
|
zf = ZipFile(stream)
|
||||||
zf.extractall('.')
|
zf.extractall()
|
||||||
|
|
||||||
for x in walk('.'):
|
for x in walk('.'):
|
||||||
if os.path.splitext(x)[1].lower() in ('.html', '.xhtml', '.htm'):
|
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)
|
mi = get_file_type_metadata(stream, file_ext)
|
||||||
meta_info_to_oeb_metadata(mi, oeb.metadata, log)
|
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
|
return oeb
|
||||||
|
@ -7,11 +7,13 @@ __copyright__ = '2011, John Schember <john@nachtimwald.com>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from cStringIO import StringIO
|
||||||
|
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from calibre.customize.conversion import OutputFormatPlugin, \
|
from calibre.customize.conversion import OutputFormatPlugin, \
|
||||||
OptionRecommendation
|
OptionRecommendation
|
||||||
|
from calibre.ebooks.metadata.opf2 import OPF, metadata_to_opf
|
||||||
from calibre.ptempfile import TemporaryDirectory
|
from calibre.ptempfile import TemporaryDirectory
|
||||||
from calibre.utils.zipfile import ZipFile
|
from calibre.utils.zipfile import ZipFile
|
||||||
|
|
||||||
@ -80,9 +82,30 @@ class HTMLZOutput(OutputFormatPlugin):
|
|||||||
with open(fname, 'wb') as img:
|
with open(fname, 'wb') as img:
|
||||||
img.write(data)
|
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
|
# Metadata
|
||||||
with open(os.path.join(tdir, 'metadata.opf'), 'wb') as mdataf:
|
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 = ZipFile(output_path, 'w')
|
||||||
htmlz.add_dir(tdir)
|
htmlz.add_dir(tdir)
|
||||||
|
@ -8,7 +8,6 @@ Read meta information from extZ (TXTZ, HTMLZ...) files.
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import posixpath
|
|
||||||
|
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
|
|
||||||
@ -31,9 +30,9 @@ def get_metadata(stream, extract_cover=True):
|
|||||||
opf = OPF(opf_stream)
|
opf = OPF(opf_stream)
|
||||||
mi = opf.to_book_metadata()
|
mi = opf.to_book_metadata()
|
||||||
if extract_cover:
|
if extract_cover:
|
||||||
cover_name = opf.raster_cover
|
cover_href = opf.raster_cover
|
||||||
if cover_name:
|
if cover_href:
|
||||||
mi.cover_data = ('jpg', zf.read(cover_name))
|
mi.cover_data = (os.path.splitext(cover_href)[1], zf.read(cover_href))
|
||||||
except:
|
except:
|
||||||
return mi
|
return mi
|
||||||
return mi
|
return mi
|
||||||
@ -59,17 +58,17 @@ def set_metadata(stream, mi):
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
if new_cdata:
|
if new_cdata:
|
||||||
raster_cover = opf.raster_cover
|
cpath = opf.raster_cover
|
||||||
if not raster_cover:
|
if not cpath:
|
||||||
raster_cover = 'cover.jpg'
|
cpath = 'cover.jpg'
|
||||||
cpath = posixpath.join(posixpath.dirname(opf_path), raster_cover)
|
|
||||||
new_cover = _write_new_cover(new_cdata, cpath)
|
new_cover = _write_new_cover(new_cdata, cpath)
|
||||||
replacements[cpath] = open(new_cover.name, 'rb')
|
replacements[cpath] = open(new_cover.name, 'rb')
|
||||||
|
mi.cover = cpath
|
||||||
|
|
||||||
# Update the metadata.
|
# Update the metadata.
|
||||||
opf.smart_update(mi, replace_metadata=True)
|
opf.smart_update(mi, replace_metadata=True)
|
||||||
newopf = StringIO(opf.render())
|
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.
|
# Cleanup temporary files.
|
||||||
try:
|
try:
|
||||||
|
@ -966,7 +966,9 @@ class OPF(object): # {{{
|
|||||||
cover_id = covers[0].get('content')
|
cover_id = covers[0].get('content')
|
||||||
for item in self.itermanifest():
|
for item in self.itermanifest():
|
||||||
if item.get('id', None) == cover_id:
|
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
|
@dynamic_property
|
||||||
def cover(self):
|
def cover(self):
|
||||||
|
@ -338,7 +338,7 @@ class Amazon(Source):
|
|||||||
q['field-author'] = ' '.join(author_tokens)
|
q['field-author'] = ' '.join(author_tokens)
|
||||||
|
|
||||||
if not ('field-keywords' in q or 'field-isbn' in q or
|
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
|
# Insufficient metadata to make an identify query
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -212,6 +212,9 @@ class Source(Plugin):
|
|||||||
def is_customizable(self):
|
def is_customizable(self):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def customization_help(self):
|
||||||
|
return 'This plugin can only be customized using the GUI'
|
||||||
|
|
||||||
def config_widget(self):
|
def config_widget(self):
|
||||||
from calibre.gui2.metadata.config import ConfigWidget
|
from calibre.gui2.metadata.config import ConfigWidget
|
||||||
return ConfigWidget(self)
|
return ConfigWidget(self)
|
||||||
@ -288,10 +291,10 @@ class Source(Plugin):
|
|||||||
parts = parts[1:] + parts[:1]
|
parts = parts[1:] + parts[:1]
|
||||||
for tok in parts:
|
for tok in parts:
|
||||||
tok = remove_pat.sub('', tok).strip()
|
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
|
yield tok
|
||||||
|
|
||||||
|
|
||||||
def get_title_tokens(self, title, strip_joiners=True, strip_subtitle=False):
|
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.
|
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 threading import Thread
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
|
from urlparse import urlparse
|
||||||
|
|
||||||
from calibre.customize.ui import metadata_plugins, all_metadata_plugins
|
from calibre.customize.ui import metadata_plugins, all_metadata_plugins
|
||||||
from calibre.ebooks.metadata.sources.base import create_log, msprefs
|
from calibre.ebooks.metadata.sources.base import create_log, msprefs
|
||||||
@ -402,7 +403,7 @@ def identify(log, abort, # {{{
|
|||||||
result.identify_plugin = plugin
|
result.identify_plugin = plugin
|
||||||
if msprefs['txt_comments']:
|
if msprefs['txt_comments']:
|
||||||
if plugin.has_html_comments and result.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 identify phase took %.2f seconds'%(time.time() - start_time))
|
||||||
log('The longest time (%f) was taken by:'%longest, lp)
|
log('The longest time (%f) was taken by:'%longest, lp)
|
||||||
@ -458,6 +459,14 @@ def urls_from_identifiers(identifiers): # {{{
|
|||||||
if oclc:
|
if oclc:
|
||||||
ans.append(('OCLC', 'oclc', oclc,
|
ans.append(('OCLC', 'oclc', oclc,
|
||||||
'http://www.worldcat.org/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
|
return ans
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ class OverDrive(Source):
|
|||||||
cached_cover_url_is_reliable = True
|
cached_cover_url_is_reliable = True
|
||||||
|
|
||||||
options = (
|
options = (
|
||||||
Option('get_full_metadata', 'bool', False,
|
Option('get_full_metadata', 'bool', True,
|
||||||
_('Download all metadata (slow)'),
|
_('Download all metadata (slow)'),
|
||||||
_('Enable this option to gather all metadata available from Overdrive.')),
|
_('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
|
Convert an ODT file into a Open Ebook
|
||||||
'''
|
'''
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from lxml import etree
|
||||||
from odf.odf2xhtml import ODF2XHTML
|
from odf.odf2xhtml import ODF2XHTML
|
||||||
|
|
||||||
from calibre import CurrentDir, walk
|
from calibre import CurrentDir, walk
|
||||||
@ -23,7 +25,51 @@ class Extract(ODF2XHTML):
|
|||||||
with open(name, 'wb') as f:
|
with open(name, 'wb') as f:
|
||||||
f.write(data)
|
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.utils.zipfile import ZipFile
|
||||||
from calibre.ebooks.metadata.meta import get_metadata
|
from calibre.ebooks.metadata.meta import get_metadata
|
||||||
from calibre.ebooks.metadata.opf2 import OPFCreator
|
from calibre.ebooks.metadata.opf2 import OPFCreator
|
||||||
@ -32,13 +78,17 @@ class Extract(ODF2XHTML):
|
|||||||
if not os.path.exists(odir):
|
if not os.path.exists(odir):
|
||||||
os.makedirs(odir)
|
os.makedirs(odir)
|
||||||
with CurrentDir(odir):
|
with CurrentDir(odir):
|
||||||
print 'Extracting ODT file...'
|
log('Extracting ODT file...')
|
||||||
html = self.odf2xhtml(stream)
|
html = self.odf2xhtml(stream)
|
||||||
# A blanket img specification like this causes problems
|
# 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
|
# an absolute height and width set that is larger than
|
||||||
# the available screen real estate
|
# the available screen real estate
|
||||||
html = html.replace('img { width: 100%; height: 100%; }', '')
|
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:
|
with open('index.xhtml', 'wb') as f:
|
||||||
f.write(html.encode('utf-8'))
|
f.write(html.encode('utf-8'))
|
||||||
zf = ZipFile(stream, 'r')
|
zf = ZipFile(stream, 'r')
|
||||||
@ -67,7 +117,7 @@ class ODTInput(InputFormatPlugin):
|
|||||||
|
|
||||||
def convert(self, stream, options, file_ext, log,
|
def convert(self, stream, options, file_ext, log,
|
||||||
accelerators):
|
accelerators):
|
||||||
return Extract()(stream, '.')
|
return Extract()(stream, '.', log)
|
||||||
|
|
||||||
def postprocess_book(self, oeb, opts, log):
|
def postprocess_book(self, oeb, opts, log):
|
||||||
# Fix <p><div> constructs as the asinine epubchecker complains
|
# 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.clear('description')
|
||||||
m.add('description', mi.comments)
|
m.add('description', mi.comments)
|
||||||
elif override_input_metadata:
|
elif override_input_metadata:
|
||||||
m.clear('description')
|
m.clear('description')
|
||||||
if not mi.is_null('publisher'):
|
if not mi.is_null('publisher'):
|
||||||
m.clear('publisher')
|
m.clear('publisher')
|
||||||
m.add('publisher', mi.publisher)
|
m.add('publisher', mi.publisher)
|
||||||
|
@ -32,10 +32,11 @@ class PDFInput(InputFormatPlugin):
|
|||||||
|
|
||||||
def convert_new(self, stream, accelerators):
|
def convert_new(self, stream, accelerators):
|
||||||
from calibre.ebooks.pdf.reflow import PDFDocument
|
from calibre.ebooks.pdf.reflow import PDFDocument
|
||||||
|
from calibre.utils.cleantext import clean_ascii_chars
|
||||||
if pdfreflow_err:
|
if pdfreflow_err:
|
||||||
raise RuntimeError('Failed to load pdfreflow: ' + pdfreflow_err)
|
raise RuntimeError('Failed to load pdfreflow: ' + pdfreflow_err)
|
||||||
pdfreflow.reflow(stream.read(), 1, -1)
|
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)
|
PDFDocument(xml, self.opts, self.log)
|
||||||
return os.path.join(os.getcwd(), 'metadata.opf')
|
return os.path.join(os.getcwd(), 'metadata.opf')
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ import cStringIO
|
|||||||
from lxml import etree
|
from lxml import etree
|
||||||
|
|
||||||
from calibre.ebooks.metadata import authors_to_string
|
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
|
from calibre.utils.magick.draw import save_cover_data_to, identify_data
|
||||||
|
|
||||||
TAGS = {
|
TAGS = {
|
||||||
@ -79,8 +78,7 @@ def txt2rtf(text):
|
|||||||
elif val <= 127:
|
elif val <= 127:
|
||||||
buf.write(x)
|
buf.write(x)
|
||||||
else:
|
else:
|
||||||
repl = ascii_text(x)
|
c = r'\u{0:d}?'.format(val)
|
||||||
c = r'\uc{2}\u{0:d}{1}'.format(val, repl, len(repl))
|
|
||||||
buf.write(c)
|
buf.write(c)
|
||||||
return buf.getvalue()
|
return buf.getvalue()
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ if isosx:
|
|||||||
)
|
)
|
||||||
gprefs.defaults['action-layout-toolbar'] = (
|
gprefs.defaults['action-layout-toolbar'] = (
|
||||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
|
'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',
|
'Connect Share', None, 'Remove Books',
|
||||||
)
|
)
|
||||||
gprefs.defaults['action-layout-toolbar-device'] = (
|
gprefs.defaults['action-layout-toolbar-device'] = (
|
||||||
@ -48,7 +48,7 @@ else:
|
|||||||
gprefs.defaults['action-layout-menubar-device'] = ()
|
gprefs.defaults['action-layout-menubar-device'] = ()
|
||||||
gprefs.defaults['action-layout-toolbar'] = (
|
gprefs.defaults['action-layout-toolbar'] = (
|
||||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
|
'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',
|
'Connect Share', None, 'Remove Books', None, 'Help', 'Preferences',
|
||||||
)
|
)
|
||||||
gprefs.defaults['action-layout-toolbar-device'] = (
|
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)
|
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'])
|
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):
|
def generate_catalog(self):
|
||||||
rows = self.gui.library_view.selectionModel().selectedRows()
|
rows = self.gui.library_view.selectionModel().selectedRows()
|
||||||
if not rows or len(rows) < 2:
|
if not rows or len(rows) < 2:
|
||||||
|
@ -246,7 +246,8 @@ class ChooseLibraryAction(InterfaceAction):
|
|||||||
def delete_requested(self, name, location):
|
def delete_requested(self, name, location):
|
||||||
loc = location.replace('/', os.sep)
|
loc = location.replace('/', os.sep)
|
||||||
if not question_dialog(self.gui, _('Are you sure?'), '<p>'+
|
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,
|
'<b>permanently deleted</b>. Are you sure?') % loc,
|
||||||
show_copy_button=False):
|
show_copy_button=False):
|
||||||
return
|
return
|
||||||
|
@ -10,7 +10,7 @@ from PyQt4.Qt import QIcon, QMenu, Qt
|
|||||||
from calibre.gui2.actions import InterfaceAction
|
from calibre.gui2.actions import InterfaceAction
|
||||||
from calibre.gui2.preferences.main import Preferences
|
from calibre.gui2.preferences.main import Preferences
|
||||||
from calibre.gui2 import error_dialog
|
from calibre.gui2 import error_dialog
|
||||||
from calibre.constants import DEBUG
|
from calibre.constants import DEBUG, isosx
|
||||||
|
|
||||||
class PreferencesAction(InterfaceAction):
|
class PreferencesAction(InterfaceAction):
|
||||||
|
|
||||||
@ -19,7 +19,8 @@ class PreferencesAction(InterfaceAction):
|
|||||||
|
|
||||||
def genesis(self):
|
def genesis(self):
|
||||||
pm = QMenu()
|
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'),
|
pm.addAction(QIcon(I('wizard.png')), _('Run welcome wizard'),
|
||||||
self.gui.run_wizard)
|
self.gui.run_wizard)
|
||||||
if not DEBUG:
|
if not DEBUG:
|
||||||
|
@ -27,7 +27,7 @@ class StoreAction(InterfaceAction):
|
|||||||
self.store_menu.clear()
|
self.store_menu.clear()
|
||||||
self.store_menu.addAction(_('Search'), self.search)
|
self.store_menu.addAction(_('Search'), self.search)
|
||||||
self.store_menu.addSeparator()
|
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.store_menu.addAction(n, partial(self.open_store, p))
|
||||||
self.qaction.setMenu(self.store_menu)
|
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)
|
w = widget_factory(dt, col)
|
||||||
ans.append(w)
|
ans.append(w)
|
||||||
for c in range(0, len(w.widgets), 2):
|
for c in range(0, len(w.widgets), 2):
|
||||||
|
w.widgets[c].setWordWrap(True)
|
||||||
w.widgets[c].setBuddy(w.widgets[c+1])
|
w.widgets[c].setBuddy(w.widgets[c+1])
|
||||||
layout.addWidget(w.widgets[c], row, column)
|
layout.addWidget(w.widgets[c], row, column)
|
||||||
layout.addWidget(w.widgets[c+1], row, column+1)
|
layout.addWidget(w.widgets[c+1], row, column+1)
|
||||||
|
@ -3,12 +3,13 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
__license__ = 'GPL v3'
|
__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.ebooks.metadata import author_to_author_sort
|
||||||
from calibre.gui2 import error_dialog
|
from calibre.gui2 import error_dialog
|
||||||
from calibre.gui2.dialogs.edit_authors_dialog_ui import Ui_EditAuthorsDialog
|
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):
|
class tableItem(QTableWidgetItem):
|
||||||
def __ge__(self, other):
|
def __ge__(self, other):
|
||||||
@ -19,7 +20,7 @@ class tableItem(QTableWidgetItem):
|
|||||||
|
|
||||||
class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
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)
|
QDialog.__init__(self, parent)
|
||||||
Ui_EditAuthorsDialog.__init__(self)
|
Ui_EditAuthorsDialog.__init__(self)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
@ -30,14 +31,23 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
|
|
||||||
self.buttonBox.accepted.connect(self.accepted)
|
self.buttonBox.accepted.connect(self.accepted)
|
||||||
|
|
||||||
|
# Set up the column headings
|
||||||
self.table.setSelectionMode(QAbstractItemView.SingleSelection)
|
self.table.setSelectionMode(QAbstractItemView.SingleSelection)
|
||||||
self.table.setColumnCount(2)
|
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 = {}
|
self.authors = {}
|
||||||
auts = db.get_authors_with_ids()
|
auts = db.get_authors_with_ids()
|
||||||
self.table.setRowCount(len(auts))
|
self.table.setRowCount(len(auts))
|
||||||
setattr(self.table, '__lt__', lambda x, y: True if strcmp(x, y) < 0 else False)
|
|
||||||
select_item = None
|
select_item = None
|
||||||
for row, (id, author, sort) in enumerate(auts):
|
for row, (id, author, sort) in enumerate(auts):
|
||||||
author = author.replace('|', ',')
|
author = author.replace('|', ',')
|
||||||
@ -48,7 +58,10 @@ class EditAuthorsDialog(QDialog, Ui_EditAuthorsDialog):
|
|||||||
self.table.setItem(row, 0, aut)
|
self.table.setItem(row, 0, aut)
|
||||||
self.table.setItem(row, 1, sort)
|
self.table.setItem(row, 1, sort)
|
||||||
if id == id_to_select:
|
if id == id_to_select:
|
||||||
select_item = sort
|
if select_sort:
|
||||||
|
select_item = sort
|
||||||
|
else:
|
||||||
|
select_item = aut
|
||||||
self.table.resizeColumnsToContents()
|
self.table.resizeColumnsToContents()
|
||||||
|
|
||||||
# set up the cellChanged signal only after the table is filled
|
# 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.recalc_author_sort.clicked.connect(self.do_recalc_author_sort)
|
||||||
self.auth_sort_to_author.clicked.connect(self.do_auth_sort_to_author)
|
self.auth_sort_to_author.clicked.connect(self.do_auth_sort_to_author)
|
||||||
|
|
||||||
|
# Position on the desired item
|
||||||
if select_item is not None:
|
if select_item is not None:
|
||||||
self.table.setCurrentItem(select_item)
|
self.table.setCurrentItem(select_item)
|
||||||
self.table.editItem(select_item)
|
self.table.editItem(select_item)
|
||||||
|
self.start_find_pos = select_item.row() * 2 + select_item.column()
|
||||||
else:
|
else:
|
||||||
self.table.setCurrentCell(0, 0)
|
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):
|
def do_sort_by_author(self):
|
||||||
self.author_order = 1 if self.author_order == 0 else 0
|
self.author_order = 1 if self.author_order == 0 else 0
|
||||||
self.table.sortByColumn(0, self.author_order)
|
self.table.sortByColumn(0, self.author_order)
|
||||||
self.sort_by_author.setChecked(True)
|
self.sort_by_author.setChecked(True)
|
||||||
self.sort_by_author_sort.setChecked(False)
|
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):
|
def do_sort_by_author_sort(self):
|
||||||
self.author_sort_order = 1 if self.author_sort_order == 0 else 0
|
self.author_sort_order = 1 if self.author_sort_order == 0 else 0
|
||||||
self.table.sortByColumn(1, self.author_sort_order)
|
self.table.sortByColumn(1, self.author_sort_order)
|
||||||
self.sort_by_author.setChecked(False)
|
self.sort_by_author.setChecked(False)
|
||||||
self.sort_by_author_sort.setChecked(True)
|
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):
|
def accepted(self):
|
||||||
self.result = []
|
self.result = []
|
||||||
|
@ -20,6 +20,50 @@
|
|||||||
<string>Manage authors</string>
|
<string>Manage authors</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<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>
|
<item>
|
||||||
<widget class="QTableWidget" name="table">
|
<widget class="QTableWidget" name="table">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
@ -143,4 +187,11 @@ after changing Preferences->Advanced->Tweaks->Author sort name algorith
|
|||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>HistoryLineEdit</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>calibre/gui2/widgets.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
</ui>
|
</ui>
|
||||||
|
@ -19,17 +19,23 @@ class MessageBox(QDialog, Ui_Dialog): # {{{
|
|||||||
INFO = 2
|
INFO = 2
|
||||||
QUESTION = 3
|
QUESTION = 3
|
||||||
|
|
||||||
def __init__(self, type_, title, msg, det_msg='', show_copy_button=True,
|
def __init__(self, type_, title, msg,
|
||||||
parent=None):
|
det_msg='',
|
||||||
|
q_icon=None,
|
||||||
|
show_copy_button=True,
|
||||||
|
parent=None):
|
||||||
QDialog.__init__(self, parent)
|
QDialog.__init__(self, parent)
|
||||||
icon = {
|
if q_icon is None:
|
||||||
self.ERROR : 'error',
|
icon = {
|
||||||
self.WARNING: 'warning',
|
self.ERROR : 'error',
|
||||||
self.INFO: 'information',
|
self.WARNING: 'warning',
|
||||||
self.QUESTION: 'question',
|
self.INFO: 'information',
|
||||||
}[type_]
|
self.QUESTION: 'question',
|
||||||
icon = 'dialog_%s.png'%icon
|
}[type_]
|
||||||
self.icon = QIcon(I(icon))
|
icon = 'dialog_%s.png'%icon
|
||||||
|
self.icon = QIcon(I(icon))
|
||||||
|
else:
|
||||||
|
self.icon = q_icon
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
self.setWindowTitle(title)
|
self.setWindowTitle(title)
|
||||||
@ -44,7 +50,6 @@ class MessageBox(QDialog, Ui_Dialog): # {{{
|
|||||||
self.bb.ActionRole)
|
self.bb.ActionRole)
|
||||||
self.ctc_button.clicked.connect(self.copy_to_clipboard)
|
self.ctc_button.clicked.connect(self.copy_to_clipboard)
|
||||||
|
|
||||||
|
|
||||||
self.show_det_msg = _('Show &details')
|
self.show_det_msg = _('Show &details')
|
||||||
self.hide_det_msg = _('Hide &details')
|
self.hide_det_msg = _('Hide &details')
|
||||||
self.det_msg_toggle = self.bb.addButton(self.show_det_msg, self.bb.ActionRole)
|
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'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, shutil
|
import os, shutil
|
||||||
from contextlib import closing
|
|
||||||
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
|
from zipfile import ZipFile, ZIP_DEFLATED, ZIP_STORED
|
||||||
|
|
||||||
from PyQt4.Qt import QDialog
|
from PyQt4.Qt import QDialog
|
||||||
|
|
||||||
from calibre.constants import isosx
|
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.gui2.dialogs.tweak_epub_ui import Ui_Dialog
|
||||||
from calibre.libunzip import extract as zipextract
|
from calibre.libunzip import extract as zipextract
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory
|
from calibre.ptempfile import (PersistentTemporaryDirectory,
|
||||||
|
PersistentTemporaryFile)
|
||||||
|
|
||||||
class TweakEpub(QDialog, Ui_Dialog):
|
class TweakEpub(QDialog, Ui_Dialog):
|
||||||
'''
|
'''
|
||||||
@ -37,11 +37,15 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
self.cancel_button.clicked.connect(self.reject)
|
self.cancel_button.clicked.connect(self.reject)
|
||||||
self.explode_button.clicked.connect(self.explode)
|
self.explode_button.clicked.connect(self.explode)
|
||||||
self.rebuild_button.clicked.connect(self.rebuild)
|
self.rebuild_button.clicked.connect(self.rebuild)
|
||||||
|
self.preview_button.clicked.connect(self.preview)
|
||||||
|
|
||||||
# Position update dialog overlaying top left of app window
|
# Position update dialog overlaying top left of app window
|
||||||
parent_loc = parent.pos()
|
parent_loc = parent.pos()
|
||||||
self.move(parent_loc.x(),parent_loc.y())
|
self.move(parent_loc.x(),parent_loc.y())
|
||||||
|
|
||||||
|
self.gui = parent
|
||||||
|
self._preview_files = []
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
if isosx:
|
if isosx:
|
||||||
try:
|
try:
|
||||||
@ -55,6 +59,11 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
# Delete directory containing exploded ePub
|
# Delete directory containing exploded ePub
|
||||||
if self._exploded is not None:
|
if self._exploded is not None:
|
||||||
shutil.rmtree(self._exploded, ignore_errors=True)
|
shutil.rmtree(self._exploded, ignore_errors=True)
|
||||||
|
for x in self._preview_files:
|
||||||
|
try:
|
||||||
|
os.remove(x)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def display_exploded(self):
|
def display_exploded(self):
|
||||||
'''
|
'''
|
||||||
@ -71,9 +80,8 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
self.rebuild_button.setEnabled(True)
|
self.rebuild_button.setEnabled(True)
|
||||||
self.explode_button.setEnabled(False)
|
self.explode_button.setEnabled(False)
|
||||||
|
|
||||||
def rebuild(self, *args):
|
def do_rebuild(self, src):
|
||||||
self._output = os.path.join(self._exploded, 'rebuilt.epub')
|
with ZipFile(src, 'w', compression=ZIP_DEFLATED) as zf:
|
||||||
with closing(ZipFile(self._output, 'w', compression=ZIP_DEFLATED)) as zf:
|
|
||||||
# Write mimetype
|
# Write mimetype
|
||||||
zf.write(os.path.join(self._exploded,'mimetype'), 'mimetype', compress_type=ZIP_STORED)
|
zf.write(os.path.join(self._exploded,'mimetype'), 'mimetype', compress_type=ZIP_STORED)
|
||||||
# Write everything else
|
# Write everything else
|
||||||
@ -86,5 +94,23 @@ class TweakEpub(QDialog, Ui_Dialog):
|
|||||||
zfn = os.path.relpath(absfn,
|
zfn = os.path.relpath(absfn,
|
||||||
self._exploded).replace(os.sep, '/')
|
self._exploded).replace(os.sep, '/')
|
||||||
zf.write(absfn, zfn)
|
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)
|
return QDialog.accept(self)
|
||||||
|
|
||||||
|
@ -23,6 +23,16 @@
|
|||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<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">
|
<item row="1" column="0">
|
||||||
<widget class="QPushButton" name="explode_button">
|
<widget class="QPushButton" name="explode_button">
|
||||||
<property name="statusTip">
|
<property name="statusTip">
|
||||||
@ -37,23 +47,6 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="3" column="0">
|
||||||
<widget class="QPushButton" name="cancel_button">
|
<widget class="QPushButton" name="cancel_button">
|
||||||
<property name="statusTip">
|
<property name="statusTip">
|
||||||
@ -68,13 +61,31 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0">
|
<item row="3" column="1">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QPushButton" name="rebuild_button">
|
||||||
<property name="text">
|
<property name="enabled">
|
||||||
<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>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="statusTip">
|
||||||
<bool>true</bool>
|
<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>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -44,18 +44,19 @@ class LocationManager(QObject): # {{{
|
|||||||
receiver = partial(self._location_selected, name)
|
receiver = partial(self._location_selected, name)
|
||||||
ac.triggered.connect(receiver)
|
ac.triggered.connect(receiver)
|
||||||
self.tooltips[name] = tooltip
|
self.tooltips[name] = tooltip
|
||||||
|
|
||||||
|
m = QMenu(parent)
|
||||||
|
self._mem.append(m)
|
||||||
|
a = m.addAction(icon, tooltip)
|
||||||
|
a.triggered.connect(receiver)
|
||||||
if name != 'library':
|
if name != 'library':
|
||||||
m = QMenu(parent)
|
|
||||||
self._mem.append(m)
|
|
||||||
a = m.addAction(icon, tooltip)
|
|
||||||
a.triggered.connect(receiver)
|
|
||||||
self._mem.append(a)
|
self._mem.append(a)
|
||||||
a = m.addAction(QIcon(I('eject.png')), _('Eject this device'))
|
a = m.addAction(QIcon(I('eject.png')), _('Eject this device'))
|
||||||
a.triggered.connect(self._eject_requested)
|
a.triggered.connect(self._eject_requested)
|
||||||
ac.setMenu(m)
|
|
||||||
self._mem.append(a)
|
self._mem.append(a)
|
||||||
else:
|
else:
|
||||||
ac.setToolTip(tooltip)
|
ac.setToolTip(tooltip)
|
||||||
|
ac.setMenu(m)
|
||||||
ac.calibre_name = name
|
ac.calibre_name = name
|
||||||
|
|
||||||
return ac
|
return ac
|
||||||
@ -71,7 +72,12 @@ class LocationManager(QObject): # {{{
|
|||||||
|
|
||||||
def set_switch_actions(self, quick_actions, rename_actions, delete_actions,
|
def set_switch_actions(self, quick_actions, rename_actions, delete_actions,
|
||||||
switch_actions, choose_action):
|
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.switch_menu.addAction(choose_action)
|
||||||
self.cs_menus = []
|
self.cs_menus = []
|
||||||
for t, acs in [(_('Quick switch'), quick_actions),
|
for t, acs in [(_('Quick switch'), quick_actions),
|
||||||
@ -85,7 +91,9 @@ class LocationManager(QObject): # {{{
|
|||||||
self.switch_menu.addSeparator()
|
self.switch_menu.addSeparator()
|
||||||
for ac in switch_actions:
|
for ac in switch_actions:
|
||||||
self.switch_menu.addAction(ac)
|
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):
|
def _location_selected(self, location, *args):
|
||||||
if location != self.current_location and hasattr(self,
|
if location != self.current_location and hasattr(self,
|
||||||
|
@ -439,10 +439,16 @@ class BooksView(QTableView): # {{{
|
|||||||
|
|
||||||
if tweaks['sort_columns_at_startup'] is not None:
|
if tweaks['sort_columns_at_startup'] is not None:
|
||||||
sh = []
|
sh = []
|
||||||
for c,d in tweaks['sort_columns_at_startup']:
|
try:
|
||||||
if not isinstance(d, bool):
|
for c,d in tweaks['sort_columns_at_startup']:
|
||||||
d = True if d == 0 else False
|
if not isinstance(d, bool):
|
||||||
sh.append((c, d))
|
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
|
old_state['sort_history'] = sh
|
||||||
|
|
||||||
self.apply_state(old_state)
|
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):
|
if getattr(runner.main, 'debug_on_restart', False):
|
||||||
run_in_debug_mode()
|
run_in_debug_mode()
|
||||||
else:
|
else:
|
||||||
|
import subprocess
|
||||||
print 'Restarting with:', e, sys.argv
|
print 'Restarting with:', e, sys.argv
|
||||||
if hasattr(sys, 'frameworks_dir'):
|
if hasattr(sys, 'frameworks_dir'):
|
||||||
app = os.path.dirname(os.path.dirname(sys.frameworks_dir))
|
app = os.path.dirname(os.path.dirname(sys.frameworks_dir))
|
||||||
import subprocess
|
|
||||||
subprocess.Popen('sleep 3s; open '+app, shell=True)
|
subprocess.Popen('sleep 3s; open '+app, shell=True)
|
||||||
else:
|
else:
|
||||||
os.execvp(e, sys.argv)
|
subprocess.Popen([e] + sys.argv[1:])
|
||||||
else:
|
else:
|
||||||
if iswindows:
|
if iswindows:
|
||||||
try:
|
try:
|
||||||
|
@ -9,8 +9,8 @@ __docformat__ = 'restructuredtext en'
|
|||||||
|
|
||||||
import textwrap, re, os
|
import textwrap, re, os
|
||||||
|
|
||||||
from PyQt4.Qt import (Qt, QDateEdit, QDate, pyqtSignal,
|
from PyQt4.Qt import (Qt, QDateEdit, QDate, pyqtSignal, QMessageBox,
|
||||||
QIcon, QToolButton, QWidget, QLabel, QGridLayout,
|
QIcon, QToolButton, QWidget, QLabel, QGridLayout, QApplication,
|
||||||
QDoubleSpinBox, QListWidgetItem, QSize, QPixmap,
|
QDoubleSpinBox, QListWidgetItem, QSize, QPixmap,
|
||||||
QPushButton, QSpinBox, QLineEdit, QSizePolicy)
|
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.icu import sort_key
|
||||||
from calibre.utils.config import tweaks, prefs
|
from calibre.utils.config import tweaks, prefs
|
||||||
from calibre.ebooks.metadata import (title_sort, authors_to_string,
|
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.ebooks.metadata.meta import get_metadata
|
||||||
from calibre.gui2 import (file_icon_provider, UNDEFINED_QDATE, UNDEFINED_DATE,
|
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.utils.date import local_tz, qt_to_dt
|
||||||
from calibre import strftime
|
from calibre import strftime
|
||||||
from calibre.ebooks import BOOK_EXTENSIONS
|
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.gui2.comments_editor import Editor
|
||||||
from calibre.library.comments import comments_to_html
|
from calibre.library.comments import comments_to_html
|
||||||
from calibre.gui2.dialogs.tag_editor import TagEditor
|
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
|
The interface common to all widgets used to set basic metadata
|
||||||
@ -156,7 +166,7 @@ class AuthorsEdit(MultiCompleteComboBox):
|
|||||||
TOOLTIP = ''
|
TOOLTIP = ''
|
||||||
LABEL = _('&Author(s):')
|
LABEL = _('&Author(s):')
|
||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent, manage_authors):
|
||||||
self.dialog = parent
|
self.dialog = parent
|
||||||
self.books_to_refresh = set([])
|
self.books_to_refresh = set([])
|
||||||
MultiCompleteComboBox.__init__(self, parent)
|
MultiCompleteComboBox.__init__(self, parent)
|
||||||
@ -164,6 +174,28 @@ class AuthorsEdit(MultiCompleteComboBox):
|
|||||||
self.setWhatsThis(self.TOOLTIP)
|
self.setWhatsThis(self.TOOLTIP)
|
||||||
self.setEditable(True)
|
self.setEditable(True)
|
||||||
self.setSizeAdjustPolicy(self.AdjustToMinimumContentsLengthWithIcon)
|
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):
|
def get_default(self):
|
||||||
return _('Unknown')
|
return _('Unknown')
|
||||||
@ -175,8 +207,8 @@ class AuthorsEdit(MultiCompleteComboBox):
|
|||||||
self.clear()
|
self.clear()
|
||||||
for i in all_authors:
|
for i in all_authors:
|
||||||
id, name = i
|
id, name = i
|
||||||
name = [name.strip().replace('|', ',') for n in name.split(',')]
|
name = name.strip().replace('|', ',')
|
||||||
self.addItem(authors_to_string(name))
|
self.addItem(name)
|
||||||
|
|
||||||
self.set_separator('&')
|
self.set_separator('&')
|
||||||
self.set_space_before_sep(True)
|
self.set_space_before_sep(True)
|
||||||
@ -188,6 +220,8 @@ class AuthorsEdit(MultiCompleteComboBox):
|
|||||||
au = _('Unknown')
|
au = _('Unknown')
|
||||||
self.current_val = [a.strip().replace('|', ',') for a in au.split(',')]
|
self.current_val = [a.strip().replace('|', ',') for a in au.split(',')]
|
||||||
self.original_val = self.current_val
|
self.original_val = self.current_val
|
||||||
|
self.id_ = id_
|
||||||
|
self.db = db
|
||||||
|
|
||||||
def commit(self, db, id_):
|
def commit(self, db, id_):
|
||||||
authors = self.current_val
|
authors = self.current_val
|
||||||
@ -238,7 +272,7 @@ class AuthorSortEdit(EnLineEdit):
|
|||||||
'No action is required if this is what you want.'))
|
'No action is required if this is what you want.'))
|
||||||
self.tooltips = (ok_tooltip, bad_tooltip)
|
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)
|
self.textChanged.connect(self.update_state)
|
||||||
|
|
||||||
autogen_button.clicked.connect(self.auto_generate)
|
autogen_button.clicked.connect(self.auto_generate)
|
||||||
@ -260,12 +294,19 @@ class AuthorSortEdit(EnLineEdit):
|
|||||||
|
|
||||||
return property(fget=fget, fset=fset)
|
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):
|
def update_state(self, *args):
|
||||||
au = unicode(self.authors_edit.text())
|
au = unicode(self.authors_edit.text())
|
||||||
au = re.sub(r'\s+et al\.$', '', au)
|
au = re.sub(r'\s+et al\.$', '', au)
|
||||||
au = self.db.author_sort_from_authors(string_to_authors(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:
|
if normal:
|
||||||
col = 'rgb(0, 255, 0, 20%)'
|
col = 'rgb(0, 255, 0, 20%)'
|
||||||
else:
|
else:
|
||||||
@ -900,10 +941,13 @@ class TagsEdit(MultiCompleteLineEdit): # {{{
|
|||||||
|
|
||||||
def edit(self, db, id_):
|
def edit(self, db, id_):
|
||||||
if self.changed:
|
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'
|
_('You have changed the tags. In order to use the tags'
|
||||||
' editor, you must either discard or apply these '
|
' 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_)
|
self.commit(db, id_)
|
||||||
db.commit()
|
db.commit()
|
||||||
self.original_val = self.current_val
|
self.original_val = self.current_val
|
||||||
@ -993,6 +1037,13 @@ class IdentifiersEdit(QLineEdit): # {{{
|
|||||||
self.setToolTip(tt+extra)
|
self.setToolTip(tt+extra)
|
||||||
self.setStyleSheet('QLineEdit { background-color: %s }'%col)
|
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): # {{{
|
class PublisherEdit(MultiCompleteComboBox): # {{{
|
||||||
@ -1075,7 +1126,7 @@ class DateEdit(QDateEdit): # {{{
|
|||||||
@dynamic_property
|
@dynamic_property
|
||||||
def current_val(self):
|
def current_val(self):
|
||||||
def fget(self):
|
def fget(self):
|
||||||
return qt_to_dt(self.date())
|
return qt_to_dt(self.date(), as_utc=False)
|
||||||
def fset(self, val):
|
def fset(self, val):
|
||||||
if val is None:
|
if val is None:
|
||||||
val = UNDEFINED_DATE
|
val = UNDEFINED_DATE
|
||||||
|
@ -31,6 +31,7 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
view_format = pyqtSignal(object, object)
|
view_format = pyqtSignal(object, object)
|
||||||
cc_two_column = tweaks['metadata_single_use_2_cols_for_custom_fields']
|
cc_two_column = tweaks['metadata_single_use_2_cols_for_custom_fields']
|
||||||
one_line_comments_toolbar = False
|
one_line_comments_toolbar = False
|
||||||
|
use_toolbutton_for_config_metadata = True
|
||||||
|
|
||||||
def __init__(self, db, parent=None):
|
def __init__(self, db, parent=None):
|
||||||
self.db = db
|
self.db = db
|
||||||
@ -69,7 +70,11 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
self.setLayout(self.l)
|
self.setLayout(self.l)
|
||||||
self.l.setMargin(0)
|
self.l.setMargin(0)
|
||||||
self.l.addWidget(self.scroll_area)
|
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.setWindowIcon(QIcon(I('edit_input.png')))
|
||||||
self.setWindowTitle(_('Edit Metadata'))
|
self.setWindowTitle(_('Edit Metadata'))
|
||||||
@ -103,16 +108,18 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
self.basic_metadata_widgets.extend([self.title, self.title_sort])
|
self.basic_metadata_widgets.extend([self.title, self.title_sort])
|
||||||
|
|
||||||
self.deduce_author_sort_button = b = QToolButton(self)
|
self.deduce_author_sort_button = b = QToolButton(self)
|
||||||
b.setToolTip(_(
|
b.setToolTip('<p>' +
|
||||||
'Automatically create the author sort entry based on the current'
|
_('Automatically create the author sort entry based on the current '
|
||||||
' author entry.\n'
|
'author entry. Using this button to create author sort will '
|
||||||
'Using this button to create author sort will change author sort from'
|
'change author sort from red to green. There is a menu of '
|
||||||
' red to green.'))
|
'functions available under this button. Click and hold '
|
||||||
|
'on the button to see it.') + '</p>')
|
||||||
b.m = m = QMenu()
|
b.m = m = QMenu()
|
||||||
ac = m.addAction(QIcon(I('forward.png')), _('Set author sort from author'))
|
ac = m.addAction(QIcon(I('forward.png')), _('Set author sort from author'))
|
||||||
ac2 = m.addAction(QIcon(I('back.png')), _('Set author from author sort'))
|
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)
|
b.setMenu(m)
|
||||||
self.authors = AuthorsEdit(self)
|
self.authors = AuthorsEdit(self, ac3)
|
||||||
self.author_sort = AuthorSortEdit(self, self.authors, b, self.db, ac,
|
self.author_sort = AuthorSortEdit(self, self.authors, b, self.db, ac,
|
||||||
ac2)
|
ac2)
|
||||||
self.basic_metadata_widgets.extend([self.authors, self.author_sort])
|
self.basic_metadata_widgets.extend([self.authors, self.author_sort])
|
||||||
@ -123,6 +130,13 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
'Swap the author and title'))
|
'Swap the author and title'))
|
||||||
self.swap_title_author_button.clicked.connect(self.swap_title_author)
|
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.series = SeriesEdit(self)
|
||||||
self.remove_unused_series_button = QToolButton(self)
|
self.remove_unused_series_button = QToolButton(self)
|
||||||
self.remove_unused_series_button.setToolTip(
|
self.remove_unused_series_button.setToolTip(
|
||||||
@ -159,6 +173,12 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
self.clear_identifiers_button = QToolButton(self)
|
self.clear_identifiers_button = QToolButton(self)
|
||||||
self.clear_identifiers_button.setIcon(QIcon(I('trash.png')))
|
self.clear_identifiers_button.setIcon(QIcon(I('trash.png')))
|
||||||
self.clear_identifiers_button.clicked.connect(self.identifiers.clear)
|
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.publisher = PublisherEdit(self)
|
||||||
self.basic_metadata_widgets.append(self.publisher)
|
self.basic_metadata_widgets.append(self.publisher)
|
||||||
@ -174,7 +194,12 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
font.setBold(True)
|
font.setBold(True)
|
||||||
self.fetch_metadata_button.setFont(font)
|
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.setIcon(QIcon(I('config.png')))
|
||||||
self.config_metadata_button.clicked.connect(self.configure_metadata)
|
self.config_metadata_button.clicked.connect(self.configure_metadata)
|
||||||
self.config_metadata_button.setToolTip(
|
self.config_metadata_button.setToolTip(
|
||||||
@ -198,7 +223,7 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
ans = self.custom_metadata_widgets
|
ans = self.custom_metadata_widgets
|
||||||
for i in range(len(ans)-1):
|
for i in range(len(ans)-1):
|
||||||
if before is not None and i == 0:
|
if before is not None and i == 0:
|
||||||
pass# Do something
|
pass
|
||||||
if len(ans[i+1].widgets) == 2:
|
if len(ans[i+1].widgets) == 2:
|
||||||
sto(ans[i].widgets[-1], ans[i+1].widgets[1])
|
sto(ans[i].widgets[-1], ans[i+1].widgets[1])
|
||||||
else:
|
else:
|
||||||
@ -206,7 +231,7 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
for c in range(2, len(ans[i].widgets), 2):
|
for c in range(2, len(ans[i].widgets), 2):
|
||||||
sto(ans[i].widgets[c-1], ans[i].widgets[c+1])
|
sto(ans[i].widgets[c-1], ans[i].widgets[c+1])
|
||||||
if after is not None:
|
if after is not None:
|
||||||
pass # Do something
|
pass
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
def do_view_format(self, path, fmt):
|
def do_view_format(self, path, fmt):
|
||||||
@ -290,13 +315,17 @@ class MetadataSingleDialogBase(ResizableDialog):
|
|||||||
show=True)
|
show=True)
|
||||||
return
|
return
|
||||||
|
|
||||||
def update_from_mi(self, mi):
|
def update_from_mi(self, mi, update_sorts=True):
|
||||||
if not mi.is_null('title'):
|
if not mi.is_null('title'):
|
||||||
self.title.current_val = mi.title
|
self.title.current_val = mi.title
|
||||||
|
if update_sorts:
|
||||||
|
self.title_sort.auto_generate()
|
||||||
if not mi.is_null('authors'):
|
if not mi.is_null('authors'):
|
||||||
self.authors.current_val = mi.authors
|
self.authors.current_val = mi.authors
|
||||||
if not mi.is_null('author_sort'):
|
if not mi.is_null('author_sort'):
|
||||||
self.author_sort.current_val = mi.author_sort
|
self.author_sort.current_val = mi.author_sort
|
||||||
|
elif update_sorts:
|
||||||
|
self.author_sort.auto_generate()
|
||||||
if not mi.is_null('rating'):
|
if not mi.is_null('rating'):
|
||||||
try:
|
try:
|
||||||
self.rating.current_val = mi.rating
|
self.rating.current_val = mi.rating
|
||||||
@ -493,7 +522,8 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
|
|||||||
sto(one, two)
|
sto(one, two)
|
||||||
sto(two, three)
|
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)
|
create_row(0, self.title, self.deduce_title_sort_button, self.title_sort)
|
||||||
sto(self.title_sort, self.authors)
|
sto(self.title_sort, self.authors)
|
||||||
@ -502,6 +532,7 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
|
|||||||
create_row(2, self.series, self.remove_unused_series_button,
|
create_row(2, self.series, self.remove_unused_series_button,
|
||||||
self.series_index, icon='trash.png')
|
self.series_index, icon='trash.png')
|
||||||
sto(self.series_index, self.swap_title_author_button)
|
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)
|
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)
|
self.tabs[0].gb = gb = QGroupBox(_('Change cover'), self)
|
||||||
gb.l = l = QGridLayout()
|
gb.l = l = QGridLayout()
|
||||||
gb.setLayout(l)
|
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]):
|
for i, b in enumerate(self.cover.buttons[:3]):
|
||||||
l.addWidget(b, 0, i, 1, 1)
|
l.addWidget(b, 0, i, 1, 1)
|
||||||
sto(b, self.cover.buttons[i+1])
|
sto(b, self.cover.buttons[i+1])
|
||||||
@ -526,10 +557,16 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
|
|||||||
w.setLayout(w.l)
|
w.setLayout(w.l)
|
||||||
l.setMargin(0)
|
l.setMargin(0)
|
||||||
self.splitter.addWidget(w)
|
self.splitter.addWidget(w)
|
||||||
def create_row2(row, widget, button=None):
|
def create_row2(row, widget, button=None, front_button=None):
|
||||||
row += 1
|
row += 1
|
||||||
ql = BuddyLabel(widget)
|
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)
|
l.addWidget(widget, row, 1, 1, 2 if button is None else 1)
|
||||||
if button is not None:
|
if button is not None:
|
||||||
l.addWidget(button, row, 2, 1, 1)
|
l.addWidget(button, row, 2, 1, 1)
|
||||||
@ -544,8 +581,10 @@ class MetadataSingleDialog(MetadataSingleDialogBase): # {{{
|
|||||||
create_row2(1, self.rating)
|
create_row2(1, self.rating)
|
||||||
sto(self.rating, self.tags)
|
sto(self.rating, self.tags)
|
||||||
create_row2(2, self.tags, self.tags_editor_button)
|
create_row2(2, self.tags, self.tags_editor_button)
|
||||||
sto(self.tags_editor_button, self.identifiers)
|
sto(self.tags_editor_button, self.paste_isbn_button)
|
||||||
create_row2(3, self.identifiers, self.clear_identifiers_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)
|
sto(self.clear_identifiers_button, self.timestamp)
|
||||||
create_row2(4, self.timestamp, self.timestamp.clear_button)
|
create_row2(4, self.timestamp, self.timestamp.clear_button)
|
||||||
sto(self.timestamp.clear_button, self.pubdate)
|
sto(self.timestamp.clear_button, self.pubdate)
|
||||||
@ -583,6 +622,7 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
|
|||||||
|
|
||||||
cc_two_column = False
|
cc_two_column = False
|
||||||
one_line_comments_toolbar = True
|
one_line_comments_toolbar = True
|
||||||
|
use_toolbutton_for_config_metadata = False
|
||||||
|
|
||||||
on_drag_enter = pyqtSignal()
|
on_drag_enter = pyqtSignal()
|
||||||
|
|
||||||
@ -618,13 +658,11 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
|
|||||||
self.tabs[0].l.addWidget(gb, 0, 0, 1, 1)
|
self.tabs[0].l.addWidget(gb, 0, 0, 1, 1)
|
||||||
gb.setLayout(tl)
|
gb.setLayout(tl)
|
||||||
|
|
||||||
self.button_box.addButton(self.fetch_metadata_button,
|
self.button_box_layout.insertWidget(1, self.fetch_metadata_button)
|
||||||
QDialogButtonBox.ActionRole)
|
self.button_box_layout.insertWidget(2, self.config_metadata_button)
|
||||||
self.config_metadata_button.setToolButtonStyle(Qt.ToolButtonTextOnly)
|
sto(self.button_box, self.fetch_metadata_button)
|
||||||
self.config_metadata_button.setText(_('Configure metadata downloading'))
|
sto(self.fetch_metadata_button, self.config_metadata_button)
|
||||||
self.button_box.addButton(self.config_metadata_button,
|
sto(self.config_metadata_button, self.title)
|
||||||
QDialogButtonBox.ActionRole)
|
|
||||||
sto(self.button_box, self.title)
|
|
||||||
|
|
||||||
def create_row(row, widget, tab_to, button=None, icon=None, span=1):
|
def create_row(row, widget, tab_to, button=None, icon=None, span=1):
|
||||||
ql = BuddyLabel(widget)
|
ql = BuddyLabel(widget)
|
||||||
@ -642,6 +680,8 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
|
|||||||
sto(widget, tab_to)
|
sto(widget, tab_to)
|
||||||
|
|
||||||
tl.addWidget(self.swap_title_author_button, 0, 0, 2, 1)
|
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,
|
create_row(0, self.title, self.title_sort,
|
||||||
button=self.deduce_title_sort_button, span=2,
|
button=self.deduce_title_sort_button, span=2,
|
||||||
@ -663,6 +703,9 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
|
|||||||
button=self.timestamp.clear_button, icon='trash.png')
|
button=self.timestamp.clear_button, icon='trash.png')
|
||||||
create_row(11, self.identifiers, self.comments,
|
create_row(11, self.identifiers, self.comments,
|
||||||
button=self.clear_identifiers_button, icon='trash.png')
|
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),
|
tl.addItem(QSpacerItem(1, 1, QSizePolicy.Fixed, QSizePolicy.Expanding),
|
||||||
12, 1, 1 ,1)
|
12, 1, 1 ,1)
|
||||||
|
|
||||||
@ -702,7 +745,6 @@ class MetadataSingleDialogAlt1(MetadataSingleDialogBase): # {{{
|
|||||||
gb = QGroupBox(_('Change cover'), tab1)
|
gb = QGroupBox(_('Change cover'), tab1)
|
||||||
l = QGridLayout()
|
l = QGridLayout()
|
||||||
gb.setLayout(l)
|
gb.setLayout(l)
|
||||||
sto(self.swap_title_author_button, self.cover.buttons[0])
|
|
||||||
for i, b in enumerate(self.cover.buttons[:3]):
|
for i, b in enumerate(self.cover.buttons[:3]):
|
||||||
l.addWidget(b, 0, i, 1, 1)
|
l.addWidget(b, 0, i, 1, 1)
|
||||||
sto(b, self.cover.buttons[i+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,
|
def edit_metadata(db, row_list, current_row, parent=None, view_slot=None,
|
||||||
set_current_callback=None):
|
set_current_callback=None):
|
||||||
|
@ -61,7 +61,8 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
|
|
||||||
r('bools_are_tristate', db.prefs, restart_required=True)
|
r('bools_are_tristate', db.prefs, restart_required=True)
|
||||||
r = self.register
|
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)
|
r('edit_metadata_single_layout', gprefs, choices=choices)
|
||||||
|
|
||||||
def initialize(self):
|
def initialize(self):
|
||||||
|
@ -190,7 +190,15 @@ class FieldsModel(QAbstractListModel): # {{{
|
|||||||
return ans | Qt.ItemIsUserCheckable
|
return ans | Qt.ItemIsUserCheckable
|
||||||
|
|
||||||
def restore_defaults(self):
|
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()
|
self.reset()
|
||||||
|
|
||||||
def setData(self, index, val, role):
|
def setData(self, index, val, role):
|
||||||
@ -273,6 +281,9 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form):
|
|||||||
self.fields_view.setModel(self.fields_model)
|
self.fields_view.setModel(self.fields_model)
|
||||||
self.fields_model.dataChanged.connect(self.changed_signal)
|
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):
|
def configure_plugin(self):
|
||||||
for index in self.sources_view.selectionModel().selectedRows():
|
for index in self.sources_view.selectionModel().selectedRows():
|
||||||
plugin = self.sources_model.data(index, Qt.UserRole)
|
plugin = self.sources_model.data(index, Qt.UserRole)
|
||||||
|
@ -77,8 +77,8 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Downloaded metadata fields</string>
|
<string>Downloaded metadata fields</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item>
|
<item row="0" column="0" colspan="2">
|
||||||
<widget class="QListView" name="fields_view">
|
<widget class="QListView" name="fields_view">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>If you uncheck any fields, metadata for those fields will not be downloaded</string>
|
<string>If you uncheck any fields, metadata for those fields will not be downloaded</string>
|
||||||
@ -88,6 +88,20 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -75,6 +75,8 @@ class PluginModel(QAbstractItemModel, SearchQueryParser): # {{{
|
|||||||
|
|
||||||
def find(self, query):
|
def find(self, query):
|
||||||
query = query.strip()
|
query = query.strip()
|
||||||
|
if not query:
|
||||||
|
return QModelIndex()
|
||||||
matches = self.parse(query)
|
matches = self.parse(query)
|
||||||
if not matches:
|
if not matches:
|
||||||
return QModelIndex()
|
return QModelIndex()
|
||||||
@ -87,6 +89,8 @@ class PluginModel(QAbstractItemModel, SearchQueryParser): # {{{
|
|||||||
|
|
||||||
def find_next(self, idx, query, backwards=False):
|
def find_next(self, idx, query, backwards=False):
|
||||||
query = query.strip()
|
query = query.strip()
|
||||||
|
if not query:
|
||||||
|
return idx
|
||||||
matches = self.parse(query)
|
matches = self.parse(query)
|
||||||
if not matches:
|
if not matches:
|
||||||
return idx
|
return idx
|
||||||
|
@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en'
|
|||||||
class StorePlugin(object): # {{{
|
class StorePlugin(object): # {{{
|
||||||
'''
|
'''
|
||||||
A plugin representing an online ebook repository (store). The store can
|
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.
|
ebooks.
|
||||||
|
|
||||||
Note that this class is the base class for these plugins, however, to
|
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
|
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
|
between the author's affiliate id and calibre's affiliate id so that
|
||||||
70% of the time the author's id is used.
|
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):
|
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.price = price
|
||||||
s.detail_item = id
|
s.detail_item = id
|
||||||
s.drm = SearchResult.DRM_LOCKED
|
s.drm = SearchResult.DRM_LOCKED
|
||||||
s.formats = 'EPUB'
|
s.formats = 'ePub'
|
||||||
|
|
||||||
yield s
|
yield s
|
||||||
|
@ -47,7 +47,7 @@ class SearchDialog(QDialog, Ui_Dialog):
|
|||||||
# per search basis.
|
# per search basis.
|
||||||
stores_group_layout = QVBoxLayout()
|
stores_group_layout = QVBoxLayout()
|
||||||
self.stores_group.setLayout(stores_group_layout)
|
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 = QCheckBox(x)
|
||||||
cbox.setChecked(True)
|
cbox.setChecked(True)
|
||||||
stores_group_layout.addWidget(cbox)
|
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['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_col'] = self.results_view.model().sort_col
|
||||||
self.config['sort_order'] = self.results_view.model().sort_order
|
self.config['sort_order'] = self.results_view.model().sort_order
|
||||||
|
self.config['open_external'] = self.open_external.isChecked()
|
||||||
|
|
||||||
store_check = {}
|
store_check = {}
|
||||||
for n in self.store_plugins:
|
for n in self.store_plugins:
|
||||||
@ -179,6 +180,8 @@ class SearchDialog(QDialog, Ui_Dialog):
|
|||||||
else:
|
else:
|
||||||
self.resize_columns()
|
self.resize_columns()
|
||||||
|
|
||||||
|
self.open_external.setChecked(self.config.get('open_external', False))
|
||||||
|
|
||||||
store_check = self.config.get('store_checked', None)
|
store_check = self.config.get('store_checked', None)
|
||||||
if store_check:
|
if store_check:
|
||||||
for n in store_check:
|
for n in store_check:
|
||||||
@ -212,7 +215,7 @@ class SearchDialog(QDialog, Ui_Dialog):
|
|||||||
|
|
||||||
def open_store(self, index):
|
def open_store(self, index):
|
||||||
result = self.results_view.model().get_result(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):
|
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():
|
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>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>215</width>
|
<width>215</width>
|
||||||
<height>116</height>
|
<height>93</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
@ -101,6 +101,16 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QSplitter" name="splitter_2">
|
<widget class="QSplitter" name="splitter_2">
|
||||||
|
@ -76,7 +76,7 @@ class WaterstonesUKStore(BasicStoreConfig, StorePlugin):
|
|||||||
s.detail_item = id
|
s.detail_item = id
|
||||||
formats = []
|
formats = []
|
||||||
if epub:
|
if epub:
|
||||||
formats.append('EPUB')
|
formats.append('ePub')
|
||||||
if pdf:
|
if pdf:
|
||||||
formats.append('PDF')
|
formats.append('PDF')
|
||||||
s.formats = ', '.join(formats)
|
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)
|
self.library_view.select_rows(ids)
|
||||||
# refreshing the tags view happens at the emit()/call() site
|
# 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
|
Open the manage authors dialog
|
||||||
'''
|
'''
|
||||||
db = self.library_view.model().db
|
db = self.library_view.model().db
|
||||||
editor = EditAuthorsDialog(parent, db, id)
|
editor = EditAuthorsDialog(parent, db, id, select_sort)
|
||||||
d = editor.exec_()
|
d = editor.exec_()
|
||||||
if d:
|
if d:
|
||||||
for (id, old_author, new_author, new_sort) in editor.result:
|
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)
|
self.registerField("device", self.device_view)
|
||||||
|
|
||||||
def initializePage(self):
|
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)
|
' not in the list, choose a "%s" device.')%Device.manufacturer)
|
||||||
self.man_model = ManufacturerModel()
|
self.man_model = ManufacturerModel()
|
||||||
self.manufacturer_view.setModel(self.man_model)
|
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.magick.draw import thumbnail
|
||||||
from calibre.utils.zipfile import ZipFile, ZipInfo
|
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',
|
'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher',
|
||||||
'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid']
|
'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid']
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ class CSV_XML(CatalogPlugin): # {{{
|
|||||||
dest = 'sort_by',
|
dest = 'sort_by',
|
||||||
action = None,
|
action = None,
|
||||||
help = _('Output field to sort on.\n'
|
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"
|
"Default: '%default'\n"
|
||||||
"Applies to: CSV, XML output formats"))]
|
"Applies to: CSV, XML output formats"))]
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ class CSV_XML(CatalogPlugin): # {{{
|
|||||||
|
|
||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
opts_dict = vars(opts)
|
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']:
|
if opts.connected_device['is_device_connected']:
|
||||||
log(" connected_device: %s" % opts.connected_device['name'])
|
log(" connected_device: %s" % opts.connected_device['name'])
|
||||||
if opts_dict['search_text']:
|
if opts_dict['search_text']:
|
||||||
@ -126,8 +126,11 @@ class CSV_XML(CatalogPlugin): # {{{
|
|||||||
for field in fields:
|
for field in fields:
|
||||||
if field.startswith('#'):
|
if field.startswith('#'):
|
||||||
item = db.get_field(entry['id'],field,index_is_id=True)
|
item = db.get_field(entry['id'],field,index_is_id=True)
|
||||||
|
elif field == 'title_sort':
|
||||||
|
item = entry['sort']
|
||||||
else:
|
else:
|
||||||
item = entry[field]
|
item = entry[field]
|
||||||
|
|
||||||
if item is None:
|
if item is None:
|
||||||
outstr.append('""')
|
outstr.append('""')
|
||||||
continue
|
continue
|
||||||
@ -167,7 +170,7 @@ class CSV_XML(CatalogPlugin): # {{{
|
|||||||
item = getattr(E, field.replace('#','_'))(val)
|
item = getattr(E, field.replace('#','_'))(val)
|
||||||
record.append(item)
|
record.append(item)
|
||||||
|
|
||||||
for field in ('id', 'uuid', 'title', 'publisher', 'rating', 'size',
|
for field in ('id', 'uuid', 'publisher', 'rating', 'size',
|
||||||
'isbn','ondevice'):
|
'isbn','ondevice'):
|
||||||
if field in fields:
|
if field in fields:
|
||||||
val = r[field]
|
val = r[field]
|
||||||
@ -178,6 +181,10 @@ class CSV_XML(CatalogPlugin): # {{{
|
|||||||
item = getattr(E, field)(val)
|
item = getattr(E, field)(val)
|
||||||
record.append(item)
|
record.append(item)
|
||||||
|
|
||||||
|
if 'title' in fields:
|
||||||
|
title = E.title(r['title'], sort=r['sort'])
|
||||||
|
record.append(title)
|
||||||
|
|
||||||
if 'authors' in fields:
|
if 'authors' in fields:
|
||||||
aus = E.authors(sort=r['author_sort'])
|
aus = E.authors(sort=r['author_sort'])
|
||||||
for au in r['authors']:
|
for au in r['authors']:
|
||||||
@ -367,7 +374,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
try:
|
try:
|
||||||
item = html2text(item)
|
item = html2text(item)
|
||||||
except:
|
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))
|
bibtex_entry.append(u'note = "%s"' % bibtexdict.utf8ToBibtex(item))
|
||||||
|
|
||||||
elif field == 'isbn' :
|
elif field == 'isbn' :
|
||||||
@ -461,17 +468,17 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
if opts.bibfile_enc in bibfile_enc :
|
if opts.bibfile_enc in bibfile_enc :
|
||||||
bibfile_enc = opts.bibfile_enc
|
bibfile_enc = opts.bibfile_enc
|
||||||
else :
|
else :
|
||||||
log(" WARNING: incorrect --choose-encoding flag, revert to default")
|
log.warn("Incorrect --choose-encoding flag, revert to default")
|
||||||
bibfile_enc = bibfile_enc[0]
|
bibfile_enc = bibfile_enc[0]
|
||||||
if opts.bibfile_enctag in bibfile_enctag :
|
if opts.bibfile_enctag in bibfile_enctag :
|
||||||
bibfile_enctag = opts.bibfile_enctag
|
bibfile_enctag = opts.bibfile_enctag
|
||||||
else :
|
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]
|
bibfile_enctag = bibfile_enctag[0]
|
||||||
if opts.bib_entry in bib_entry :
|
if opts.bib_entry in bib_entry :
|
||||||
bib_entry = opts.bib_entry
|
bib_entry = opts.bib_entry
|
||||||
else :
|
else :
|
||||||
log(" WARNING: incorrect --entry-type flag, revert to default")
|
log.warn("Incorrect --entry-type flag, revert to default")
|
||||||
bib_entry = bib_entry[0]
|
bib_entry = bib_entry[0]
|
||||||
|
|
||||||
if opts.verbose:
|
if opts.verbose:
|
||||||
@ -528,7 +535,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
elif opts.impcit == 'True' :
|
elif opts.impcit == 'True' :
|
||||||
citation_bibtex= True
|
citation_bibtex= True
|
||||||
else :
|
else :
|
||||||
log(" WARNING: incorrect --create-citation, revert to default")
|
log.warn("Incorrect --create-citation, revert to default")
|
||||||
citation_bibtex= True
|
citation_bibtex= True
|
||||||
else :
|
else :
|
||||||
citation_bibtex= opts.impcit
|
citation_bibtex= opts.impcit
|
||||||
@ -540,7 +547,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
elif opts.addfiles == 'True' :
|
elif opts.addfiles == 'True' :
|
||||||
addfiles_bibtex = True
|
addfiles_bibtex = True
|
||||||
else :
|
else :
|
||||||
log(" WARNING: incorrect --add-files-path, revert to default")
|
log.warn("Incorrect --add-files-path, revert to default")
|
||||||
addfiles_bibtex= True
|
addfiles_bibtex= True
|
||||||
else :
|
else :
|
||||||
addfiles_bibtex = opts.addfiles
|
addfiles_bibtex = opts.addfiles
|
||||||
@ -558,7 +565,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
if bib_entry == 'book' :
|
if bib_entry == 'book' :
|
||||||
nb_books = len(filter(check_entry_book_valid, data))
|
nb_books = len(filter(check_entry_book_valid, data))
|
||||||
if nb_books < nb_entries :
|
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
|
nb_entries = nb_books
|
||||||
|
|
||||||
# If connected device, add 'On Device' values to data
|
# If connected device, add 'On Device' values to data
|
||||||
@ -944,6 +951,7 @@ class EPUB_MOBI(CatalogPlugin):
|
|||||||
catalog.createDirectoryStructure()
|
catalog.createDirectoryStructure()
|
||||||
catalog.copyResources()
|
catalog.copyResources()
|
||||||
catalog.buildSources()
|
catalog.buildSources()
|
||||||
|
Options managed in gui2.catalog.catalog_epub_mobi.py
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# A single number creates 'Last x days' only.
|
# 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.filenames import ascii_filename
|
||||||
from calibre.utils.date import utcnow, now as nowf, utcfromtimestamp
|
from calibre.utils.date import utcnow, now as nowf, utcfromtimestamp
|
||||||
from calibre.utils.config import prefs, tweaks, from_json, to_json
|
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.utils.search_query_parser import saved_searches, set_saved_searches
|
||||||
from calibre.ebooks import BOOK_EXTENSIONS, check_ebook_format
|
from calibre.ebooks import BOOK_EXTENSIONS, check_ebook_format
|
||||||
from calibre.utils.magick.draw import save_cover_data_to
|
from calibre.utils.magick.draw import save_cover_data_to
|
||||||
@ -1920,6 +1920,18 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
result.append(r)
|
result.append(r)
|
||||||
return ' & '.join(result).replace('|', ',')
|
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):
|
def _set_authors(self, id, authors, allow_case_change=False):
|
||||||
if not authors:
|
if not authors:
|
||||||
authors = [_('Unknown')]
|
authors = [_('Unknown')]
|
||||||
@ -1933,14 +1945,17 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
a = a.strip().replace(',', '|')
|
a = a.strip().replace(',', '|')
|
||||||
if not isinstance(a, unicode):
|
if not isinstance(a, unicode):
|
||||||
a = a.decode(preferred_encoding, 'replace')
|
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:
|
if aus:
|
||||||
aid, name = aus[0]
|
aid, name, sort = aus[0]
|
||||||
# Handle change of case
|
# Handle change of case
|
||||||
if name != a:
|
if name != a:
|
||||||
if allow_case_change:
|
if allow_case_change:
|
||||||
self.conn.execute('''UPDATE authors
|
ns = author_to_author_sort(a.replace('|', ','))
|
||||||
SET name=? WHERE id=?''', (a, aid))
|
if strcmp(sort, ns) == 0:
|
||||||
|
sort = ns
|
||||||
|
self.conn.execute('''UPDATE authors SET name=?, sort=?
|
||||||
|
WHERE id=?''', (a, sort, aid))
|
||||||
case_change = True
|
case_change = True
|
||||||
else:
|
else:
|
||||||
a = name
|
a = name
|
||||||
@ -1957,17 +1972,14 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
bks = self.conn.get('''SELECT book FROM books_authors_link
|
bks = self.conn.get('''SELECT book FROM books_authors_link
|
||||||
WHERE author=?''', (aid,))
|
WHERE author=?''', (aid,))
|
||||||
books_to_refresh |= set([bk[0] for bk in bks])
|
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)
|
ss = self.author_sort_from_book(id, index_is_id=True)
|
||||||
self.conn.execute('UPDATE books SET author_sort=? WHERE id=?',
|
self._update_author_in_cache(id, ss, final_authors)
|
||||||
(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)
|
|
||||||
return books_to_refresh
|
return books_to_refresh
|
||||||
|
|
||||||
def set_authors(self, id, authors, notify=True, commit=True,
|
def set_authors(self, id, authors, notify=True, commit=True,
|
||||||
@ -2273,6 +2285,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
return []
|
return []
|
||||||
return result
|
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):
|
def set_sort_field_for_author(self, old_id, new_sort, commit=True, notify=False):
|
||||||
self.conn.execute('UPDATE authors SET sort=? WHERE id=?', \
|
self.conn.execute('UPDATE authors SET sort=? WHERE id=?', \
|
||||||
(new_sort.strip(), old_id))
|
(new_sort.strip(), old_id))
|
||||||
@ -3038,7 +3056,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
'''
|
'''
|
||||||
if prefix is None:
|
if prefix is None:
|
||||||
prefix = self.library_path
|
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',
|
'timestamp', 'size', 'tags', 'comments', 'series', 'series_index',
|
||||||
'uuid', 'pubdate', 'last_modified', 'identifiers'])
|
'uuid', 'pubdate', 'last_modified', 'identifiers'])
|
||||||
for x in self.custom_column_num_map:
|
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:
|
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 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.
|
* 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 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.
|
* 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 ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2009-11-06 19:11+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Afrikaans <af@li.org>\n"
|
"Language-Team: Afrikaans <af@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -934,7 +934,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -942,7 +942,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-01-03 01:54+0000\n"
|
||||||
"Last-Translator: Amr Hesham <Unknown>\n"
|
"Last-Translator: Amr Hesham <Unknown>\n"
|
||||||
"Language-Team: Arabic <ar@li.org>\n"
|
"Language-Team: Arabic <ar@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "جهاز أبل"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "التواصل عن طريق 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "تم الكشف عن جهاز ابل, يتم تشغيل iTunes, الرجاء الانتظار..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d من %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "تم"
|
msgstr "تم"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1005,7 +1005,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "الأخبار"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1013,7 +1013,7 @@ msgstr "الأخبار"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "الفهرس"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "تواصل معا iTunes"
|
msgstr "تواصل معا iTunes"
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-01-31 21:37+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Asturian <ast@li.org>\n"
|
"Language-Team: Asturian <ast@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -934,7 +934,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -942,7 +942,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -6,14 +6,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.4.51\n"
|
"Project-Id-Version: calibre 0.4.51\n"
|
||||||
"Report-Msgid-Bugs-To: \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-03-30 01:18+0000\n"
|
"PO-Revision-Date: 2011-05-02 10:13+0000\n"
|
||||||
"Last-Translator: Yassen Nikolov <Unknown>\n"
|
"Last-Translator: airmaxbg <airmax_reg@abv.bg>\n"
|
||||||
"Language-Team: bg\n"
|
"Language-Team: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
@ -193,13 +193,13 @@ msgstr "Основен"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148
|
||||||
msgid "Customize"
|
msgid "Customize"
|
||||||
msgstr ""
|
msgstr "Персонализиране"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:156
|
#: /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:41
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr ""
|
msgstr "Не може да се конфигурира"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
|
||||||
msgid "File type"
|
msgid "File type"
|
||||||
@ -234,7 +234,7 @@ msgstr "Предпочитания"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:609
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:609
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
||||||
msgid "Store"
|
msgid "Store"
|
||||||
msgstr ""
|
msgstr "Съхраняване"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:18
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:18
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -271,6 +271,9 @@ msgid ""
|
|||||||
"Textile references to images. The referenced images as well as the TXT file "
|
"Textile references to images. The referenced images as well as the TXT file "
|
||||||
"are added to the archive."
|
"are added to the archive."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Създаване на TXTZ архив когато TXT файл е внесъл съдържащи маркови или "
|
||||||
|
"текстилни справки към снимки. Съответните изображения както и TXT файлове се "
|
||||||
|
"добавят към архива."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:168
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:168
|
||||||
msgid "Extract cover from comic files"
|
msgid "Extract cover from comic files"
|
||||||
@ -888,60 +891,60 @@ msgstr "Кеширай обложки от iTunes/iBooks"
|
|||||||
msgid "Enable to cache and display covers from iTunes/iBooks"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr "Разреши кеширане и показване на обложки от 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"
|
msgid "Apple device"
|
||||||
msgstr "Apple устройство"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Комуникирай с 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Apple устройство разпознато, стартиране на iTunes, моля изчакайте ..."
|
"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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d от %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "завършено"
|
msgstr "завършено"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -957,7 +960,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Новини"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -965,7 +968,7 @@ msgstr "Новини"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Каталог"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-12-11 02:29+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Bengali <bn@li.org>\n"
|
"Language-Team: Bengali <bn@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -929,7 +929,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -937,7 +937,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-01-18 21:03+0000\n"
|
||||||
"Last-Translator: Senad Sopovic <Unknown>\n"
|
"Last-Translator: Senad Sopovic <Unknown>\n"
|
||||||
"Language-Team: Bosnian <bs@li.org>\n"
|
"Language-Team: Bosnian <bs@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "Apple uređah"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "završeno"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -929,7 +929,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Vijesti"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -937,7 +937,7 @@ msgstr "Vijesti"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Katalog"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: ca\n"
|
"Project-Id-Version: ca\n"
|
||||||
"Report-Msgid-Bugs-To: \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-27 18:21+0000\n"
|
"PO-Revision-Date: 2011-04-30 18:09+0000\n"
|
||||||
"Last-Translator: FerranRius <frius64@hotmail.com>\n"
|
"Last-Translator: FerranRius <frius64@hotmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
|
||||||
msgid "Kindle books from Amazon.uk"
|
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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
||||||
msgid "Ebooks for readers."
|
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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
|
||||||
msgid "Feel every word"
|
msgid "Feel every word"
|
||||||
msgstr ""
|
msgstr "Sentiu cada paraula"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
|
||||||
msgid "Foyles of London, online"
|
msgid "Foyles of London, online"
|
||||||
msgstr ""
|
msgstr "Foyles de Londres en línia"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
||||||
msgid "Kindle eBooks"
|
msgid "Kindle eBooks"
|
||||||
msgstr ""
|
msgstr "Llibres per al Kindle"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||||
msgid "Conversion Input"
|
msgid "Conversion Input"
|
||||||
@ -936,20 +936,20 @@ msgstr ""
|
|||||||
"Habilita que les portades d'iTunes/iBooks es visualitzin i es desin a la "
|
"Habilita que les portades d'iTunes/iBooks es visualitzin i es desin a la "
|
||||||
"memòria cau"
|
"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"
|
msgid "Apple device"
|
||||||
msgstr "Dispositiu Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Comunica't amb 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"S'ha detectat un dispositiu Apple, s'està engegant l'iTunes, espereu ..."
|
"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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"los des de la biblioteca de l'iTunes a l'escriptori i després afegiu-los a "
|
||||||
"la finestra de la biblioteca del calibre."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "S'està actualitzant el llistat de metadades del dispositiu..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d de %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "s'ha acabat"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -989,7 +989,7 @@ msgstr ""
|
|||||||
"Suprimiu-los amb l'aplicació de l'iBooks.\n"
|
"Suprimiu-los amb l'aplicació de l'iBooks.\n"
|
||||||
"Feu clic a «Mostra detalls» per a la llista."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -997,7 +997,7 @@ msgstr ""
|
|||||||
"No s'ha pogut convertir algunes portades.\n"
|
"No s'ha pogut convertir algunes portades.\n"
|
||||||
"Feu clic a «Mostra detalls» per a la llista."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1013,7 +1013,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Notícies"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1021,7 +1021,7 @@ msgstr "Notícies"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Catàleg"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Comunica't amb l'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
|
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:123
|
||||||
msgid "Ids"
|
msgid "Ids"
|
||||||
msgstr ""
|
msgstr "Identificadors"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
|
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
|
||||||
msgid "Book %s of <span class=\"series_name\">%s</span>"
|
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/book_details.py:144
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:978
|
#: /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/gui2/library/models.py:73
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
||||||
msgid "Modified"
|
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:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
|
#: /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 "
|
"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."
|
"are running jobs, they will be silently aborted, so use with care."
|
||||||
msgstr ""
|
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/main.py:69
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:678
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:210
|
||||||
msgid "Main Interface"
|
msgid "Main Interface"
|
||||||
msgstr ""
|
msgstr "Interfície principal"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
|
||||||
msgid "Select displayed metadata"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
|
||||||
msgid "Move up"
|
msgid "Move up"
|
||||||
msgstr ""
|
msgstr "Desplaça cap amunt"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
|
||||||
msgid "Move down"
|
msgid "Move down"
|
||||||
msgstr ""
|
msgstr "Desplaça cap avall"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
|
||||||
msgid "Use &Roman numerals for series"
|
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 "
|
"Note that <b>comments</b> will always be displayed at the end, regardless of "
|
||||||
"the position you assign here."
|
"the position you assign here."
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:217
|
||||||
msgid "Tags browser category &partitioning method:"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:339
|
||||||
msgid "Delete current search"
|
msgid "Delete current search"
|
||||||
msgstr ""
|
msgstr "Suprimeix la cerca actual"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
|
||||||
msgid "No search is selected"
|
msgid "No search is selected"
|
||||||
msgstr ""
|
msgstr "No s'ha seleccionat cap cerca"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
|
||||||
msgid "The selected search will be <b>permanently deleted</b>. Are you sure?"
|
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 "
|
"Save current search under the name shown in the box. Press and hold for a "
|
||||||
"pop-up options menu."
|
"pop-up options menu."
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:458
|
||||||
msgid "Create saved search"
|
msgid "Create saved search"
|
||||||
msgstr ""
|
msgstr "Crea una cerca per desar"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
|
||||||
msgid "Delete saved search"
|
msgid "Delete saved search"
|
||||||
msgstr ""
|
msgstr "Suprimeix la cerca desada"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
|
||||||
msgid "Manage saved searches"
|
msgid "Manage saved searches"
|
||||||
msgstr ""
|
msgstr "Gestiona les cerques desades"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
|
||||||
msgid "*Current search"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py:51
|
||||||
msgid "Updating book cache"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:42
|
||||||
msgid "Checking last download date."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:48
|
||||||
msgid "Downloading book list from MobileRead."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:61
|
||||||
msgid "Processing books."
|
msgid "Processing books."
|
||||||
msgstr ""
|
msgstr "S'està processant els llibres."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
|
||||||
msgid "%s of %s books processed."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/mobileread_plugin.py:62
|
||||||
msgid "Updating MobileRead book cache..."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:69
|
||||||
msgid "&Query:"
|
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:72
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:63
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
|
||||||
msgid "&Price:"
|
msgid "&Price:"
|
||||||
msgstr ""
|
msgstr "&Preu:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
|
||||||
msgid "Titl&e/Author/Price ..."
|
msgid "Titl&e/Author/Price ..."
|
||||||
msgstr ""
|
msgstr "Tít&ol/autor/preu..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
||||||
msgid "DRM"
|
msgid "DRM"
|
||||||
@ -15973,7 +15980,7 @@ msgstr "buit"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
|
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
|
||||||
msgid "Invalid boolean query \"{0}\""
|
msgid "Invalid boolean query \"{0}\""
|
||||||
msgstr ""
|
msgstr "Consulta booleana no vàlida «{0}»"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -17192,6 +17199,8 @@ msgstr "La data de publicació"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
|
#: /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"
|
msgid "The date when the metadata for this book record was last modified"
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48
|
||||||
msgid "The calibre internal id"
|
msgid "The calibre internal id"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-04-24 21:34+0000\n"
|
||||||
"Last-Translator: Marek Sušický <Unknown>\n"
|
"Last-Translator: Marek Sušický <Unknown>\n"
|
||||||
"Language-Team: Czech <cs@li.org>\n"
|
"Language-Team: Czech <cs@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "Zařízení Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Komunikovat s 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Nalezeno zařízení Apple, spouštění iTunes, čekejte..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"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."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Záznamy metadat v zařízení se aktualizují..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d z %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "dokončeno"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -954,7 +954,7 @@ msgstr ""
|
|||||||
"Smazat pomocí aplikace iBooks.\n"
|
"Smazat pomocí aplikace iBooks.\n"
|
||||||
"Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -962,7 +962,7 @@ msgstr ""
|
|||||||
"Některé obálky nelze převést.\n"
|
"Některé obálky nelze převést.\n"
|
||||||
"Pro zobrazení seznamu klepněte na 'Zobrazit podrobnosti'."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -978,7 +978,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Zprávy"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -986,7 +986,7 @@ msgstr "Zprávy"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Katalog"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Komunikovat s iTunes."
|
msgstr "Komunikovat s iTunes."
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-12-19 12:26+0000\n"
|
||||||
"Last-Translator: Glenn <Unknown>\n"
|
"Last-Translator: Glenn <Unknown>\n"
|
||||||
"Language-Team: Danish <da@li.org>\n"
|
"Language-Team: Danish <da@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "Apple enhed"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Kommunikér med 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Apple-enhed fundet, starter iTunes, vent venligst..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"Kan ikke kopiere bøger direkte fra iDevice. Træk fra iTunes-bibliotek til "
|
||||||
"skrivebord, tilføj herefter til calibres biblioteksvindue."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Opdaterer enhed metadata listen..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d af %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "afsluttet"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -957,7 +957,7 @@ msgstr ""
|
|||||||
"Sletter ved at anvende iBooks app.\n"
|
"Sletter ved at anvende iBooks app.\n"
|
||||||
"Klik 'Show Details' for en liste."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -965,7 +965,7 @@ msgstr ""
|
|||||||
"Nogle omslagsdele kunne ikke konverteres.\n"
|
"Nogle omslagsdele kunne ikke konverteres.\n"
|
||||||
"Klik 'Show Details' for en liste."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -981,7 +981,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Nyheder"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -989,7 +989,7 @@ msgstr "Nyheder"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Katalog"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Kommunikér med iTunes."
|
msgstr "Kommunikér med iTunes."
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: de\n"
|
"Project-Id-Version: de\n"
|
||||||
"Report-Msgid-Bugs-To: \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 15:02+0000\n"
|
"PO-Revision-Date: 2011-05-01 08:37+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Armin Geller <Unknown>\n"
|
||||||
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
"Generated-By: pygettext.py 1.5\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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
|
||||||
msgid "Kindle books from Amazon.uk"
|
msgid "Kindle books from Amazon.uk"
|
||||||
msgstr ""
|
msgstr "Kindle Bücher fon Amazon.uk"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
||||||
msgid "Ebooks for readers."
|
msgid "Ebooks for readers."
|
||||||
@ -932,19 +932,19 @@ msgstr ""
|
|||||||
"Ermöglicht das Zwischenspeichern und anzeigen von Umschlägen aus "
|
"Ermöglicht das Zwischenspeichern und anzeigen von Umschlägen aus "
|
||||||
"iTunes/iBooks"
|
"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"
|
msgid "Apple device"
|
||||||
msgstr "Apple- Gerät"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Kommunikation mit 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Gerät von Apple entdeckt, starte iTunes, einen Moment bitte..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"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."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Aktualisiere die Liste der Geräte-Metadaten..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d von %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "abgeschlossen"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -983,7 +983,7 @@ msgstr ""
|
|||||||
"Zum Löschen die iBooks App verwenden.\n"
|
"Zum Löschen die iBooks App verwenden.\n"
|
||||||
"Klicken Sie 'Zeige Details' für eine Liste."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -991,7 +991,7 @@ msgstr ""
|
|||||||
"Einige Umschlagbilder konnten nicht konvertiert werden.\n"
|
"Einige Umschlagbilder konnten nicht konvertiert werden.\n"
|
||||||
"Klicken Sie 'Zeige Details' für eine Liste."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1007,7 +1007,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Nachrichten"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1015,7 +1015,7 @@ msgstr "Nachrichten"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Katalog"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Kommunikation mit iTunes."
|
msgstr "Kommunikation mit iTunes."
|
||||||
|
|
||||||
@ -4771,7 +4771,7 @@ msgstr "Anmerkungen abrufen (experimentell)"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:56
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:56
|
||||||
msgid "Not supported"
|
msgid "Not supported"
|
||||||
msgstr ""
|
msgstr "Nicht unterstützt"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:57
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:57
|
||||||
msgid "Fetching annotations is not supported for this device"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:545
|
||||||
msgid "Applying changed metadata"
|
msgid "Applying changed metadata"
|
||||||
msgstr ""
|
msgstr "Geänerte Metadaten übernehmen"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:606
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:606
|
||||||
msgid "Some failures"
|
msgid "Some failures"
|
||||||
@ -8571,11 +8571,11 @@ msgstr "Format"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:50
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:50
|
||||||
msgid "Existing"
|
msgid "Existing"
|
||||||
msgstr ""
|
msgstr "Bestehende"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:51
|
||||||
msgid "Convertible"
|
msgid "Convertible"
|
||||||
msgstr ""
|
msgstr "konvertierbar"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:43
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:43
|
||||||
msgid "Choose location for calibre library"
|
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.py:990
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:587
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:587
|
||||||
msgid "Delete saved search/replace"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:991
|
||||||
msgid "The selected saved search/replace will be deleted. Are you sure?"
|
msgid "The selected saved search/replace will be deleted. Are you sure?"
|
||||||
msgstr ""
|
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:1008
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1016
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1016
|
||||||
msgid "Save search/replace"
|
msgid "Save search/replace"
|
||||||
msgstr ""
|
msgstr "Speichern der Suchen/Ersetzen-Aktion"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1009
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1009
|
||||||
msgid "Search/replace name:"
|
msgid "Search/replace name:"
|
||||||
msgstr ""
|
msgstr "Suchen/Ersetzen-Aktion Name:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1017
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1017
|
||||||
msgid ""
|
msgid ""
|
||||||
"That saved search/replace already exists and will be overwritten. Are you "
|
"That saved search/replace already exists and will be overwritten. Are you "
|
||||||
"sure?"
|
"sure?"
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:524
|
||||||
msgid "Edit Meta information"
|
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/gui2/library/models.py:73
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
||||||
msgid "Modified"
|
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:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:476
|
||||||
msgid "Set metadata for the book from the selected format"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:483
|
||||||
msgid "Add a format to this book"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:490
|
||||||
msgid "Remove the selected format from this book"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:755
|
||||||
msgid "Invalid cover"
|
msgid "Invalid cover"
|
||||||
@ -11946,11 +11949,11 @@ msgstr "Herunterladen von Metadaten gestartet"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:111
|
||||||
msgid "(Failed metadata)"
|
msgid "(Failed metadata)"
|
||||||
msgstr ""
|
msgstr "(Fehlerhafte Metadaten)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:113
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:113
|
||||||
msgid "(Failed cover)"
|
msgid "(Failed cover)"
|
||||||
msgstr ""
|
msgstr "(Fehlerhafter Umschlag)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:190
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:190
|
||||||
msgid "Downloaded %d of %d"
|
msgid "Downloaded %d of %d"
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-03-04 12:33+0000\n"
|
||||||
"Last-Translator: cosmix <Unknown>\n"
|
"Last-Translator: cosmix <Unknown>\n"
|
||||||
"Language-Team: Greek <el@li.org>\n"
|
"Language-Team: Greek <el@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "Συσκευή Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Επικοινωνία με iTunes/iBook"
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Συσκευή της Apple εντοπίστηκε, έναρξη iTunes, παρακαλώ περιμένετε..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Ενημέρωση καταλόγου μεταδεδομένων της συσκευής"
|
msgstr "Ενημέρωση καταλόγου μεταδεδομένων της συσκευής"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d από %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "ολοκληρώθηκε"
|
msgstr "ολοκληρώθηκε"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -975,7 +975,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Νέα"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -983,7 +983,7 @@ msgstr "Νέα"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Κατάλογος"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Επικοινωνία με το iTunes"
|
msgstr "Επικοινωνία με το iTunes"
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-05-21 07:30+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: English (Australia) <en_AU@li.org>\n"
|
"Language-Team: English (Australia) <en_AU@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -929,7 +929,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -937,7 +937,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-02-27 02:43+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: English (Canada) <en_CA@li.org>\n"
|
"Language-Team: English (Canada) <en_CA@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -938,7 +938,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -946,7 +946,7 @@ msgstr "News"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-02-15 08:46+0000\n"
|
||||||
"Last-Translator: Vladimir Oka <Unknown>\n"
|
"Last-Translator: Vladimir Oka <Unknown>\n"
|
||||||
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
|
"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
@ -923,28 +923,28 @@ msgstr ""
|
|||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -954,7 +954,7 @@ msgstr ""
|
|||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -962,7 +962,7 @@ msgstr ""
|
|||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -978,7 +978,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -986,7 +986,7 @@ msgstr "News"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Catalogue"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Communicate with iTunes."
|
msgstr "Communicate with iTunes."
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-01-09 00:03+0000\n"
|
||||||
"Last-Translator: Kalle Kniivilä <kalle@kniivila.net>\n"
|
"Last-Translator: Kalle Kniivilä <kalle@kniivila.net>\n"
|
||||||
"Language-Team: Esperanto <eo@li.org>\n"
|
"Language-Team: Esperanto <eo@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -965,7 +965,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -973,7 +973,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -10,14 +10,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: es\n"
|
"Project-Id-Version: es\n"
|
||||||
"Report-Msgid-Bugs-To: \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-23 10:33+0000\n"
|
"PO-Revision-Date: 2011-05-02 12:20+0000\n"
|
||||||
"Last-Translator: Jellby <Unknown>\n"
|
"Last-Translator: Jellby <Unknown>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
|
||||||
msgid "Kindle books from Amazon.uk"
|
msgid "Kindle books from Amazon.uk"
|
||||||
msgstr ""
|
msgstr "Libros Kindle de Amazon.uk"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
||||||
msgid "Ebooks for readers."
|
msgid "Ebooks for readers."
|
||||||
@ -622,15 +622,15 @@ msgstr "Su libro. Su modo."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
|
||||||
msgid "Feel every word"
|
msgid "Feel every word"
|
||||||
msgstr ""
|
msgstr "Detectar todas las palabras"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1189
|
||||||
msgid "Foyles of London, online"
|
msgid "Foyles of London, online"
|
||||||
msgstr ""
|
msgstr "Foyles de Londres, en línea"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
||||||
msgid "Kindle eBooks"
|
msgid "Kindle eBooks"
|
||||||
msgstr ""
|
msgstr "Libros Kindle"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||||
msgid "Conversion Input"
|
msgid "Conversion Input"
|
||||||
@ -941,20 +941,20 @@ msgid "Enable to cache and display covers from iTunes/iBooks"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Actívelo para mostrar y guardar en caché las portadas de iTunes o iBooks"
|
"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"
|
msgid "Apple device"
|
||||||
msgstr "Dispositivo Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Comunicarse con 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dispositivo Apple detectado. Iniciando iTunes. Un momento, por favor..."
|
"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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"la biblioteca de iTunes al escritorio, y entonces añadelos en la ventana "
|
||||||
"Biblioteca."
|
"Biblioteca."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Actualizando listado de meta datos..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d de %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "terminado"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -994,7 +994,7 @@ msgstr ""
|
|||||||
"Bórrelos utilizando la aplicación iBooks.\n"
|
"Bórrelos utilizando la aplicación iBooks.\n"
|
||||||
"Pulse \"Mostrar Detalles\" para ver una lista."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -1002,7 +1002,7 @@ msgstr ""
|
|||||||
"Algunas portadas no se pudieron convertir.\n"
|
"Algunas portadas no se pudieron convertir.\n"
|
||||||
"Pulse en \"Mostrar detalles\" para ver una lista."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1018,7 +1018,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Noticias"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1026,7 +1026,7 @@ msgstr "Noticias"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Catálogo"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Comunicarse con iTunes."
|
msgstr "Comunicarse con iTunes."
|
||||||
|
|
||||||
@ -6203,11 +6203,11 @@ msgstr "Clic para abrir"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:123
|
||||||
msgid "Ids"
|
msgid "Ids"
|
||||||
msgstr ""
|
msgstr "Id."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
|
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:133
|
||||||
msgid "Book %s of <span class=\"series_name\">%s</span>"
|
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/book_details.py:144
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:978
|
#: /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/gui2/library/models.py:73
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
|
||||||
msgid "Modified"
|
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:717
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1274
|
#: /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 "
|
"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."
|
"are running jobs, they will be silently aborted, so use with care."
|
||||||
msgstr ""
|
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/main.py:69
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:678
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:210
|
||||||
msgid "Main Interface"
|
msgid "Main Interface"
|
||||||
msgstr ""
|
msgstr "Interfaz principal"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
|
||||||
msgid "Select displayed metadata"
|
msgid "Select displayed metadata"
|
||||||
msgstr ""
|
msgstr "Seleccionar metadatos mostrados"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
|
||||||
msgid "Move up"
|
msgid "Move up"
|
||||||
msgstr ""
|
msgstr "Mover hacia arriba"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
|
||||||
msgid "Move down"
|
msgid "Move down"
|
||||||
msgstr ""
|
msgstr "Mover hacia abajo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
|
||||||
msgid "Use &Roman numerals for series"
|
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 "
|
"Note that <b>comments</b> will always be displayed at the end, regardless of "
|
||||||
"the position you assign here."
|
"the position you assign here."
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:217
|
||||||
msgid "Tags browser category &partitioning method:"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:339
|
||||||
msgid "Delete current search"
|
msgid "Delete current search"
|
||||||
msgstr ""
|
msgstr "Borrar búsqueda actual"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:340
|
||||||
msgid "No search is selected"
|
msgid "No search is selected"
|
||||||
msgstr ""
|
msgstr "No hay ninguna búsqueda seleccionada"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:342
|
||||||
msgid "The selected search will be <b>permanently deleted</b>. Are you sure?"
|
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 "
|
"Save current search under the name shown in the box. Press and hold for a "
|
||||||
"pop-up options menu."
|
"pop-up options menu."
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:458
|
||||||
msgid "Create saved search"
|
msgid "Create saved search"
|
||||||
msgstr ""
|
msgstr "Crear búsqueda guardada"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462
|
||||||
msgid "Delete saved search"
|
msgid "Delete saved search"
|
||||||
msgstr ""
|
msgstr "Borrar búsqueda guardada"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466
|
||||||
msgid "Manage saved searches"
|
msgid "Manage saved searches"
|
||||||
msgstr ""
|
msgstr "Administrar búsquedas guardadas"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476
|
||||||
msgid "*Current search"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py:51
|
||||||
msgid "Updating book cache"
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:42
|
||||||
msgid "Checking last download date."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:48
|
||||||
msgid "Downloading book list from MobileRead."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:61
|
||||||
msgid "Processing books."
|
msgid "Processing books."
|
||||||
msgstr ""
|
msgstr "Procesando libros"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_update_thread.py:70
|
||||||
msgid "%s of %s books processed."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/mobileread_plugin.py:62
|
||||||
msgid "Updating MobileRead book cache..."
|
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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:69
|
||||||
msgid "&Query:"
|
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:72
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:63
|
#: /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
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
|
||||||
msgid "&Price:"
|
msgid "&Price:"
|
||||||
msgstr ""
|
msgstr "&Precio:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
|
||||||
msgid "Titl&e/Author/Price ..."
|
msgid "Titl&e/Author/Price ..."
|
||||||
msgstr ""
|
msgstr "&Título/autor/precio..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:33
|
||||||
msgid "DRM"
|
msgid "DRM"
|
||||||
@ -15951,7 +15957,7 @@ msgstr "empty"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
|
#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
|
||||||
msgid "Invalid boolean query \"{0}\""
|
msgid "Invalid boolean query \"{0}\""
|
||||||
msgstr ""
|
msgstr "Consulta booleana \"{0}\" no válida"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -17173,6 +17179,7 @@ msgstr "La fecha de publicación"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:46
|
#: /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"
|
msgid "The date when the metadata for this book record was last modified"
|
||||||
msgstr ""
|
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
|
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48
|
||||||
msgid "The calibre internal id"
|
msgid "The calibre internal id"
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-03-02 12:04+0000\n"
|
||||||
"Last-Translator: gorkaazk <gorkaazkarate@euskalerria.org>\n"
|
"Last-Translator: gorkaazk <gorkaazkarate@euskalerria.org>\n"
|
||||||
"Language-Team: Basque <eu@li.org>\n"
|
"Language-Team: Basque <eu@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr "Apple markako gailua"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "iTunes/iBooks horiekin komunikatu."
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Apple enpresako gailua detektatu egin da, iTunes-en nabigatzen ari da, "
|
"Apple enpresako gailua detektatu egin da, iTunes-en nabigatzen ari da, "
|
||||||
"mesedez itxaron..."
|
"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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
@ -947,28 +947,28 @@ msgstr ""
|
|||||||
"Ezin dira liburuak zuzenean gailu elektronikotik kopiatu. Herrestan eraman "
|
"Ezin dira liburuak zuzenean gailu elektronikotik kopiatu. Herrestan eraman "
|
||||||
"iTunes Liburutegitik mahaigainera, gero itsatsi calibre liburutegiko leihoan."
|
"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:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Irakurgailuaren zerrendatze metadatuak eguneratzen..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d-tik %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "amaiturik"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -978,7 +978,7 @@ msgstr ""
|
|||||||
"Ezabatu \"iBooks app\" erabiliz.\n"
|
"Ezabatu \"iBooks app\" erabiliz.\n"
|
||||||
"Egin ezazu klik 'Zehaztasunak erakutsi' zerrenda ikusteko."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -986,7 +986,7 @@ msgstr ""
|
|||||||
"Azalaren arte lan batzuk ezin izan dira bihurtu.\n"
|
"Azalaren arte lan batzuk ezin izan dira bihurtu.\n"
|
||||||
"Egin ezazu klik 'Zehaztasunak erakutsi' zerrenda ikusteko."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1002,7 +1002,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Albisteak"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1010,7 +1010,7 @@ msgstr "Albisteak"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Katalogoa"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Komunikatu iTunes horrekin ."
|
msgstr "Komunikatu iTunes horrekin ."
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-04-09 04:20+0000\n"
|
||||||
"Last-Translator: Milad Naseri <m.m.naseri@gmail.com>\n"
|
"Last-Translator: Milad Naseri <m.m.naseri@gmail.com>\n"
|
||||||
"Language-Team: Persian <fa@li.org>\n"
|
"Language-Team: Persian <fa@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -950,7 +950,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -958,7 +958,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,15 +7,15 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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-10-08 20:55+0000\n"
|
"PO-Revision-Date: 2011-05-04 13:38+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Aleksi Kinnunen <Unknown>\n"
|
||||||
"Language-Team: Finnish <fi@li.org>\n"
|
"Language-Team: Finnish <fi@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2011-04-30 04:38+0000\n"
|
"X-Launchpad-Export-Date: 2011-05-05 04:37+0000\n"
|
||||||
"X-Generator: Launchpad (build 12758)\n"
|
"X-Generator: Launchpad (build 12959)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
||||||
msgid "Does absolutely nothing"
|
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:41
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
|
#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:46
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr ""
|
msgstr "Ei voida määrittää"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:318
|
||||||
msgid "File type"
|
msgid "File type"
|
||||||
@ -359,7 +359,7 @@ msgstr "Lisää/poista sarakkeita calibren kirjaluetteloon"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:916
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:916
|
||||||
msgid "Toolbar"
|
msgid "Toolbar"
|
||||||
msgstr ""
|
msgstr "Työkalurivi"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:922
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:922
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -530,11 +530,11 @@ msgstr "Sekalaiset kehittyneet asetukset"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1109
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1109
|
||||||
msgid "Kindle books from Amazon"
|
msgid "Kindle books from Amazon"
|
||||||
msgstr ""
|
msgstr "Amazonin Kindle-kirjat"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1114
|
||||||
msgid "Kindle books from Amazon.uk"
|
msgid "Kindle books from Amazon.uk"
|
||||||
msgstr ""
|
msgstr "Amazon.uk:in Kindle-kirjat"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1119
|
||||||
msgid "Ebooks for readers."
|
msgid "Ebooks for readers."
|
||||||
@ -542,7 +542,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1124
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1124
|
||||||
msgid "Books, Textbooks, eBooks, Toys, Games and More."
|
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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1129
|
||||||
msgid "Publishers of fine books."
|
msgid "Publishers of fine books."
|
||||||
@ -562,7 +562,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1149
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1149
|
||||||
msgid "Read anywhere."
|
msgid "Read anywhere."
|
||||||
msgstr ""
|
msgstr "Lue missä vain."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1154
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1154
|
||||||
msgid "The first producer of free ebooks."
|
msgid "The first producer of free ebooks."
|
||||||
@ -570,11 +570,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1159
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1159
|
||||||
msgid "eReading: anytime. anyplace."
|
msgid "eReading: anytime. anyplace."
|
||||||
msgstr ""
|
msgstr "eReading: missä vain, milloin vain."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1164
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1164
|
||||||
msgid "The best ebooks at the best price: free!"
|
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
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1169
|
||||||
msgid "Ebooks handcrafted with the utmost care"
|
msgid "Ebooks handcrafted with the utmost care"
|
||||||
@ -586,7 +586,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1179
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1179
|
||||||
msgid "Your ebook. Your way."
|
msgid "Your ebook. Your way."
|
||||||
msgstr ""
|
msgstr "Sinun e-kirjasi. Sinun tavallasi."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1184
|
||||||
msgid "Feel every word"
|
msgid "Feel every word"
|
||||||
@ -598,7 +598,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1194
|
||||||
msgid "Kindle eBooks"
|
msgid "Kindle eBooks"
|
||||||
msgstr ""
|
msgstr "Kindlen e-kirjat"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||||
msgid "Conversion Input"
|
msgid "Conversion Input"
|
||||||
@ -744,6 +744,8 @@ msgid ""
|
|||||||
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
|
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
|
||||||
"of 600x1280"
|
"of 600x1280"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Tarkoitettu Samsung Galaxy Tabille ja muille vastaaville tableteille joiden "
|
||||||
|
"resoluutio on 600x1280."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:472
|
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:472
|
||||||
msgid "This profile is intended for the Kobo Reader."
|
msgid "This profile is intended for the Kobo Reader."
|
||||||
@ -907,46 +909,46 @@ msgstr ""
|
|||||||
msgid "Enable to cache and display covers from iTunes/iBooks"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Kommunikoi iTunesin/iBooksin kanssa"
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Apple-laite havaittu, ladataan iTunes, odota hetki..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Päivittää laitteen metatietolistausta..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d %d:stä"
|
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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "Valmis"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -956,7 +958,7 @@ msgstr ""
|
|||||||
"Poista iBooks-sovelluksella.\n"
|
"Poista iBooks-sovelluksella.\n"
|
||||||
"Valitse 'Näytä yksityiskohdat' nähdäksesi listan."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -964,7 +966,7 @@ msgstr ""
|
|||||||
"Osaa kansitaiteesta ei voitu kääntää.\n"
|
"Osaa kansitaiteesta ei voitu kääntää.\n"
|
||||||
"Valitse 'Näytä yksityiskohdat' nähdäksesi listan."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -980,7 +982,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Uutiset"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -988,7 +990,7 @@ msgstr "Uutiset"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Kommunikoi iTunesin kanssa."
|
msgstr "Kommunikoi iTunesin kanssa."
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2010-06-11 18:48+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Faroese <fo@li.org>\n"
|
"Language-Team: Faroese <fo@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
|
#: /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"
|
msgid "Enable to cache and display covers from iTunes/iBooks"
|
||||||
msgstr ""
|
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"
|
msgid "Apple device"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr ""
|
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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:192
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
|
||||||
msgid ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"desktop, then add to calibre's Library window."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:432
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:478
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:663
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:665
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1014
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1016
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
msgstr ""
|
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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -929,7 +929,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr ""
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -937,7 +937,7 @@ msgstr ""
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr ""
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.4.22\n"
|
"Project-Id-Version: calibre 0.4.22\n"
|
||||||
"Report-Msgid-Bugs-To: \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"
|
"PO-Revision-Date: 2011-04-29 12:01+0000\n"
|
||||||
"Last-Translator: sengian <Unknown>\n"
|
"Last-Translator: sengian <Unknown>\n"
|
||||||
"Language-Team: Français <kde-i18n-doc@kde.org>\n"
|
"Language-Team: Français <kde-i18n-doc@kde.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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-Generator: Launchpad (build 12758)\n"
|
||||||
"X-Poedit-Bookmarks: 1177,1104,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
"X-Poedit-Bookmarks: 1177,1104,-1,-1,-1,-1,-1,-1,-1,-1\n"
|
||||||
"Generated-By: pygettext.py 1.5\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 "
|
"Activer la mise en cache et l'affichage des couvertures provenant de "
|
||||||
"iTunes/iBooks"
|
"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"
|
msgid "Apple device"
|
||||||
msgstr "Appareil Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Communiquer avec 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr "Appareil Apple détecté, lancement d'iTunes, veuillez patienter..."
|
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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 "
|
"le bureau à partir de la bibliothèque, puis ajouter à la fenêtre de la "
|
||||||
"bibliothèque Calibre."
|
"bibliothèque Calibre."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Mise à jour de la liste des métadonnées de l'appareil..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d sur %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "Terminé"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -992,7 +992,7 @@ msgstr ""
|
|||||||
"Les supprimer en utilisant l'application iBooks.\n"
|
"Les supprimer en utilisant l'application iBooks.\n"
|
||||||
"Cliquer 'Afficher détails' pour obtenir la liste."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -1000,7 +1000,7 @@ msgstr ""
|
|||||||
"Certaines illustrations de couverture n'ont pu être converties.\n"
|
"Certaines illustrations de couverture n'ont pu être converties.\n"
|
||||||
"Cliquer sur 'Afficher Détails' pour une liste."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1016,7 +1016,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Informations"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1024,7 +1024,7 @@ msgstr "Informations"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Catalogue"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Communiquer avec iTunes"
|
msgstr "Communiquer avec iTunes"
|
||||||
|
|
||||||
|
@ -7,14 +7,14 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\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"
|
"PO-Revision-Date: 2011-04-07 18:57+0000\n"
|
||||||
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
|
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
|
||||||
"Language-Team: dev@gl.openoffice.org\n"
|
"Language-Team: dev@gl.openoffice.org\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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"
|
"X-Generator: Launchpad (build 12758)\n"
|
||||||
"Language: gl\n"
|
"Language: gl\n"
|
||||||
|
|
||||||
@ -934,20 +934,20 @@ msgid "Enable to cache and display covers from iTunes/iBooks"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Actíveo para amosar e gardar en caché as portadas de iTunes ou iBooks"
|
"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"
|
msgid "Apple device"
|
||||||
msgstr "Dispositivo Apple"
|
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."
|
msgid "Communicate with iTunes/iBooks."
|
||||||
msgstr "Comunicar con 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 ..."
|
msgid "Apple device detected, launching iTunes, please wait ..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Detectouse un dispositivo de Apple. Estase a iniciar o iTunes, agarde..."
|
"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 ""
|
msgid ""
|
||||||
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
"Cannot copy books directly from iDevice. Drag from iTunes Library to "
|
||||||
"desktop, then add to calibre's Library window."
|
"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 iTunes ao escritorio, e logo, poderá engadilos na xanela "
|
||||||
"Biblioteca de Calibre."
|
"Biblioteca de Calibre."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:353
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:355
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:356
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
|
||||||
msgid "Updating device metadata listing..."
|
msgid "Updating device metadata listing..."
|
||||||
msgstr "Actualizando a relación de metadatos..."
|
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:434
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:471
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:473
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1054
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1056
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1098
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3082
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3084
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3122
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3124
|
||||||
msgid "%d of %d"
|
msgid "%d of %d"
|
||||||
msgstr "%d de %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:480
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3128
|
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3130
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
|
||||||
msgid "finished"
|
msgid "finished"
|
||||||
msgstr "rematado"
|
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 ""
|
msgid ""
|
||||||
"Some books not found in iTunes database.\n"
|
"Some books not found in iTunes database.\n"
|
||||||
"Delete using the iBooks app.\n"
|
"Delete using the iBooks app.\n"
|
||||||
@ -987,7 +987,7 @@ msgstr ""
|
|||||||
"Eliminar co aplicativo do iBooks\n"
|
"Eliminar co aplicativo do iBooks\n"
|
||||||
"Premer «Amosar detalles» para obter unha lista."
|
"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 ""
|
msgid ""
|
||||||
"Some cover art could not be converted.\n"
|
"Some cover art could not be converted.\n"
|
||||||
"Click 'Show Details' for a list."
|
"Click 'Show Details' for a list."
|
||||||
@ -995,7 +995,7 @@ msgstr ""
|
|||||||
"Algunhas cubertas non se converteron. \n"
|
"Algunhas cubertas non se converteron. \n"
|
||||||
"Prema «Amosar detalles» para relacionalas."
|
"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/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:447
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
|
||||||
@ -1011,7 +1011,7 @@ msgstr ""
|
|||||||
msgid "News"
|
msgid "News"
|
||||||
msgstr "Noticias"
|
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/gui2/catalog/catalog_epub_mobi.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:633
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2750
|
||||||
@ -1019,7 +1019,7 @@ msgstr "Noticias"
|
|||||||
msgid "Catalog"
|
msgid "Catalog"
|
||||||
msgstr "Catálogo"
|
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."
|
msgid "Communicate with iTunes."
|
||||||
msgstr "Comunicar con 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