Sync to trunk.
@ -34,6 +34,9 @@
|
|||||||
tickets: [4040]
|
tickets: [4040]
|
||||||
|
|
||||||
bug fixes:
|
bug fixes:
|
||||||
|
- title: "Fix bug that prevented saving of books from a connected device to your computer on windows, for non SONY devices"
|
||||||
|
tickets: [4080]
|
||||||
|
|
||||||
- title: Reorganize Dutch language news sources into Belgium and Netherlands categories
|
- title: Reorganize Dutch language news sources into Belgium and Netherlands categories
|
||||||
tickets: [4098]
|
tickets: [4098]
|
||||||
|
|
||||||
@ -46,12 +49,20 @@
|
|||||||
|
|
||||||
- title: Add PDF to list of supported formats for the Kindle 2
|
- title: Add PDF to list of supported formats for the Kindle 2
|
||||||
|
|
||||||
|
- title: Add 0x0c01 to the list of product ids for HTC Hero (Android) driver
|
||||||
|
tickets: [4088]
|
||||||
|
|
||||||
|
- title: "LIT Input: Remove more invalid markup present in LIT files created by Microsoft Word plugins"
|
||||||
|
tickets: [4087]
|
||||||
|
|
||||||
|
- title: "LRF Input: Workaround buggy LRF files with unbalanced closing tags"
|
||||||
|
tickets: [4108]
|
||||||
|
|
||||||
new recipes:
|
new recipes:
|
||||||
- title: The Economist (no subscription required)
|
- title: The Economist (no subscription required)
|
||||||
author: Kovid Goyal
|
author: Kovid Goyal
|
||||||
|
|
||||||
- title: Sports Illustrated1
|
- title: Sports Illustrated
|
||||||
author: kwetal
|
author: kwetal
|
||||||
|
|
||||||
- title: Levante
|
- title: Levante
|
||||||
@ -60,6 +71,9 @@
|
|||||||
- title: ncrnext
|
- title: ncrnext
|
||||||
author: kwetal
|
author: kwetal
|
||||||
|
|
||||||
|
- title: Gulli
|
||||||
|
author: posativ
|
||||||
|
|
||||||
improved recipes:
|
improved recipes:
|
||||||
- The Philadelphia Inquirer
|
- The Philadelphia Inquirer
|
||||||
- Harpers
|
- Harpers
|
||||||
|
@ -148,13 +148,13 @@ function fetch_library_books(start, num, timeout, sort, order, search) {
|
|||||||
$("#book_list tbody").html(display);
|
$("#book_list tbody").html(display);
|
||||||
$("#book_list tbody tr").bind('mouseenter', function() {
|
$("#book_list tbody tr").bind('mouseenter', function() {
|
||||||
var row = $(this);
|
var row = $(this);
|
||||||
$('#book_list tbody tr:even()').css('background-color', '#eeeeee');
|
$('#book_list tbody tr:even').css('background-color', '#eeeeee');
|
||||||
$('#book_list tbody tr:odd()').css('background-color', 'white');
|
$('#book_list tbody tr:odd').css('background-color', 'white');
|
||||||
|
|
||||||
row.css('background-color', "#fff2a8");
|
row.css('background-color', "#fff2a8");
|
||||||
row.bind('mouseleave', function(){
|
row.bind('mouseleave', function(){
|
||||||
row.css('background-color', "white");
|
row.css('background-color', "white");
|
||||||
$('#book_list tbody tr:even()').css('background-color', '#eeeeee');
|
$('#book_list tbody tr:even').css('background-color', '#eeeeee');
|
||||||
row.unbind('mouseleave');
|
row.unbind('mouseleave');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -173,7 +173,7 @@ function fetch_library_books(start, num, timeout, sort, order, search) {
|
|||||||
|
|
||||||
|
|
||||||
layout();
|
layout();
|
||||||
$('#book_list tbody tr:even()').css('background-color', '#eeeeee');
|
$('#book_list tbody tr:even').css('background-color', '#eeeeee');
|
||||||
},
|
},
|
||||||
|
|
||||||
complete : function(XMLHttpRequest, textStatus) {
|
complete : function(XMLHttpRequest, textStatus) {
|
||||||
@ -262,6 +262,7 @@ function setup_sorting() {
|
|||||||
if (sort_indicator.html() == '↑') {
|
if (sort_indicator.html() == '↑') {
|
||||||
order = 'descending'; html = '↓';
|
order = 'descending'; html = '↓';
|
||||||
}
|
}
|
||||||
|
|
||||||
sort_indicator.html(html);
|
sort_indicator.html(html);
|
||||||
$('#book_list * .sort_indicator').css('visibility', 'hidden');
|
$('#book_list * .sort_indicator').css('visibility', 'hidden');
|
||||||
sort_indicator.css('visibility', 'visible');
|
sort_indicator.css('visibility', 'visible');
|
||||||
|
@ -30,13 +30,13 @@ class Barrons(BasicNewsRecipe):
|
|||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
|
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
.datestamp{color:#666666; font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
.datestamp{font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
||||||
h3{color:#FF0000; font-family:Georgia,"Times New Roman",Times,serif; }
|
h3{font-family:Georgia,"Times New Roman",Times,serif; }
|
||||||
h2{font-family:Georgia,"Times New Roman",Times,serif; }
|
h2{font-family:Georgia,"Times New Roman",Times,serif; }
|
||||||
h1{ font-family:Georgia,"Times New Roman",Times,serif; }
|
h1{ font-family:Georgia,"Times New Roman",Times,serif; }
|
||||||
.byline{color:#AAAAAA; font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
.byline{font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
||||||
.subhead{color:#666666; font-family:Georgia,"Times New Roman",Times,serif; font-size: small;}
|
.subhead{font-family:Georgia,"Times New Roman",Times,serif; font-size: small;}
|
||||||
.articlePage{ font-family:Georgia,"Century Schoolbook","Times New Roman",Times,serif;color:#333333;}
|
.articlePage{ font-family:Georgia,"Century Schoolbook","Times New Roman",Times,serif;}
|
||||||
.insettipUnit{font-size: x-small;}
|
.insettipUnit{font-size: x-small;}
|
||||||
'''
|
'''
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
|
@ -19,13 +19,18 @@ class BusinessWeek(BasicNewsRecipe):
|
|||||||
max_articles_per_feed = 10
|
max_articles_per_feed = 10
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
|
||||||
|
recursions = 1
|
||||||
|
match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*']
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large;}
|
h1{font-family :Arial,Helvetica,sans-serif; font-size:large;}
|
||||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:small;color:#666666;}
|
.news_story_title{font-family :Arial,Helvetica,sans-serif; font-size:large;font-weight:bold;}
|
||||||
|
h2{font-family :Arial,Helvetica,sans-serif; font-size:medium;color:#666666;}
|
||||||
|
h3{text-transform:uppercase;font-family :Arial,Helvetica,sans-serif; font-size:large;font-weight:bold;}
|
||||||
|
h4{font-family :Arial,Helvetica,sans-serif; font-size:small;font-weight:bold;}
|
||||||
p{font-family :Arial,Helvetica,sans-serif; }
|
p{font-family :Arial,Helvetica,sans-serif; }
|
||||||
#lede600{font-size:x-small;}
|
#lede600{font-size:x-small;}
|
||||||
#storybody{font-size:x-small;}
|
#storybody{font-size:x-small;}
|
||||||
|
p{font-family :Arial,Helvetica,sans-serif;}
|
||||||
.strap{font-family :Arial,Helvetica,sans-serif; font-size:x-small; color:#064599;}
|
.strap{font-family :Arial,Helvetica,sans-serif; font-size:x-small; color:#064599;}
|
||||||
.byline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
.byline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
||||||
.postedBy{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
.postedBy{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
||||||
@ -34,9 +39,16 @@ class BusinessWeek(BasicNewsRecipe):
|
|||||||
.wrapper{font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
.wrapper{font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
||||||
.photoCredit{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
.photoCredit{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
||||||
.tagline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
.tagline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
||||||
|
.pageCount{color:#666666;font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
||||||
|
.note{font-family :Arial,Helvetica,sans-serif; font-size:small;color:#666666;font-style:italic;}
|
||||||
|
.highlight{font-family :Arial,Helvetica,sans-serif; font-size:small;background-color:#FFF200;}
|
||||||
|
.annotation{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;}
|
||||||
'''
|
'''
|
||||||
|
|
||||||
remove_tags = [ dict(name='div', attrs={'id':["bw2-header","column2","wrapper-bw2-footer","wrapper-mgh-footer","inset","commentForm","commentDisplay","bwExtras","bw2-umbrella","readerComments","pageNav","leg"]}),
|
remove_tags = [ dict(name='div', attrs={'id':["log","feedback","footer","secondarynav","secondnavbar","header","email","bw2-header","column2","wrapper-bw2-footer","wrapper-mgh-footer","inset","commentForm","commentDisplay","bwExtras","bw2-umbrella","readerComments","leg","rightcol"]}),
|
||||||
|
dict(name='div', attrs={'class':["menu",'sponsorbox smallertext',"TopNavTile","graybottom leaderboard"]}),
|
||||||
|
dict(name='img', alt ="News"),
|
||||||
|
dict(name='td', width ="1"),
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
@ -71,10 +83,11 @@ class BusinessWeek(BasicNewsRecipe):
|
|||||||
|
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def postrocess_html(self, soup, first):
|
def postprocess_html(self, soup, first):
|
||||||
|
|
||||||
for tag in soup.findAll(name=['ul','li']):
|
for tag in soup.findAll(name=['ul','li','table','td','tr','span']):
|
||||||
tag.name = 'div'
|
tag.name = 'div'
|
||||||
|
for tag in soup.findAll(name= 'div',attrs={ 'id':'pageNav'}):
|
||||||
|
tag.extract()
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ class ChicagoBreakingNews(BasicNewsRecipe):
|
|||||||
feeds = [(u'Breaking news', u'http://feeds2.feedburner.com/ChicagoBreakingNews/')]
|
feeds = [(u'Breaking news', u'http://feeds2.feedburner.com/ChicagoBreakingNews/')]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
links = soup.findAll('a')
|
|
||||||
for item in soup.findAll('a'):
|
for item in soup.findAll('a'):
|
||||||
if item['href'].find('http://feedads.googleadservices.com') > -1:
|
if item['href'].find('http://feedads.googleadservices.com') > -1:
|
||||||
item.extract()
|
item.extract()
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
from calibre.utils.threadpool import ThreadPool, makeRequests
|
||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from lxml import html
|
from lxml import html
|
||||||
|
from urllib2 import urlopen
|
||||||
|
|
||||||
class Economist(BasicNewsRecipe):
|
class Economist(BasicNewsRecipe):
|
||||||
|
|
||||||
@ -23,46 +25,55 @@ class Economist(BasicNewsRecipe):
|
|||||||
'http://feeds.feedburner.com/economist/full_print_edition',
|
'http://feeds.feedburner.com/economist/full_print_edition',
|
||||||
raw=True)
|
raw=True)
|
||||||
entries = parse(raw).entries
|
entries = parse(raw).entries
|
||||||
feeds = {}
|
pool = ThreadPool(10)
|
||||||
|
self.feed_dict = {}
|
||||||
|
requests = []
|
||||||
for i, item in enumerate(entries):
|
for i, item in enumerate(entries):
|
||||||
from calibre.web.feeds import Article
|
|
||||||
published = time.gmtime(item.get('timestamp', time.time()))
|
published = time.gmtime(item.get('timestamp', time.time()))
|
||||||
title = item.get('title', _('Untitled article'))
|
title = item.get('title', _('Untitled article'))
|
||||||
link = item.get('link', None)
|
link = item.get('link', None)
|
||||||
description = item.get('description', '')
|
description = item.get('description', '')
|
||||||
author = item.get('author', '')
|
author = item.get('author', '')
|
||||||
|
|
||||||
try:
|
requests.append([i, link, title, description, author, published])
|
||||||
feedtitle, link = self.process_eco_feed_article(link)
|
requests = makeRequests(self.process_eco_feed_article, requests, self.eco_article_found,
|
||||||
self.log('Found print version for article:', title)
|
self.eco_article_failed)
|
||||||
except:
|
for r in requests: pool.putRequest(r)
|
||||||
self.log.exception('Failed to process article:', title)
|
pool.wait()
|
||||||
continue
|
|
||||||
|
|
||||||
a = Article(i, title, link, author, description, published, '')
|
return [(t, a) for t, a in self.feed_dict.items()]
|
||||||
delta = datetime.utcnow() - a.utctime
|
|
||||||
if delta.days*24*3600 + delta.seconds > 24*3600*self.oldest_article:
|
|
||||||
self.log.debug('Skipping article %s (%s) from feed %s as it is too old.'%(title, a.localtime.strftime('%a, %d %b, %Y %H:%M'), title))
|
|
||||||
continue
|
|
||||||
|
|
||||||
|
def process_eco_feed_article(self, args):
|
||||||
article = dict(title=a.title, description=a.text_summary,
|
i, url, title, description, author, published = args
|
||||||
date=time.strftime(self.timefmt, a.date), author=a.author, url=a.url)
|
ret = urlopen(url)
|
||||||
if feedtitle not in feeds:
|
|
||||||
feeds[feedtitle] = []
|
|
||||||
feeds[feedtitle].append(article)
|
|
||||||
return [(t, a) for t, a in feeds.items()]
|
|
||||||
|
|
||||||
def process_eco_feed_article(self, url):
|
|
||||||
ret = self.browser.open(url)
|
|
||||||
raw = ret.read()
|
raw = ret.read()
|
||||||
url = self.browser.geturl().replace('displaystory', 'PrinterFriendly').strip()
|
url = ret.geturl().replace('displaystory', 'PrinterFriendly').strip()
|
||||||
root = html.fromstring(raw)
|
root = html.fromstring(raw)
|
||||||
matches = root.xpath('//*[@class = "article-section"]')
|
matches = root.xpath('//*[@class = "article-section"]')
|
||||||
feedtitle = 'Miscellaneous'
|
feedtitle = 'Miscellaneous'
|
||||||
if matches:
|
if matches:
|
||||||
feedtitle = html.tostring(matches[0], method='text',
|
feedtitle = html.tostring(matches[0], method='text',
|
||||||
encoding=unicode)
|
encoding=unicode)
|
||||||
return feedtitle, url
|
return (i, feedtitle, url, title, description, author, published)
|
||||||
|
|
||||||
|
def eco_article_found(self, req, result):
|
||||||
|
from calibre.web.feeds import Article
|
||||||
|
i, feedtitle, link, title, description, author, published = result
|
||||||
|
self.log('Found print version for article:', title)
|
||||||
|
|
||||||
|
a = Article(i, title, link, author, description, published, '')
|
||||||
|
delta = datetime.utcnow() - a.utctime
|
||||||
|
if delta.days*24*3600 + delta.seconds > 24*3600*self.oldest_article:
|
||||||
|
self.log.debug('Skipping article %s (%s) from feed %s as it is too old.'%(title, a.localtime.strftime('%a, %d %b, %Y %H:%M'), title))
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
article = dict(title=a.title, description=a.text_summary,
|
||||||
|
date=time.strftime(self.timefmt, a.date), author=a.author, url=a.url)
|
||||||
|
if feedtitle not in self.feed_dict:
|
||||||
|
self.feed_dict[feedtitle] = []
|
||||||
|
self.feed_dict[feedtitle].append(article)
|
||||||
|
|
||||||
|
def eco_article_failed(self, req, tb):
|
||||||
|
self.log.error('Failed to download %s with error:'%req.args[0][2])
|
||||||
|
self.log.debug(tb)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008 - 2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
engadget.com
|
engadget.com
|
||||||
'''
|
'''
|
||||||
@ -12,20 +12,11 @@ class Engadget(BasicNewsRecipe):
|
|||||||
title = u'Engadget'
|
title = u'Engadget'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'Tech news'
|
description = 'Tech news'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = True
|
||||||
|
|
||||||
keep_only_tags = [ dict(name='div', attrs={'class':'post'}) ]
|
|
||||||
remove_tags = [
|
|
||||||
dict(name='object')
|
|
||||||
,dict(name='div', attrs={'class':'postmeta'})
|
|
||||||
,dict(name='div', attrs={'class':'quigoads'})
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
feeds = [ (u'Posts', u'http://www.engadget.com/rss.xml')]
|
feeds = [ (u'Posts', u'http://www.engadget.com/rss.xml')]
|
||||||
|
|
||||||
|
@ -80,7 +80,6 @@ class GlasSrpske(BasicNewsRecipe):
|
|||||||
for item in soup.findAll('div', attrs={'class':'gl_rub'}):
|
for item in soup.findAll('div', attrs={'class':'gl_rub'}):
|
||||||
atag = item.find('a')
|
atag = item.find('a')
|
||||||
ptag = item.find('p')
|
ptag = item.find('p')
|
||||||
datetag = item.find('span')
|
|
||||||
url = self.INDEX + atag['href']
|
url = self.INDEX + atag['href']
|
||||||
title = self.tag_to_string(atag)
|
title = self.tag_to_string(atag)
|
||||||
description = self.tag_to_string(ptag)
|
description = self.tag_to_string(ptag)
|
||||||
|
16
resources/recipes/gulli.recipe
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1259599587(BasicNewsRecipe):
|
||||||
|
title = u'Gulli'
|
||||||
|
description = 'News from Germany'
|
||||||
|
language = 'de'
|
||||||
|
__author__ = 'posativ'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
feeds = [(u'gulli:news', u'http://ticker.gulli.com/rss/')]
|
||||||
|
|
||||||
|
remove_tags = [{'class' : ['addthis_button', 'BreadCrumb']}, {'id' : ['plista0']}]
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':'inside'})]
|
57
resources/recipes/moneycontrol.recipe
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
#from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag
|
||||||
|
|
||||||
|
class MoneyControlRecipe(BasicNewsRecipe):
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__author__ = 'kwetal'
|
||||||
|
language = 'en_IN'
|
||||||
|
locale = 'en_IN'
|
||||||
|
encoding = 'iso-8859-1'
|
||||||
|
version = 1
|
||||||
|
|
||||||
|
title = u'Money Control'
|
||||||
|
publisher = u'moneycontrol.com'
|
||||||
|
category = u'News, Financial, India'
|
||||||
|
description = u'Financial news from India'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
|
feeds = []
|
||||||
|
feeds.append((u'Latest News', u'http://www.moneycontrol.com/rss/latestnews.xml'))
|
||||||
|
feeds.append((u'All Stories', u'http://www.moneycontrol.com/rss/allstories.xml'))
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url.replace('/stocksnews.php?', '/news_print.php?') + '&sr_no=0'
|
||||||
|
|
||||||
|
# The articles contain really horrible html. More than one <body> and <head> section, not properly closed tags, lots and lots of
|
||||||
|
# <font> tags and some weird <o:p></o:p> markup that crashes the conversion to ebook. Needs some drastic sanitizing
|
||||||
|
'''def preprocess_html(self, soup):
|
||||||
|
freshSoup = BeautifulSoup('<html><head></head><body></body></html>')
|
||||||
|
|
||||||
|
headline = soup.find('td', attrs = {'class': 'heading'})
|
||||||
|
if headline:
|
||||||
|
h1 = Tag(freshSoup, 'h1')
|
||||||
|
# Convert to string before adding it to the document!
|
||||||
|
h1.append(self.tag_to_string(headline))
|
||||||
|
freshSoup.body.append(h1)
|
||||||
|
|
||||||
|
for p in soup.findAll('p'):
|
||||||
|
if p.has_key('class'):
|
||||||
|
if p['class'] == 'MsoNormal':
|
||||||
|
# We have some weird pagebreak marker here; it will not find all of them however
|
||||||
|
continue
|
||||||
|
|
||||||
|
para = Tag(freshSoup, 'p')
|
||||||
|
# Convert to string; this will loose all formatting but also all illegal markup
|
||||||
|
para.append(self.tag_to_string(p))
|
||||||
|
|
||||||
|
freshSoup.body.append(para)
|
||||||
|
|
||||||
|
return freshSoup
|
||||||
|
'''
|
||||||
|
|
@ -147,7 +147,6 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
# Fetch the outer table
|
# Fetch the outer table
|
||||||
table = soup.find('table')
|
table = soup.find('table')
|
||||||
previousTable = table
|
previousTable = table
|
||||||
contentTable = None
|
|
||||||
|
|
||||||
# Find the deepest table containing the stories
|
# Find the deepest table containing the stories
|
||||||
while True :
|
while True :
|
||||||
|
@ -53,8 +53,8 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
articles = {}
|
articles = {}
|
||||||
key = None
|
key = None
|
||||||
ans = []
|
ans = []
|
||||||
allSectionKeywords = ['The Front Page', 'International','National','Obituaries','Editorials',
|
#allSectionKeywords = ['The Front Page', 'International','National','Obituaries','Editorials',
|
||||||
'New York','Business Day','Sports','Dining','Arts','Home','Styles']
|
#'New York','Business Day','Sports','Dining','Arts','Home','Styles']
|
||||||
excludeSectionKeywords = ['Dining','Styles']
|
excludeSectionKeywords = ['Dining','Styles']
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,7 +71,6 @@ class ScientificAmerican(BasicNewsRecipe):
|
|||||||
feeds.append(('Features', features))
|
feeds.append(('Features', features))
|
||||||
|
|
||||||
section = []
|
section = []
|
||||||
found = []
|
|
||||||
title = None
|
title = None
|
||||||
|
|
||||||
for x in soup.find(id='magazine-main_col1').findAll(['div', 'a']):
|
for x in soup.find(id='magazine-main_col1').findAll(['div', 'a']):
|
||||||
|
@ -72,7 +72,6 @@ class Time(BasicNewsRecipe):
|
|||||||
return feeds
|
return feeds
|
||||||
|
|
||||||
def find_articles(self, seched):
|
def find_articles(self, seched):
|
||||||
articles = []
|
|
||||||
for a in seched.findNextSiblings( attrs={'class':['toc_hed','rule2']}):
|
for a in seched.findNextSiblings( attrs={'class':['toc_hed','rule2']}):
|
||||||
if a.name in "div":
|
if a.name in "div":
|
||||||
break
|
break
|
||||||
|
76
resources/recipes/vrijnederland.recipe
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
from calibre.ebooks.BeautifulSoup import Tag
|
||||||
|
|
||||||
|
class VrijNederlandRecipe(BasicNewsRecipe) :
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__author__ = 'kwetal'
|
||||||
|
language = 'nl_NL'
|
||||||
|
locale = 'nl_NL'
|
||||||
|
version = 1
|
||||||
|
|
||||||
|
title = u'Vrij Nederland'
|
||||||
|
publisher = u'Weekbladpers Tijdschriften'
|
||||||
|
category = u'News, Opinion'
|
||||||
|
description = u'Weekly opinion magazine from the Netherlands'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
# Does not seem to work
|
||||||
|
#extra_css = '''li.calibre2 {padding-bottom: 40px}'''
|
||||||
|
|
||||||
|
conversion_options = {'publisher': publisher, 'tags': category, 'comments': description}
|
||||||
|
|
||||||
|
feeds = []
|
||||||
|
feeds.append((u'Politiek', u'http://www.vn.nl/politiek.rss'))
|
||||||
|
feeds.append((u'Buitenland', u'http://www.vn.nl/buitenland.rss'))
|
||||||
|
feeds.append((u'Economie', u'http://www.vn.nl/economie.rss'))
|
||||||
|
feeds.append((u'Justitie', u'http://www.vn.nl/justitie.rss'))
|
||||||
|
feeds.append((u'Samenleving', u'http://www.vn.nl/samenleving.rss'))
|
||||||
|
feeds.append((u'Crime', u'http://www.vn.nl/crime.rss'))
|
||||||
|
feeds.append((u'Media', u'http://www.vn.nl/media.rss'))
|
||||||
|
feeds.append((u'De Republiek der Letteren', u'http://www.vn.nl/republiek.rss'))
|
||||||
|
feeds.append((u'Max van Weezel', u'http://www.vn.nl/vanweezel.rss'))
|
||||||
|
feeds.append((u'Ko Colijn', u'http://www.vn.nl/colijn.rss'))
|
||||||
|
feeds.append((u'Kees Kraaijeveld', u'http://www.vn.nl/kraaijeveld.rss'))
|
||||||
|
feeds.append((u'Frank Kalshoven', u'http://www.vn.nl/kalshoven.rss'))
|
||||||
|
feeds.append((u'Stephan Sanders', u'http://www.vn.nl/sanders.rss'))
|
||||||
|
feeds.append((u'Micha Wertheim', u'http://www.vn.nl/wertheim.rss'))
|
||||||
|
feeds.append((u'Arnon Grunberg', u'http://www.vn.nl/grunberg.rss'))
|
||||||
|
feeds.append((u'Carel Peeters', u'http://www.vn.nl/carelpeeters.rss'))
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name = 'div', attrs = {'class' : 'cl-column column-one'})]
|
||||||
|
|
||||||
|
remove_tags = []
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class' : 'wpg-element guest-book-overview'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class' : 'wpg-element forum-message-form'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class' : 'mediaterms'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class': 'label-term'}))
|
||||||
|
remove_tags.append(dict(name = 'div', attrs = {'class': 'wpg-element Media-Collection-Element-Artikel-Lijst'}))
|
||||||
|
remove_tags.append(dict(name = 'object'))
|
||||||
|
remove_tags.append(dict(name = 'link'))
|
||||||
|
remove_tags.append(dict(name = 'meta'))
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
# Just clean up the result a little
|
||||||
|
meta = soup.find('div', attrs = {'class': 'meta'})
|
||||||
|
if meta:
|
||||||
|
link = meta.find('span', attrs = {'class': 'link'})
|
||||||
|
if link:
|
||||||
|
link.extract()
|
||||||
|
for seperator in meta.findAll('span', attrs = {'class': 'seperator'}):
|
||||||
|
seperator.extract()
|
||||||
|
|
||||||
|
# Their header is full of 'if IE6/7/8' tags. Just get rid of it altogether
|
||||||
|
theirHead = soup.head
|
||||||
|
theirHead.extract()
|
||||||
|
myHead = Tag(soup, 'head')
|
||||||
|
soup.insert(0, myHead)
|
||||||
|
|
||||||
|
return soup
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7,33 +7,57 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys, os, cPickle, subprocess
|
import sys, os, cPickle, subprocess
|
||||||
from operator import attrgetter
|
|
||||||
from setup import Command
|
from setup import Command
|
||||||
|
import __builtin__
|
||||||
|
|
||||||
def check_for_python_errors(filename, builtins):
|
def set_builtins(builtins):
|
||||||
from pyflakes import checker, ast
|
for x in builtins:
|
||||||
|
if not hasattr(__builtin__, x):
|
||||||
|
setattr(__builtin__, x, True)
|
||||||
|
yield x
|
||||||
|
|
||||||
contents = open(filename, 'rb').read()
|
class Message:
|
||||||
|
|
||||||
|
def __init__(self, filename, lineno, msg):
|
||||||
|
self.filename, self.lineno, self.msg = filename, lineno, msg
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '%s:%s: %s'%(self.filename, self.lineno, self.msg)
|
||||||
|
|
||||||
|
def check_for_python_errors(code_string, filename):
|
||||||
|
# Since compiler.parse does not reliably report syntax errors, use the
|
||||||
|
# built in compiler first to detect those.
|
||||||
try:
|
try:
|
||||||
tree = ast.parse(contents, filename)
|
|
||||||
except:
|
|
||||||
import traceback
|
|
||||||
traceback.print_exc()
|
|
||||||
try:
|
try:
|
||||||
value = sys.exc_info()[1]
|
compile(code_string, filename, "exec")
|
||||||
lineno, offset, line = value[1][1:]
|
except MemoryError:
|
||||||
except IndexError:
|
# Python 2.4 will raise MemoryError if the source can't be
|
||||||
lineno, offset, line = 1, 0, ''
|
# decoded.
|
||||||
if line.endswith("\n"):
|
if sys.version_info[:2] == (2, 4):
|
||||||
line = line[:-1]
|
raise SyntaxError(None)
|
||||||
|
raise
|
||||||
|
except (SyntaxError, IndentationError), value:
|
||||||
|
msg = value.args[0]
|
||||||
|
|
||||||
return [SyntaxError(filename, lineno, offset, str(value))]
|
(lineno, offset, text) = value.lineno, value.offset, value.text
|
||||||
|
|
||||||
|
# If there's an encoding problem with the file, the text is None.
|
||||||
|
if text is None:
|
||||||
|
# Avoid using msg, since for the only known case, it contains a
|
||||||
|
# bogus message that claims the encoding the file declared was
|
||||||
|
# unknown.
|
||||||
|
msg = "%s: problem decoding source" % filename
|
||||||
|
return [Message(filename, lineno, msg)]
|
||||||
else:
|
else:
|
||||||
w = checker.Checker(tree, filename, builtins = builtins)
|
# Okay, it's syntactically valid. Now parse it into an ast and check
|
||||||
w.messages.sort(key = attrgetter('lineno'))
|
# it.
|
||||||
return w.messages
|
import compiler
|
||||||
|
checker = __import__('pyflakes.checker').checker
|
||||||
|
tree = compiler.parse(code_string)
|
||||||
|
w = checker.Checker(tree, filename)
|
||||||
|
w.messages.sort(lambda a, b: cmp(a.lineno, b.lineno))
|
||||||
|
return [Message(x.filename, x.lineno, x.message%x.message_args) for x in
|
||||||
|
w.messages]
|
||||||
|
|
||||||
class Check(Command):
|
class Check(Command):
|
||||||
|
|
||||||
@ -65,15 +89,18 @@ class Check(Command):
|
|||||||
cache = {}
|
cache = {}
|
||||||
if os.path.exists(self.CACHE):
|
if os.path.exists(self.CACHE):
|
||||||
cache = cPickle.load(open(self.CACHE, 'rb'))
|
cache = cPickle.load(open(self.CACHE, 'rb'))
|
||||||
|
builtins = list(set_builtins(self.BUILTINS))
|
||||||
for f, mtime in self.get_files(cache):
|
for f, mtime in self.get_files(cache):
|
||||||
self.info('\tChecking', f)
|
self.info('\tChecking', f)
|
||||||
w = check_for_python_errors(f, self.BUILTINS)
|
w = check_for_python_errors(open(f, 'rb').read(), f)
|
||||||
if w:
|
if w:
|
||||||
self.report_errors(w)
|
self.report_errors(w)
|
||||||
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
||||||
subprocess.call(['gvim', '-f', f])
|
subprocess.call(['gvim', '-f', f])
|
||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
cache[f] = mtime
|
cache[f] = mtime
|
||||||
|
for x in builtins:
|
||||||
|
delattr(__builtin__, x)
|
||||||
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
||||||
wn_path = os.path.expanduser('~/work/servers/src/calibre_servers/main')
|
wn_path = os.path.expanduser('~/work/servers/src/calibre_servers/main')
|
||||||
if os.path.exists(wn_path):
|
if os.path.exists(wn_path):
|
||||||
@ -85,11 +112,5 @@ class Check(Command):
|
|||||||
|
|
||||||
def report_errors(self, errors):
|
def report_errors(self, errors):
|
||||||
for err in errors:
|
for err in errors:
|
||||||
if isinstance(err, SyntaxError):
|
self.info('\t\t', str(err))
|
||||||
print '\t\tSyntax Error'
|
|
||||||
else:
|
|
||||||
col = getattr(err, 'col', 0) if getattr(err, 'col', 0) else 0
|
|
||||||
lineno = err.lineno if err.lineno else 0
|
|
||||||
self.info('\t\t%d:%d:'%(lineno, col),
|
|
||||||
err.message%err.message_args)
|
|
||||||
|
|
||||||
|
@ -2,7 +2,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__ = 'calibre'
|
__appname__ = 'calibre'
|
||||||
__version__ = '0.6.24'
|
__version__ = '0.6.25'
|
||||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
@ -35,18 +35,9 @@ Run an embedded python interpreter.
|
|||||||
parser.add_option('--pdfreflow', default=None,
|
parser.add_option('--pdfreflow', default=None,
|
||||||
help='Path to PDF file to try and reflow. Output will be placed in '
|
help='Path to PDF file to try and reflow. Output will be placed in '
|
||||||
'current directory. ')
|
'current directory. ')
|
||||||
parser.add_option('-f', '--develop-from', default=None,
|
|
||||||
help=('Develop calibre from the specified path. '
|
|
||||||
'The path should point to the src sub-directory in the '
|
|
||||||
'calibre source tree.'))
|
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def develop_from(path):
|
|
||||||
from calibre.gui2 import build_forms
|
|
||||||
print 'Compiling .ui forms...'
|
|
||||||
build_forms(path)
|
|
||||||
|
|
||||||
def migrate(old, new):
|
def migrate(old, new):
|
||||||
from calibre.utils.config import prefs
|
from calibre.utils.config import prefs
|
||||||
from calibre.library.database import LibraryDatabase
|
from calibre.library.database import LibraryDatabase
|
||||||
@ -192,8 +183,6 @@ def main(args=sys.argv):
|
|||||||
from calibre.utils.logging import default_log
|
from calibre.utils.logging import default_log
|
||||||
opts2, args = px().parse_args(['xxxx', '-vvvv', opts.pdfreflow])
|
opts2, args = px().parse_args(['xxxx', '-vvvv', opts.pdfreflow])
|
||||||
run(opts2, opts.pdfreflow, default_log)
|
run(opts2, opts.pdfreflow, default_log)
|
||||||
elif opts.develop_from is not None:
|
|
||||||
develop_from(opts.develop_from)
|
|
||||||
else:
|
else:
|
||||||
from calibre import ipython
|
from calibre import ipython
|
||||||
ipython()
|
ipython()
|
||||||
|
@ -17,18 +17,31 @@ class ANDROID(USBMS):
|
|||||||
# Ordered list of supported formats
|
# Ordered list of supported formats
|
||||||
FORMATS = ['epub']
|
FORMATS = ['epub']
|
||||||
|
|
||||||
VENDOR_ID = [
|
VENDOR_ID = {
|
||||||
0x0bb4,
|
0x0bb4 : { 0x0c02 : [0x100], 0x0c01 : [0x100]},
|
||||||
]
|
0x22b8 : { 0x41d9 : [0x216]},
|
||||||
PRODUCT_ID = [0x0c02, 0x0c01]
|
}
|
||||||
BCD = [0x100]
|
EBOOK_DIR_MAIN = ['wordplayer/calibretransfer', 'eBooks/import', 'Books']
|
||||||
EBOOK_DIR_MAIN = 'wordplayer/calibretransfer'
|
EXTRA_CUSTOMIZATION_MESSAGE = _('Comma separated list of directories to '
|
||||||
|
'send e-books to on the device. The first one that exists will '
|
||||||
|
'be used')
|
||||||
|
EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN)
|
||||||
|
|
||||||
VENDOR_NAME = 'HTC'
|
VENDOR_NAME = ['HTC', 'MOTOROLA']
|
||||||
WINDOWS_MAIN_MEM = 'ANDROID_PHONE'
|
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855']
|
||||||
|
|
||||||
OSX_MAIN_MEM = 'HTC Android Phone Media'
|
OSX_MAIN_MEM = 'HTC Android Phone Media'
|
||||||
|
|
||||||
MAIN_MEMORY_VOLUME_LABEL = 'Android Internal Memory'
|
MAIN_MEMORY_VOLUME_LABEL = 'Android Phone Internal Memory'
|
||||||
|
|
||||||
SUPPORTS_SUB_DIRS = True
|
SUPPORTS_SUB_DIRS = True
|
||||||
|
|
||||||
|
def get_main_ebook_dir(self):
|
||||||
|
opts = self.settings()
|
||||||
|
dirs = opts.extra_customization
|
||||||
|
if not dirs:
|
||||||
|
dirs = self.EBOOK_DIR_MAIN
|
||||||
|
else:
|
||||||
|
dirs = [x.strip() for x in dirs.split(',')]
|
||||||
|
return dirs
|
||||||
|
|
||||||
|
@ -88,11 +88,11 @@ class POCKETBOOK360(EB600):
|
|||||||
|
|
||||||
gui_name = 'PocketBook 360'
|
gui_name = 'PocketBook 360'
|
||||||
|
|
||||||
FORMATS = ['epub', 'fb2', 'pdf', 'djvu', 'rtf', 'chm', 'txt']
|
FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'txt']
|
||||||
|
|
||||||
VENDOR_NAME = 'PHILIPS'
|
VENDOR_NAME = 'PHILIPS'
|
||||||
WINDOWS_MAIN_MEM = 'MASS_STORGE'
|
WINDOWS_MAIN_MEM = 'MASS_STORGE'
|
||||||
WINDOWS_CARD_A_MEM = 'MASS_STORAGE'
|
WINDOWS_CARD_A_MEM = 'MASS_STORGE'
|
||||||
|
|
||||||
OSX_MAIN_MEM = 'Philips Mass Storge Media'
|
OSX_MAIN_MEM = 'Philips Mass Storge Media'
|
||||||
OSX_CARD_A_MEM = 'Philips Mass Storge Media'
|
OSX_CARD_A_MEM = 'Philips Mass Storge Media'
|
||||||
|
@ -5,8 +5,10 @@ Define the minimum interface that a device backend must satisfy to be used in
|
|||||||
the GUI. A device backend must subclass the L{Device} class. See prs500.py for
|
the GUI. A device backend must subclass the L{Device} class. See prs500.py for
|
||||||
a backend that implement the Device interface for the SONY PRS500 Reader.
|
a backend that implement the Device interface for the SONY PRS500 Reader.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
|
|
||||||
from calibre.customize import Plugin
|
from calibre.customize import Plugin
|
||||||
|
from calibre.constants import iswindows
|
||||||
|
|
||||||
class DevicePlugin(Plugin):
|
class DevicePlugin(Plugin):
|
||||||
"""
|
"""
|
||||||
@ -21,7 +23,14 @@ class DevicePlugin(Plugin):
|
|||||||
|
|
||||||
# Ordered list of supported formats
|
# Ordered list of supported formats
|
||||||
FORMATS = ["lrf", "rtf", "pdf", "txt"]
|
FORMATS = ["lrf", "rtf", "pdf", "txt"]
|
||||||
|
#: VENDOR_ID can be either an integer, a list of integers or a dictionary
|
||||||
|
#: If it is a dictionary, it must be a dictionary of dictionaries, of the form
|
||||||
|
#: {
|
||||||
|
#: integer_vendor_id : { product_id : [list of BCDs], ... },
|
||||||
|
#: ...
|
||||||
|
#: }
|
||||||
VENDOR_ID = 0x0000
|
VENDOR_ID = 0x0000
|
||||||
|
#: An integer or a list of integers
|
||||||
PRODUCT_ID = 0x0000
|
PRODUCT_ID = 0x0000
|
||||||
# BCD can be either None to not distinguish between devices based on BCD, or
|
# BCD can be either None to not distinguish between devices based on BCD, or
|
||||||
# it can be a list of the BCD numbers of all devices supported by this driver.
|
# it can be a list of the BCD numbers of all devices supported by this driver.
|
||||||
@ -29,6 +38,88 @@ class DevicePlugin(Plugin):
|
|||||||
THUMBNAIL_HEIGHT = 68 # Height for thumbnails on device
|
THUMBNAIL_HEIGHT = 68 # Height for thumbnails on device
|
||||||
# Whether the metadata on books can be set via the GUI.
|
# Whether the metadata on books can be set via the GUI.
|
||||||
CAN_SET_METADATA = True
|
CAN_SET_METADATA = True
|
||||||
|
#: Path separator for paths to books on device
|
||||||
|
path_sep = os.sep
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def test_bcd_windows(cls, device_id, bcd):
|
||||||
|
if bcd is None or len(bcd) == 0:
|
||||||
|
return True
|
||||||
|
for c in bcd:
|
||||||
|
# Bug in winutil.get_usb_devices converts a to :
|
||||||
|
rev = ('rev_%4.4x'%c).replace('a', ':')
|
||||||
|
if rev in device_id:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def is_usb_connected_windows(cls, devices_on_system):
|
||||||
|
|
||||||
|
def id_iterator():
|
||||||
|
if hasattr(cls.VENDOR_ID, 'keys'):
|
||||||
|
for vid in cls.VENDOR_ID:
|
||||||
|
vend = cls.VENDOR_ID[vid]
|
||||||
|
for pid in vend:
|
||||||
|
bcd = vend[pid]
|
||||||
|
yield vid, pid, bcd
|
||||||
|
else:
|
||||||
|
vendors = cls.VENDOR_ID if hasattr(cls.VENDOR_ID, '__len__') else [cls.VENDOR_ID]
|
||||||
|
products = cls.PRODUCT_ID if hasattr(cls.PRODUCT_ID, '__len__') else [cls.PRODUCT_ID]
|
||||||
|
for vid in vendors:
|
||||||
|
for pid in products:
|
||||||
|
yield vid, pid, cls.BCD
|
||||||
|
|
||||||
|
for vendor_id, product_id, bcd in id_iterator():
|
||||||
|
vid, pid = 'vid_%4.4x'%vendor_id, 'pid_%4.4x'%product_id
|
||||||
|
vidd, pidd = 'vid_%i'%vendor_id, 'pid_%i'%product_id
|
||||||
|
for device_id in devices_on_system:
|
||||||
|
if (vid in device_id or vidd in device_id) and (pid in device_id or pidd in device_id):
|
||||||
|
if cls.test_bcd_windows(device_id, bcd) and cls.can_handle(device_id):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def test_bcd(cls, bcdDevice, bcd):
|
||||||
|
if bcd is None or len(bcd) == 0:
|
||||||
|
return True
|
||||||
|
for c in bcd:
|
||||||
|
if c == bcdDevice:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def is_usb_connected(cls, devices_on_system):
|
||||||
|
'''
|
||||||
|
Return True if a device handled by this plugin is currently connected.
|
||||||
|
|
||||||
|
:param devices_on_system: List of devices currently connected
|
||||||
|
'''
|
||||||
|
if iswindows:
|
||||||
|
return cls.is_usb_connected_windows(devices_on_system)
|
||||||
|
|
||||||
|
vendors_on_system = set([x[0] for x in devices_on_system])
|
||||||
|
vendors = cls.VENDOR_ID if hasattr(cls.VENDOR_ID, '__len__') else [cls.VENDOR_ID]
|
||||||
|
if hasattr(cls.VENDOR_ID, 'keys'):
|
||||||
|
products = []
|
||||||
|
for ven in cls.VENDOR_ID:
|
||||||
|
products.extend(cls.VENDOR_ID[ven].keys())
|
||||||
|
else:
|
||||||
|
products = cls.PRODUCT_ID if hasattr(cls.PRODUCT_ID, '__len__') else [cls.PRODUCT_ID]
|
||||||
|
|
||||||
|
for vid in vendors:
|
||||||
|
if vid in vendors_on_system:
|
||||||
|
for cvid, pid, bcd in devices_on_system:
|
||||||
|
if cvid == vid:
|
||||||
|
if pid in products:
|
||||||
|
if hasattr(cls.VENDOR_ID, 'keys'):
|
||||||
|
cbcd = cls.VENDOR_ID[vid][pid]
|
||||||
|
else:
|
||||||
|
cbcd = cls.BCD
|
||||||
|
if cls.test_bcd(bcd, cbcd) and cls.can_handle((vid,
|
||||||
|
pid, bcd)):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def reset(self, key='-1', log_packets=False, report_progress=None) :
|
def reset(self, key='-1', log_packets=False, report_progress=None) :
|
||||||
"""
|
"""
|
||||||
|
@ -26,6 +26,7 @@ class PRS505(CLI, Device):
|
|||||||
description = _('Communicate with the Sony PRS-300/505/500 eBook reader.')
|
description = _('Communicate with the Sony PRS-300/505/500 eBook reader.')
|
||||||
author = _('Kovid Goyal and John Schember')
|
author = _('Kovid Goyal and John Schember')
|
||||||
supported_platforms = ['windows', 'osx', 'linux']
|
supported_platforms = ['windows', 'osx', 'linux']
|
||||||
|
path_sep = '/'
|
||||||
|
|
||||||
FORMATS = ['epub', 'lrf', 'lrx', 'rtf', 'pdf', 'txt']
|
FORMATS = ['epub', 'lrf', 'lrx', 'rtf', 'pdf', 'txt']
|
||||||
|
|
||||||
|
@ -67,44 +67,8 @@ class DeviceScanner(object):
|
|||||||
'''Fetch list of connected USB devices from operating system'''
|
'''Fetch list of connected USB devices from operating system'''
|
||||||
self.devices = self.scanner()
|
self.devices = self.scanner()
|
||||||
|
|
||||||
def test_bcd_windows(self, device_id, bcd):
|
|
||||||
if bcd is None or len(bcd) == 0:
|
|
||||||
return True
|
|
||||||
for c in bcd:
|
|
||||||
# Bug in winutil.get_usb_devices converts a to :
|
|
||||||
rev = ('rev_%4.4x'%c).replace('a', ':')
|
|
||||||
if rev in device_id:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def test_bcd(self, bcdDevice, bcd):
|
|
||||||
if bcd is None or len(bcd) == 0:
|
|
||||||
return True
|
|
||||||
for c in bcd:
|
|
||||||
if c == bcdDevice:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def is_device_connected(self, device):
|
def is_device_connected(self, device):
|
||||||
vendor_ids = device.VENDOR_ID if hasattr(device.VENDOR_ID, '__len__') else [device.VENDOR_ID]
|
return device.is_usb_connected(self.devices)
|
||||||
product_ids = device.PRODUCT_ID if hasattr(device.PRODUCT_ID, '__len__') else [device.PRODUCT_ID]
|
|
||||||
if iswindows:
|
|
||||||
for vendor_id in vendor_ids:
|
|
||||||
for product_id in product_ids:
|
|
||||||
vid, pid = 'vid_%4.4x'%vendor_id, 'pid_%4.4x'%product_id
|
|
||||||
vidd, pidd = 'vid_%i'%vendor_id, 'pid_%i'%product_id
|
|
||||||
for device_id in self.devices:
|
|
||||||
if (vid in device_id or vidd in device_id) and (pid in device_id or pidd in device_id):
|
|
||||||
if self.test_bcd_windows(device_id, getattr(device, 'BCD', None)):
|
|
||||||
if device.can_handle(device_id):
|
|
||||||
return True
|
|
||||||
else:
|
|
||||||
for vendor, product, bcdDevice in self.devices:
|
|
||||||
if vendor in vendor_ids and product in product_ids:
|
|
||||||
if self.test_bcd(bcdDevice, getattr(device, 'BCD', None)):
|
|
||||||
if device.can_handle((vendor, product, bcdDevice)):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def main(args=sys.argv):
|
def main(args=sys.argv):
|
||||||
|
@ -211,8 +211,16 @@ class Device(DeviceConfig, DevicePlugin):
|
|||||||
def windows_match_device(self, drive, attr):
|
def windows_match_device(self, drive, attr):
|
||||||
pnp_id = str(drive.PNPDeviceID).upper()
|
pnp_id = str(drive.PNPDeviceID).upper()
|
||||||
device_id = getattr(self, attr)
|
device_id = getattr(self, attr)
|
||||||
if device_id is None or \
|
|
||||||
'VEN_' + str(self.VENDOR_NAME).upper() not in pnp_id:
|
def test_vendor():
|
||||||
|
vendors = [self.VENDOR_NAME] if isinstance(self.VENDOR_NAME,
|
||||||
|
basestring) else self.VENDOR_NAME
|
||||||
|
for v in vendors:
|
||||||
|
if 'VEN_'+str(v).upper() in pnp_id:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
if device_id is None or not test_vendor():
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if hasattr(device_id, 'search'):
|
if hasattr(device_id, 'search'):
|
||||||
@ -606,7 +614,6 @@ class Device(DeviceConfig, DevicePlugin):
|
|||||||
|
|
||||||
def eject_linux(self):
|
def eject_linux(self):
|
||||||
drives = self.find_device_nodes()
|
drives = self.find_device_nodes()
|
||||||
success = False
|
|
||||||
for drive in drives:
|
for drive in drives:
|
||||||
if drive:
|
if drive:
|
||||||
cmd = 'calibre-mount-helper'
|
cmd = 'calibre-mount-helper'
|
||||||
@ -663,7 +670,8 @@ class Device(DeviceConfig, DevicePlugin):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
self._main_prefix = self._card_a_prefix = self._card_b_prefix = None
|
self._main_prefix = self._card_a_prefix = self._card_b_prefix = None
|
||||||
|
|
||||||
|
def get_main_ebook_dir(self):
|
||||||
|
return self.EBOOK_DIR_MAIN
|
||||||
|
|
||||||
def _sanity_check(self, on_card, files):
|
def _sanity_check(self, on_card, files):
|
||||||
if on_card == 'carda' and not self._card_a_prefix:
|
if on_card == 'carda' and not self._card_a_prefix:
|
||||||
@ -680,8 +688,15 @@ class Device(DeviceConfig, DevicePlugin):
|
|||||||
path = os.path.join(self._card_b_prefix,
|
path = os.path.join(self._card_b_prefix,
|
||||||
*(self.EBOOK_DIR_CARD_B.split('/')))
|
*(self.EBOOK_DIR_CARD_B.split('/')))
|
||||||
else:
|
else:
|
||||||
path = os.path.join(self._main_prefix,
|
candidates = self.get_main_ebook_dir()
|
||||||
*(self.EBOOK_DIR_MAIN.split('/')))
|
if isinstance(candidates, basestring):
|
||||||
|
candidates = [candidates]
|
||||||
|
candidates = [os.path.join(self._main_prefix, *(x.split('/'))) for x
|
||||||
|
in candidates]
|
||||||
|
existing = [x for x in candidates if os.path.exists(x)]
|
||||||
|
if not existing:
|
||||||
|
existing = candidates[:1]
|
||||||
|
path = existing[0]
|
||||||
|
|
||||||
def get_size(obj):
|
def get_size(obj):
|
||||||
if hasattr(obj, 'seek'):
|
if hasattr(obj, 'seek'):
|
||||||
|
@ -9,14 +9,22 @@ from calibre.utils.config import Config, ConfigProxy
|
|||||||
class DeviceConfig(object):
|
class DeviceConfig(object):
|
||||||
|
|
||||||
HELP_MESSAGE = _('Configure Device')
|
HELP_MESSAGE = _('Configure Device')
|
||||||
|
EXTRA_CUSTOMIZATION_MESSAGE = None
|
||||||
|
EXTRA_CUSTOMIZATION_DEFAULT = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _config(cls):
|
def _config(cls):
|
||||||
klass = cls if isinstance(cls, type) else cls.__class__
|
klass = cls if isinstance(cls, type) else cls.__class__
|
||||||
c = Config('device_drivers_%s' % klass.__name__, _('settings for device drivers'))
|
c = Config('device_drivers_%s' % klass.__name__, _('settings for device drivers'))
|
||||||
c.add_opt('format_map', default=cls.FORMATS, help=_('Ordered list of formats the device will accept'))
|
c.add_opt('format_map', default=cls.FORMATS,
|
||||||
c.add_opt('use_subdirs', default=True, help=_('Place files in sub directories if the device supports them'))
|
help=_('Ordered list of formats the device will accept'))
|
||||||
c.add_opt('read_metadata', default=True, help=_('Read metadata from files on device'))
|
c.add_opt('use_subdirs', default=True,
|
||||||
|
help=_('Place files in sub directories if the device supports them'))
|
||||||
|
c.add_opt('read_metadata', default=True,
|
||||||
|
help=_('Read metadata from files on device'))
|
||||||
|
c.add_opt('extra_customization',
|
||||||
|
default=cls.EXTRA_CUSTOMIZATION_DEFAULT,
|
||||||
|
help=_('Extra customization'))
|
||||||
return c
|
return c
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -27,16 +35,23 @@ class DeviceConfig(object):
|
|||||||
def config_widget(cls):
|
def config_widget(cls):
|
||||||
from calibre.gui2.device_drivers.configwidget import ConfigWidget
|
from calibre.gui2.device_drivers.configwidget import ConfigWidget
|
||||||
cw = ConfigWidget(cls.settings(), cls.FORMATS, cls.SUPPORTS_SUB_DIRS,
|
cw = ConfigWidget(cls.settings(), cls.FORMATS, cls.SUPPORTS_SUB_DIRS,
|
||||||
cls.MUST_READ_METADATA)
|
cls.MUST_READ_METADATA, cls.EXTRA_CUSTOMIZATION_MESSAGE,
|
||||||
|
cls.EXTRA_CUSTOMIZATION_DEFAULT)
|
||||||
return cw
|
return cw
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def save_settings(cls, config_widget):
|
def save_settings(cls, config_widget):
|
||||||
cls._configProxy()['format_map'] = config_widget.format_map()
|
proxy = cls._configProxy()
|
||||||
|
proxy['format_map'] = config_widget.format_map()
|
||||||
if cls.SUPPORTS_SUB_DIRS:
|
if cls.SUPPORTS_SUB_DIRS:
|
||||||
cls._configProxy()['use_subdirs'] = config_widget.use_subdirs()
|
proxy['use_subdirs'] = config_widget.use_subdirs()
|
||||||
if not cls.MUST_READ_METADATA:
|
if not cls.MUST_READ_METADATA:
|
||||||
cls._configProxy()['read_metadata'] = config_widget.read_metadata()
|
proxy['read_metadata'] = config_widget.read_metadata()
|
||||||
|
if cls.EXTRA_CUSTOMIZATION_MESSAGE:
|
||||||
|
ec = unicode(config_widget.opt_extra_customization.text()).strip()
|
||||||
|
if not ec:
|
||||||
|
ec = None
|
||||||
|
proxy['extra_customization'] = ec
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def settings(cls):
|
def settings(cls):
|
||||||
|
@ -312,7 +312,6 @@ class EPUBOutput(OutputFormatPlugin):
|
|||||||
for tag in XPath('//h:center')(root):
|
for tag in XPath('//h:center')(root):
|
||||||
tag.tag = XHTML('div')
|
tag.tag = XHTML('div')
|
||||||
tag.set('style', 'text-align:center')
|
tag.set('style', 'text-align:center')
|
||||||
|
|
||||||
# ADE can't handle & in an img url
|
# ADE can't handle & in an img url
|
||||||
for tag in XPath('//h:img[@src]')(root):
|
for tag in XPath('//h:img[@src]')(root):
|
||||||
tag.set('src', tag.get('src', '').replace('&', ''))
|
tag.set('src', tag.get('src', '').replace('&', ''))
|
||||||
@ -340,6 +339,7 @@ class EPUBOutput(OutputFormatPlugin):
|
|||||||
else:
|
else:
|
||||||
self.oeb.log.warn('No stylesheet found')
|
self.oeb.log.warn('No stylesheet found')
|
||||||
|
|
||||||
|
|
||||||
def workaround_sony_quirks(self):
|
def workaround_sony_quirks(self):
|
||||||
'''
|
'''
|
||||||
Perform toc link transforms to alleviate slow loading.
|
Perform toc link transforms to alleviate slow loading.
|
||||||
|
@ -43,8 +43,11 @@ class FB2Input(InputFormatPlugin):
|
|||||||
from calibre.ebooks.oeb.base import XLINK_NS
|
from calibre.ebooks.oeb.base import XLINK_NS
|
||||||
NAMESPACES = {'f':FB2NS, 'l':XLINK_NS}
|
NAMESPACES = {'f':FB2NS, 'l':XLINK_NS}
|
||||||
log.debug('Parsing XML...')
|
log.debug('Parsing XML...')
|
||||||
parser = etree.XMLParser(recover=True, no_network=True)
|
raw = stream.read()
|
||||||
doc = etree.fromstring(stream.read())
|
try:
|
||||||
|
doc = etree.fromstring(raw)
|
||||||
|
except etree.XMLSyntaxError:
|
||||||
|
doc = etree.fromstring(raw.replace('& ', '&'))
|
||||||
self.extract_embedded_content(doc)
|
self.extract_embedded_content(doc)
|
||||||
log.debug('Converting XML to HTML...')
|
log.debug('Converting XML to HTML...')
|
||||||
ss = open(P('templates/fb2.xsl'), 'rb').read()
|
ss = open(P('templates/fb2.xsl'), 'rb').read()
|
||||||
|
@ -21,4 +21,26 @@ class LITInput(InputFormatPlugin):
|
|||||||
from calibre.ebooks.conversion.plumber import create_oebbook
|
from calibre.ebooks.conversion.plumber import create_oebbook
|
||||||
return create_oebbook(log, stream, options, self, reader=LitReader)
|
return create_oebbook(log, stream, options, self, reader=LitReader)
|
||||||
|
|
||||||
|
def postprocess_book(self, oeb, opts, log):
|
||||||
|
from calibre.ebooks.oeb.base import XHTML_NS, XPath, XHTML
|
||||||
|
for item in oeb.spine:
|
||||||
|
root = item.data
|
||||||
|
if not hasattr(root, 'xpath'): continue
|
||||||
|
body = XPath('//h:body')(root)
|
||||||
|
if body:
|
||||||
|
body = body[0]
|
||||||
|
if len(body) == 1 and body[0].tag == XHTML('pre'):
|
||||||
|
pre = body[0]
|
||||||
|
from calibre.ebooks.txt.processor import convert_basic
|
||||||
|
from lxml import etree
|
||||||
|
import copy
|
||||||
|
html = convert_basic(pre.text).replace('<html>',
|
||||||
|
'<html xmlns="%s">'%XHTML_NS)
|
||||||
|
root = etree.fromstring(html)
|
||||||
|
body = XPath('//h:body')(root)
|
||||||
|
pre.tag = XHTML('div')
|
||||||
|
pre.text = ''
|
||||||
|
for elem in body:
|
||||||
|
ne = copy.deepcopy(elem)
|
||||||
|
pre.append(ne)
|
||||||
|
|
||||||
|
@ -866,6 +866,10 @@ class LitContainer(object):
|
|||||||
atoms = self._litfile.get_atoms(entry)
|
atoms = self._litfile.get_atoms(entry)
|
||||||
unbin = UnBinary(raw, name, manifest, HTML_MAP, atoms)
|
unbin = UnBinary(raw, name, manifest, HTML_MAP, atoms)
|
||||||
content = HTML_DECL + str(unbin)
|
content = HTML_DECL + str(unbin)
|
||||||
|
tags = ('personname', 'place', 'city', 'country-region')
|
||||||
|
pat = r'(?i)</{0,1}st1:(%s)>'%('|'.join(tags))
|
||||||
|
content = re.sub(pat, '', content)
|
||||||
|
content = re.sub(r'<(/{0,1})form>', r'<\1div>', content)
|
||||||
else:
|
else:
|
||||||
internal = '/'.join(('/data', entry.internal))
|
internal = '/'.join(('/data', entry.internal))
|
||||||
content = self._litfile.get_file(internal)
|
content = self._litfile.get_file(internal)
|
||||||
|
@ -106,7 +106,7 @@ def process_file(lrfpath, opts, logger=None):
|
|||||||
os.makedirs(opts.out)
|
os.makedirs(opts.out)
|
||||||
|
|
||||||
document = LRFDocument(open(lrfpath, 'rb'))
|
document = LRFDocument(open(lrfpath, 'rb'))
|
||||||
conv = LRFConverter(document, opts, logger)
|
LRFConverter(document, opts, logger)
|
||||||
|
|
||||||
|
|
||||||
def main(args=sys.argv):
|
def main(args=sys.argv):
|
||||||
|
@ -872,8 +872,9 @@ class Text(LRFStream):
|
|||||||
if isinstance(c, basestring):
|
if isinstance(c, basestring):
|
||||||
s += c
|
s += c
|
||||||
elif c is None:
|
elif c is None:
|
||||||
p = open_containers.pop()
|
if open_containers:
|
||||||
s += u'</%s>'%(p.name,)
|
p = open_containers.pop()
|
||||||
|
s += u'</%s>'%(p.name,)
|
||||||
else:
|
else:
|
||||||
s += unicode(c)
|
s += unicode(c)
|
||||||
if not c.self_closing:
|
if not c.self_closing:
|
||||||
|
@ -2207,7 +2207,7 @@ class JumpButton(LrsObject, LrsContainer):
|
|||||||
def toElement(self, se):
|
def toElement(self, se):
|
||||||
b = self.lrsObjectElement("Button")
|
b = self.lrsObjectElement("Button")
|
||||||
pb = SubElement(b, "PushButton")
|
pb = SubElement(b, "PushButton")
|
||||||
jt = SubElement(pb, "JumpTo",
|
SubElement(pb, "JumpTo",
|
||||||
refpage=str(self.textBlock.parent.objId),
|
refpage=str(self.textBlock.parent.objId),
|
||||||
refobj=str(self.textBlock.objId))
|
refobj=str(self.textBlock.objId))
|
||||||
return b
|
return b
|
||||||
|
@ -323,7 +323,7 @@ class MobiReader(object):
|
|||||||
self.log.warning('Malformed markup, parsing using BeautifulSoup')
|
self.log.warning('Malformed markup, parsing using BeautifulSoup')
|
||||||
try:
|
try:
|
||||||
root = soupparser.fromstring(self.processed_html)
|
root = soupparser.fromstring(self.processed_html)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
self.log.warning('MOBI markup appears to contain random bytes. Stripping.')
|
self.log.warning('MOBI markup appears to contain random bytes. Stripping.')
|
||||||
self.processed_html = self.remove_random_bytes(self.processed_html)
|
self.processed_html = self.remove_random_bytes(self.processed_html)
|
||||||
root = soupparser.fromstring(self.processed_html)
|
root = soupparser.fromstring(self.processed_html)
|
||||||
|
@ -510,7 +510,7 @@ class MobiWriter(object):
|
|||||||
self._oeb.log.warning('_generate_flat_indexed_navpoints: Failed to generate index')
|
self._oeb.log.warning('_generate_flat_indexed_navpoints: Failed to generate index')
|
||||||
# Zero out self._HTMLRecords, return False
|
# Zero out self._HTMLRecords, return False
|
||||||
self._HTMLRecords = []
|
self._HTMLRecords = []
|
||||||
last_name = None
|
#last_name = None
|
||||||
return False
|
return False
|
||||||
|
|
||||||
previousOffset = offset
|
previousOffset = offset
|
||||||
@ -545,7 +545,7 @@ class MobiWriter(object):
|
|||||||
if self.opts.verbose > 3 : self._oeb.logger.info(" node %03d: %-15.15s... spans HTML records %03d - %03d \t offset: 0x%06X length: 0x%06X" % \
|
if self.opts.verbose > 3 : self._oeb.logger.info(" node %03d: %-15.15s... spans HTML records %03d - %03d \t offset: 0x%06X length: 0x%06X" % \
|
||||||
(myIndex, child.title if child.title.strip() > "" else "(missing)", myStartingRecord, myStartingRecord, offset, length) )
|
(myIndex, child.title if child.title.strip() > "" else "(missing)", myStartingRecord, myStartingRecord, offset, length) )
|
||||||
|
|
||||||
last_name = "%04X" % myIndex
|
#last_name = "%04X" % myIndex
|
||||||
myIndex += 1
|
myIndex += 1
|
||||||
|
|
||||||
# Successfully parsed the entries
|
# Successfully parsed the entries
|
||||||
@ -625,7 +625,7 @@ class MobiWriter(object):
|
|||||||
self._oeb.log.warning('_generate_indexed_navpoints: Failed to generate index')
|
self._oeb.log.warning('_generate_indexed_navpoints: Failed to generate index')
|
||||||
# Zero out self._HTMLRecords, return False
|
# Zero out self._HTMLRecords, return False
|
||||||
self._HTMLRecords = []
|
self._HTMLRecords = []
|
||||||
last_name = None
|
#last_name = None
|
||||||
return False
|
return False
|
||||||
|
|
||||||
previousOffset = offset
|
previousOffset = offset
|
||||||
@ -659,7 +659,7 @@ class MobiWriter(object):
|
|||||||
# *** This should check currentSectionNumber, because content could start late
|
# *** This should check currentSectionNumber, because content could start late
|
||||||
if thisRecord > 0:
|
if thisRecord > 0:
|
||||||
sectionChangesInThisRecord = True
|
sectionChangesInThisRecord = True
|
||||||
sectionChangesInRecordNumber = thisRecord
|
#sectionChangesInRecordNumber = thisRecord
|
||||||
self._currentSectionIndex += 1
|
self._currentSectionIndex += 1
|
||||||
self._HTMLRecords[thisRecord].nextSectionNumber = self._currentSectionIndex
|
self._HTMLRecords[thisRecord].nextSectionNumber = self._currentSectionIndex
|
||||||
# The following node opens the nextSection
|
# The following node opens the nextSection
|
||||||
@ -717,7 +717,7 @@ class MobiWriter(object):
|
|||||||
if self.opts.verbose > 3 : self._oeb.logger.info(" node: %03d %-10.10s %-15.15s... spans HTML records %03d-%03d \t offset: 0x%06X length: 0x%06X" % \
|
if self.opts.verbose > 3 : self._oeb.logger.info(" node: %03d %-10.10s %-15.15s... spans HTML records %03d-%03d \t offset: 0x%06X length: 0x%06X" % \
|
||||||
(myIndex, self._ctoc_map[i]['klass'], child.title if child.title.strip() > "" else "(missing)", thisRecord, thisRecord, offset, length) )
|
(myIndex, self._ctoc_map[i]['klass'], child.title if child.title.strip() > "" else "(missing)", thisRecord, thisRecord, offset, length) )
|
||||||
|
|
||||||
last_name = "%04X" % myIndex
|
#last_name = "%04X" % myIndex
|
||||||
myIndex += 1
|
myIndex += 1
|
||||||
|
|
||||||
# Successfully parsed the entries
|
# Successfully parsed the entries
|
||||||
@ -1999,7 +1999,7 @@ class MobiWriter(object):
|
|||||||
self._articleCount = 0
|
self._articleCount = 0
|
||||||
self._chapterCount = 0
|
self._chapterCount = 0
|
||||||
|
|
||||||
first = True
|
#first = True
|
||||||
|
|
||||||
if self._conforming_periodical_toc :
|
if self._conforming_periodical_toc :
|
||||||
self._oeb.logger.info('Generating structured CTOC ...')
|
self._oeb.logger.info('Generating structured CTOC ...')
|
||||||
@ -2007,7 +2007,7 @@ class MobiWriter(object):
|
|||||||
if self.opts.verbose > 2 :
|
if self.opts.verbose > 2 :
|
||||||
self._oeb.logger.info(" %s" % child)
|
self._oeb.logger.info(" %s" % child)
|
||||||
self._add_structured_ctoc_node(child, self._ctoc)
|
self._add_structured_ctoc_node(child, self._ctoc)
|
||||||
first = False
|
#first = False
|
||||||
|
|
||||||
else :
|
else :
|
||||||
self._oeb.logger.info('Generating flat CTOC ...')
|
self._oeb.logger.info('Generating flat CTOC ...')
|
||||||
@ -2025,7 +2025,6 @@ class MobiWriter(object):
|
|||||||
# Test to see if this child's offset is the same as the previous child's
|
# Test to see if this child's offset is the same as the previous child's
|
||||||
# offset, skip it
|
# offset, skip it
|
||||||
h = child.href
|
h = child.href
|
||||||
first = False
|
|
||||||
|
|
||||||
if h is None:
|
if h is None:
|
||||||
self._oeb.logger.warn(' Ignoring TOC entry with no href:',
|
self._oeb.logger.warn(' Ignoring TOC entry with no href:',
|
||||||
@ -2345,7 +2344,7 @@ class MobiWriter(object):
|
|||||||
self._oeb.logger.info( "Writing NCXEntries for mobiType 0x%03X" % myDoc.mobiType)
|
self._oeb.logger.info( "Writing NCXEntries for mobiType 0x%03X" % myDoc.mobiType)
|
||||||
|
|
||||||
sectionParent = myDoc.documentStructure.sectionParents[0]
|
sectionParent = myDoc.documentStructure.sectionParents[0]
|
||||||
articleCount = len(sectionParent.articles)
|
#articleCount = len(sectionParent.articles)
|
||||||
|
|
||||||
# Write opening periodical 0xDF entry
|
# Write opening periodical 0xDF entry
|
||||||
index = 0
|
index = 0
|
||||||
@ -2361,7 +2360,7 @@ class MobiWriter(object):
|
|||||||
while sectionCount <= lastSection :
|
while sectionCount <= lastSection :
|
||||||
# section
|
# section
|
||||||
sectionParent = myDoc.documentStructure.sectionParents[sectionCount - 1]
|
sectionParent = myDoc.documentStructure.sectionParents[sectionCount - 1]
|
||||||
articleCount = len(sectionParent.articles)
|
#articleCount = len(sectionParent.articles)
|
||||||
#index += 1
|
#index += 1
|
||||||
offset = sectionParent.startAddress
|
offset = sectionParent.startAddress
|
||||||
length = sectionParent.sectionLength
|
length = sectionParent.sectionLength
|
||||||
|
@ -799,6 +799,7 @@ class Manifest(object):
|
|||||||
try:
|
try:
|
||||||
data = etree.fromstring(data)
|
data = etree.fromstring(data)
|
||||||
except etree.XMLSyntaxError, err:
|
except etree.XMLSyntaxError, err:
|
||||||
|
self.oeb.log.exception('Initial parse failed:')
|
||||||
repl = lambda m: ENTITYDEFS.get(m.group(1), m.group(0))
|
repl = lambda m: ENTITYDEFS.get(m.group(1), m.group(0))
|
||||||
data = ENTITY_RE.sub(repl, data)
|
data = ENTITY_RE.sub(repl, data)
|
||||||
try:
|
try:
|
||||||
@ -843,6 +844,7 @@ class Manifest(object):
|
|||||||
|
|
||||||
# Force into the XHTML namespace
|
# Force into the XHTML namespace
|
||||||
if not namespace(data.tag):
|
if not namespace(data.tag):
|
||||||
|
self.oeb.log.warn('Forcing', self.href, 'into XHTML namespace')
|
||||||
data.attrib['xmlns'] = XHTML_NS
|
data.attrib['xmlns'] = XHTML_NS
|
||||||
data = etree.tostring(data, encoding=unicode)
|
data = etree.tostring(data, encoding=unicode)
|
||||||
|
|
||||||
@ -859,6 +861,10 @@ class Manifest(object):
|
|||||||
data = re.compile(r'<!--.*?-->', re.DOTALL).sub('',
|
data = re.compile(r'<!--.*?-->', re.DOTALL).sub('',
|
||||||
data)
|
data)
|
||||||
data = re.sub(r'<meta\s+[^>]+?>', '', data)
|
data = re.sub(r'<meta\s+[^>]+?>', '', data)
|
||||||
|
data = data.replace(
|
||||||
|
"<?xml version='1.0' encoding='utf-8'?><o:p></o:p>",
|
||||||
|
'')
|
||||||
|
data = data.replace("<?xml version='1.0' encoding='utf-8'??>", '')
|
||||||
data = etree.fromstring(data)
|
data = etree.fromstring(data)
|
||||||
elif namespace(data.tag) != XHTML_NS:
|
elif namespace(data.tag) != XHTML_NS:
|
||||||
# OEB_DOC_NS, but possibly others
|
# OEB_DOC_NS, but possibly others
|
||||||
|
@ -168,7 +168,6 @@ class OEBReader(object):
|
|||||||
manifest = self.oeb.manifest
|
manifest = self.oeb.manifest
|
||||||
known = set(manifest.hrefs)
|
known = set(manifest.hrefs)
|
||||||
unchecked = set(manifest.values())
|
unchecked = set(manifest.values())
|
||||||
bad = []
|
|
||||||
while unchecked:
|
while unchecked:
|
||||||
new = set()
|
new = set()
|
||||||
for item in unchecked:
|
for item in unchecked:
|
||||||
|
@ -103,7 +103,7 @@ def run(opts, pathtopdf, log):
|
|||||||
pdfreflow.reflow(data)
|
pdfreflow.reflow(data)
|
||||||
index = os.path.join(os.getcwdu(), 'index.xml')
|
index = os.path.join(os.getcwdu(), 'index.xml')
|
||||||
xml = open(index, 'rb').read()
|
xml = open(index, 'rb').read()
|
||||||
#pdfdoc = PDFDocument(xml, opts, log)
|
PDFDocument(xml, opts, log)
|
||||||
|
|
||||||
def option_parser():
|
def option_parser():
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
@ -20,7 +20,7 @@ def is_valid_pdf(pdf_path):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
with open(os.path.abspath(pdf_path), 'rb') as pdf_file:
|
with open(os.path.abspath(pdf_path), 'rb') as pdf_file:
|
||||||
pdf = PdfFileReader(pdf_file)
|
PdfFileReader(pdf_file)
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
@ -596,3 +596,6 @@ def build_forms(srcdir, info=None):
|
|||||||
|
|
||||||
open(compiled_form, 'wb').write(dat)
|
open(compiled_form, 'wb').write(dat)
|
||||||
|
|
||||||
|
_df = os.environ.get('CALIBRE_DEVELOP_FROM', None)
|
||||||
|
if _df and os.path.exists(_df):
|
||||||
|
build_forms(_df)
|
||||||
|
@ -247,7 +247,7 @@ class DeviceManager(Thread):
|
|||||||
def _save_books(self, paths, target):
|
def _save_books(self, paths, target):
|
||||||
'''Copy books from device to disk'''
|
'''Copy books from device to disk'''
|
||||||
for path in paths:
|
for path in paths:
|
||||||
name = path.rpartition('/')[2]
|
name = path.rpartition(getattr(self.device, 'path_sep', '/'))[2]
|
||||||
dest = os.path.join(target, name)
|
dest = os.path.join(target, name)
|
||||||
if os.path.abspath(dest) != os.path.abspath(path):
|
if os.path.abspath(dest) != os.path.abspath(path):
|
||||||
f = open(dest, 'wb')
|
f = open(dest, 'wb')
|
||||||
@ -609,7 +609,6 @@ class DeviceGUI(object):
|
|||||||
def emails_sent(self, results, remove=[]):
|
def emails_sent(self, results, remove=[]):
|
||||||
errors, good = [], []
|
errors, good = [], []
|
||||||
for jobname, exception, tb in results:
|
for jobname, exception, tb in results:
|
||||||
id = jobname.partition(':')[0]
|
|
||||||
title = jobname.partition(':')[-1]
|
title = jobname.partition(':')[-1]
|
||||||
if exception is not None:
|
if exception is not None:
|
||||||
errors.append([title, exception, tb])
|
errors.append([title, exception, tb])
|
||||||
|
@ -11,7 +11,8 @@ from calibre.gui2.device_drivers.configwidget_ui import Ui_ConfigWidget
|
|||||||
class ConfigWidget(QWidget, Ui_ConfigWidget):
|
class ConfigWidget(QWidget, Ui_ConfigWidget):
|
||||||
|
|
||||||
def __init__(self, settings, all_formats, supports_subdirs,
|
def __init__(self, settings, all_formats, supports_subdirs,
|
||||||
must_read_metadata):
|
must_read_metadata, extra_customization_message,
|
||||||
|
extra_customization_value):
|
||||||
|
|
||||||
QWidget.__init__(self)
|
QWidget.__init__(self)
|
||||||
Ui_ConfigWidget.__init__(self)
|
Ui_ConfigWidget.__init__(self)
|
||||||
@ -38,6 +39,14 @@ class ConfigWidget(QWidget, Ui_ConfigWidget):
|
|||||||
self.opt_read_metadata.setChecked(self.settings.read_metadata)
|
self.opt_read_metadata.setChecked(self.settings.read_metadata)
|
||||||
else:
|
else:
|
||||||
self.opt_read_metadata.hide()
|
self.opt_read_metadata.hide()
|
||||||
|
if extra_customization_message:
|
||||||
|
self.extra_customization_label.setText(extra_customization_message)
|
||||||
|
if extra_customization_value:
|
||||||
|
self.opt_extra_customization.setText(extra_customization_value)
|
||||||
|
else:
|
||||||
|
self.extra_customization_label.setVisible(False)
|
||||||
|
self.opt_extra_customization.setVisible(False)
|
||||||
|
|
||||||
|
|
||||||
def up_column(self):
|
def up_column(self):
|
||||||
idx = self.columns.currentRow()
|
idx = self.columns.currentRow()
|
||||||
|
@ -73,23 +73,39 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="opt_use_subdirs">
|
|
||||||
<property name="text">
|
|
||||||
<string>Use sub directories</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QCheckBox" name="opt_read_metadata">
|
|
||||||
<property name="text">
|
|
||||||
<string>Read metadata from files on device</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="opt_read_metadata">
|
||||||
|
<property name="text">
|
||||||
|
<string>Read metadata from files on device</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="opt_use_subdirs">
|
||||||
|
<property name="text">
|
||||||
|
<string>Use sub directories</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0">
|
||||||
|
<widget class="QLabel" name="extra_customization_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Extra customization</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="buddy">
|
||||||
|
<cstring>opt_extra_customization</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QLineEdit" name="opt_extra_customization"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -135,7 +135,7 @@ class FetchMetadata(QDialog, Ui_FetchMetadata):
|
|||||||
set_isbndb_key(key)
|
set_isbndb_key(key)
|
||||||
else:
|
else:
|
||||||
key = None
|
key = None
|
||||||
title = author = publisher = isbn = pubdate = None
|
title = author = publisher = isbn = None
|
||||||
if self.isbn:
|
if self.isbn:
|
||||||
isbn = self.isbn
|
isbn = self.isbn
|
||||||
if self.title:
|
if self.title:
|
||||||
|
@ -50,7 +50,7 @@ class TagEditor(QDialog, Ui_TagEditor):
|
|||||||
confirms, deletes = [], []
|
confirms, deletes = [], []
|
||||||
items = self.available_tags.selectedItems() if item is None else [item]
|
items = self.available_tags.selectedItems() if item is None else [item]
|
||||||
if not items:
|
if not items:
|
||||||
d = error_dialog(self, 'No tags selected', 'You must select at least one tag from the list of Available tags.').exec_()
|
error_dialog(self, 'No tags selected', 'You must select at least one tag from the list of Available tags.').exec_()
|
||||||
return
|
return
|
||||||
for item in items:
|
for item in items:
|
||||||
if self.db.is_tag_used(qstring_to_unicode(item.text())):
|
if self.db.is_tag_used(qstring_to_unicode(item.text())):
|
||||||
|
@ -125,7 +125,6 @@ class JobManager(QAbstractTableModel):
|
|||||||
|
|
||||||
def _update(self):
|
def _update(self):
|
||||||
# Update running time
|
# Update running time
|
||||||
rows = set([])
|
|
||||||
for i, j in enumerate(self.jobs):
|
for i, j in enumerate(self.jobs):
|
||||||
if j.run_state == j.RUNNING:
|
if j.run_state == j.RUNNING:
|
||||||
idx = self.index(i, 3)
|
idx = self.index(i, 3)
|
||||||
|
@ -186,7 +186,7 @@ class TextBlock(object):
|
|||||||
try:
|
try:
|
||||||
self.populate(tb.content)
|
self.populate(tb.content)
|
||||||
self.end_line()
|
self.end_line()
|
||||||
except TextBlock.HeightExceeded, err:
|
except TextBlock.HeightExceeded:
|
||||||
pass
|
pass
|
||||||
#logger.warning('TextBlock height exceeded, skipping line:\n%s'%(err,))
|
#logger.warning('TextBlock height exceeded, skipping line:\n%s'%(err,))
|
||||||
|
|
||||||
|
@ -141,6 +141,7 @@ class TagsModel(QAbstractItemModel):
|
|||||||
data=self.categories[i], category_icon=self.cmap[i])
|
data=self.categories[i], category_icon=self.cmap[i])
|
||||||
for tag in data[r]:
|
for tag in data[r]:
|
||||||
t = TagTreeItem(parent=c, data=tag, icon_map=self.icon_map)
|
t = TagTreeItem(parent=c, data=tag, icon_map=self.icon_map)
|
||||||
|
t
|
||||||
|
|
||||||
self.db.add_listener(self.database_changed)
|
self.db.add_listener(self.database_changed)
|
||||||
self.connect(self, SIGNAL('need_refresh()'), self.refresh,
|
self.connect(self, SIGNAL('need_refresh()'), self.refresh,
|
||||||
@ -229,7 +230,6 @@ class TagsModel(QAbstractItemModel):
|
|||||||
def reset_all_states(self):
|
def reset_all_states(self):
|
||||||
for i in xrange(self.rowCount(QModelIndex())):
|
for i in xrange(self.rowCount(QModelIndex())):
|
||||||
category_index = self.index(i, 0, QModelIndex())
|
category_index = self.index(i, 0, QModelIndex())
|
||||||
category_item = category_index.internalPointer()
|
|
||||||
for j in xrange(self.rowCount(category_index)):
|
for j in xrange(self.rowCount(category_index)):
|
||||||
tag_index = self.index(j, 0, category_index)
|
tag_index = self.index(j, 0, category_index)
|
||||||
tag_item = tag_index.internalPointer()
|
tag_item = tag_index.internalPointer()
|
||||||
|
@ -95,10 +95,6 @@ def convert_single_ebook(parent, db, book_ids, auto_conversion=False, out_format
|
|||||||
return jobs, changed, bad
|
return jobs, changed, bad
|
||||||
|
|
||||||
def convert_bulk_ebook(parent, queue, db, book_ids, out_format=None, args=[]):
|
def convert_bulk_ebook(parent, queue, db, book_ids, out_format=None, args=[]):
|
||||||
changed = False
|
|
||||||
jobs = []
|
|
||||||
bad = []
|
|
||||||
|
|
||||||
total = len(book_ids)
|
total = len(book_ids)
|
||||||
if total == 0:
|
if total == 0:
|
||||||
return None, None, None
|
return None, None, None
|
||||||
|
@ -437,7 +437,7 @@ def move_library(oldloc, newloc, parent, callback_on_complete):
|
|||||||
|
|
||||||
# Try to load existing library at new location
|
# Try to load existing library at new location
|
||||||
try:
|
try:
|
||||||
ndb = LibraryDatabase2(newloc)
|
LibraryDatabase2(newloc)
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
det = traceback.format_exc()
|
det = traceback.format_exc()
|
||||||
error_dialog(parent, _('Invalid database'),
|
error_dialog(parent, _('Invalid database'),
|
||||||
|
@ -889,10 +889,8 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
def formats(self, index, index_is_id=False):
|
def formats(self, index, index_is_id=False):
|
||||||
''' Return available formats as a comma separated list or None if there are no available formats '''
|
''' Return available formats as a comma separated list or None if there are no available formats '''
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
|
||||||
try:
|
try:
|
||||||
formats = self.conn.get('SELECT format FROM data WHERE book=?', (id,))
|
formats = self.conn.get('SELECT format FROM data WHERE book=?', (id,))
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=?', (id,), all=False)
|
|
||||||
formats = map(lambda x:x[0], formats)
|
formats = map(lambda x:x[0], formats)
|
||||||
except:
|
except:
|
||||||
return None
|
return None
|
||||||
@ -910,7 +908,10 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
def format_abspath(self, index, format, index_is_id=False):
|
def format_abspath(self, index, format, index_is_id=False):
|
||||||
'Return absolute path to the ebook file of format `format`'
|
'Return absolute path to the ebook file of format `format`'
|
||||||
id = index if index_is_id else self.id(index)
|
id = index if index_is_id else self.id(index)
|
||||||
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
try:
|
||||||
|
name = self.conn.get('SELECT name FROM data WHERE book=? AND format=?', (id, format), all=False)
|
||||||
|
except:
|
||||||
|
return None
|
||||||
if name:
|
if name:
|
||||||
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
||||||
format = ('.' + format.lower()) if format else ''
|
format = ('.' + format.lower()) if format else ''
|
||||||
@ -1813,11 +1814,9 @@ books_series_link feeds
|
|||||||
else:
|
else:
|
||||||
actual_formats = [x.lower() for x in actual_formats.split(',')]
|
actual_formats = [x.lower() for x in actual_formats.split(',')]
|
||||||
|
|
||||||
mismatch = False
|
|
||||||
for fmt in formats:
|
for fmt in formats:
|
||||||
if fmt in actual_formats:
|
if fmt in actual_formats:
|
||||||
continue
|
continue
|
||||||
mismatch = True
|
|
||||||
if id not in bad:
|
if id not in bad:
|
||||||
bad[id] = []
|
bad[id] = []
|
||||||
bad[id].append(fmt)
|
bad[id].append(fmt)
|
||||||
|
@ -636,10 +636,6 @@ class LibraryServer(object):
|
|||||||
'type="application/atom+xml" href="/stanza/?%s"/>\n'
|
'type="application/atom+xml" href="/stanza/?%s"/>\n'
|
||||||
) % '&'.join(q)
|
) % '&'.join(q)
|
||||||
|
|
||||||
author_list=[]
|
|
||||||
tag_list=[]
|
|
||||||
series_list=[]
|
|
||||||
|
|
||||||
for record in nrecord_list:
|
for record in nrecord_list:
|
||||||
r = record[FIELD_MAP['formats']]
|
r = record[FIELD_MAP['formats']]
|
||||||
r = r.upper() if r else ''
|
r = r.upper() if r else ''
|
||||||
|
@ -388,7 +388,7 @@ class PostInstall:
|
|||||||
finally:
|
finally:
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
shutil.rmtree(tdir)
|
shutil.rmtree(tdir)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
if self.opts.fatal_errors:
|
if self.opts.fatal_errors:
|
||||||
raise
|
raise
|
||||||
self.task_failed('Setting up desktop integration failed')
|
self.task_failed('Setting up desktop integration failed')
|
||||||
|
@ -127,7 +127,6 @@ def generate_ebook_convert_help(preamble, info):
|
|||||||
input and the output formats, the various combinations are listed below:
|
input and the output formats, the various combinations are listed below:
|
||||||
|
|
||||||
''')
|
''')
|
||||||
sections = []
|
|
||||||
toc = {}
|
toc = {}
|
||||||
sec_templ = textwrap.dedent('''\
|
sec_templ = textwrap.dedent('''\
|
||||||
.. include:: ../global.rst
|
.. include:: ../global.rst
|
||||||
@ -141,7 +140,6 @@ def generate_ebook_convert_help(preamble, info):
|
|||||||
|
|
||||||
''')
|
''')
|
||||||
for i, ip in enumerate(input_format_plugins()):
|
for i, ip in enumerate(input_format_plugins()):
|
||||||
path = os.path.join('cli', 'ebook-convert-%d.rst'%i)
|
|
||||||
sraw = sec_templ.format(ip.name)
|
sraw = sec_templ.format(ip.name)
|
||||||
toc[ip.name] = 'ebook-convert-%d'%i
|
toc[ip.name] = 'ebook-convert-%d'%i
|
||||||
for op in output_format_plugins():
|
for op in output_format_plugins():
|
||||||
|
@ -94,11 +94,8 @@ the previously checked out calibre code directory, for example::
|
|||||||
|
|
||||||
cd C:\Users\kovid\work\calibre
|
cd C:\Users\kovid\work\calibre
|
||||||
|
|
||||||
calibre is the directory that contains the src and resources sub directories. Then, run the following command::
|
calibre is the directory that contains the src and resources sub directories.
|
||||||
|
|
||||||
calibre-debug --develop-from src
|
|
||||||
|
|
||||||
This assumes that the location of the calibre install (typically ``C:\Program Files\calibre``) is in your PATH.
|
|
||||||
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
||||||
So, following the example above, it would be ``C:\Users\kovid\work\calibre\src``. A short
|
So, following the example above, it would be ``C:\Users\kovid\work\calibre\src``. A short
|
||||||
`guide <http://docs.python.org/using/windows.html#excursus-setting-environment-variables>`_ to setting environment
|
`guide <http://docs.python.org/using/windows.html#excursus-setting-environment-variables>`_ to setting environment
|
||||||
@ -117,8 +114,6 @@ in your favorite editor and add the line::
|
|||||||
print "Hello, world!"
|
print "Hello, world!"
|
||||||
|
|
||||||
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
||||||
Note that if you make changes to any .ui files (these files define the |app| Graphical User Interface), you have to re-run the
|
|
||||||
``calibre-debug --develop-from src`` command, which will compile the .ui files, so that your changes show up.
|
|
||||||
|
|
||||||
OS X development environment
|
OS X development environment
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -128,11 +123,8 @@ the previously checked out calibre code directory, for example::
|
|||||||
|
|
||||||
cd /Users/kovid/work/calibre
|
cd /Users/kovid/work/calibre
|
||||||
|
|
||||||
calibre is the directory that contains the src and resources sub directories. Then, run the following command::
|
calibre is the directory that contains the src and resources sub directories. Ensure you have installed the |app| commandline tools via Preferences->Advanced in the |app| GUI.
|
||||||
|
|
||||||
calibre-debug --develop-from src
|
|
||||||
|
|
||||||
This assumes that you have installed the |app| command line tools. This can be done via Preferences->Advanced in the |app| GUI.
|
|
||||||
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
||||||
So, following the example above, it would be ``/Users/kovid/work/calibre/src``. Apple
|
So, following the example above, it would be ``/Users/kovid/work/calibre/src``. Apple
|
||||||
`documentation <http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html#//apple_ref/doc/uid/20002093-BCIJIJBH>`_
|
`documentation <http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html#//apple_ref/doc/uid/20002093-BCIJIJBH>`_
|
||||||
@ -151,8 +143,6 @@ in your favorite editor and add the line::
|
|||||||
print "Hello, world!"
|
print "Hello, world!"
|
||||||
|
|
||||||
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
||||||
Note that if you make changes to any .ui files (these files define the |app| Graphical User Interface), you have to re-run the
|
|
||||||
``calibre-debug --develop-from src`` command, which will compile the .ui files, so that your changes show up.
|
|
||||||
|
|
||||||
Linux development environment
|
Linux development environment
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -166,9 +156,7 @@ Install the |app| using the binary installer. The opena terminal and change to
|
|||||||
|
|
||||||
cd /home/kovid/work/calibre
|
cd /home/kovid/work/calibre
|
||||||
|
|
||||||
calibre is the directory that contains the src and resources sub directories. Then, run the following command::
|
calibre is the directory that contains the src and resources sub directories.
|
||||||
|
|
||||||
calibre-debug --develop-from src
|
|
||||||
|
|
||||||
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
The next step is to set the environment variable ``CALIBRE_DEVELOP_FROM`` to the absolute path to the src directory.
|
||||||
So, following the example above, it would be ``/home/kovid/work/calibre/src``. How to set environment variables depends on
|
So, following the example above, it would be ``/home/kovid/work/calibre/src``. How to set environment variables depends on
|
||||||
@ -187,7 +175,4 @@ in your favorite editor and add the line::
|
|||||||
print "Hello, world!"
|
print "Hello, world!"
|
||||||
|
|
||||||
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
near the top of the file. Now run the command :command:`calibredb`. The very first line of output should be ``Hello, world!``.
|
||||||
Note that if you make changes to any .ui files (these files define the |app| Graphical User Interface), you have to re-run the
|
|
||||||
``calibre-debug --develop-from src`` command, which will compile the .ui files, so that your changes show up.
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
|
|||||||
shortname = shortname[:-2]
|
shortname = shortname[:-2]
|
||||||
id = '%s.%s' % (id, shortname)
|
id = '%s.%s' % (id, shortname)
|
||||||
else:
|
else:
|
||||||
id = descr = None
|
id = None
|
||||||
|
|
||||||
if id:
|
if id:
|
||||||
item = ' '*12 + '<keyword name="%s" id="%s" ref="%s"/>' % (
|
item = ' '*12 + '<keyword name="%s" id="%s" ref="%s"/>' % (
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
'''
|
|
||||||
Trac Macro to generate an end use Changelog from the svn logs.
|
|
||||||
'''
|
|
||||||
import re, collections, time, os
|
|
||||||
|
|
||||||
from bzrlib import log as blog, branch
|
|
||||||
|
|
||||||
from cStringIO import StringIO
|
|
||||||
|
|
||||||
from trac.wiki.formatter import Formatter
|
|
||||||
from trac.wiki.macros import WikiMacroBase
|
|
||||||
from trac.util import Markup
|
|
||||||
|
|
||||||
|
|
||||||
BZR_PATH = '/usr/local/calibre'
|
|
||||||
|
|
||||||
class ChangelogFormatter(blog.LogFormatter):
|
|
||||||
|
|
||||||
supports_tags = True
|
|
||||||
supports_merge_revisions = False
|
|
||||||
_show_advice = False
|
|
||||||
|
|
||||||
def __init__(self, num_of_versions=20):
|
|
||||||
self.num_of_versions = num_of_versions
|
|
||||||
self.messages = collections.deque()
|
|
||||||
self.entries = []
|
|
||||||
self.current_entry = None
|
|
||||||
|
|
||||||
def log_revision(self, r):
|
|
||||||
if len(self.entries) > self.num_of_versions-1:
|
|
||||||
return
|
|
||||||
msg = r.rev.message
|
|
||||||
match = re.match(r'version\s+(\d+\.\d+.\d+)', msg)
|
|
||||||
|
|
||||||
if match:
|
|
||||||
if self.current_entry is not None:
|
|
||||||
self.entries.append((self.current_entry, set(self.messages)))
|
|
||||||
timestamp = r.rev.timezone + r.rev.timestamp
|
|
||||||
self.current_entry = match.group(1) + time.strftime(' (%d %b, %Y)', time.gmtime(timestamp))
|
|
||||||
self.messages = collections.deque()
|
|
||||||
|
|
||||||
else:
|
|
||||||
if re.search(r'[a-zA-Z]', msg) and len(msg.strip()) > 5:
|
|
||||||
if 'translation' not in msg and not msg.startswith('IGN'):
|
|
||||||
self.messages.append(msg.strip())
|
|
||||||
|
|
||||||
def to_wiki_txt(self):
|
|
||||||
txt = ['= Changelog =\n[[PageOutline]]']
|
|
||||||
for entry in self.entries:
|
|
||||||
txt.append(u'----\n== Version '+entry[0]+' ==')
|
|
||||||
if entry[0].strip().startswith('0.6.0'):
|
|
||||||
txt.append(u'For a list of new features in 0.6.0 see http://calibre.kovidgoyal.net/new_in_6')
|
|
||||||
else:
|
|
||||||
for msg in entry[1]:
|
|
||||||
txt.append(u' * ' + msg)
|
|
||||||
|
|
||||||
return (u'\n'.join(txt)).encode('ascii', 'replace')
|
|
||||||
|
|
||||||
def bzr_log_to_txt():
|
|
||||||
path = BZR_PATH
|
|
||||||
if not os.path.exists(path):
|
|
||||||
path = '/home/kovid/work/calibre'
|
|
||||||
b = branch.Branch.open(path)
|
|
||||||
lf = ChangelogFormatter()
|
|
||||||
blog.show_log(b, lf)
|
|
||||||
return lf.to_wiki_txt()
|
|
||||||
|
|
||||||
class ChangeLogMacro(WikiMacroBase):
|
|
||||||
|
|
||||||
def expand_macro(self, formatter, name, args):
|
|
||||||
txt = bzr_log_to_txt().encode('ascii', 'xmlcharrefreplace')
|
|
||||||
out = StringIO()
|
|
||||||
Formatter(formatter.env, formatter.context).format(txt, out)
|
|
||||||
return Markup(out.getvalue().decode('utf8'))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
print bzr_log_to_txt().encode('utf-8')
|
|
||||||
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
__license__ = 'GPL v3'
|
|
||||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
|
||||||
|
|
@ -1,405 +0,0 @@
|
|||||||
__license__ = 'GPL v3'
|
|
||||||
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
|
||||||
__appname__ = 'calibre'
|
|
||||||
import re, textwrap
|
|
||||||
|
|
||||||
DEPENDENCIES = [
|
|
||||||
#(Generic, version, gentoo, ubuntu, fedora)
|
|
||||||
('python', '2.6', None, None, None),
|
|
||||||
('Python Imaging Library', '1.1.6', 'imaging', 'python-imaging', 'python-imaging'),
|
|
||||||
('libusb', '0.1.12', None, None, None),
|
|
||||||
('Qt', '4.5.1', 'qt', 'libqt4-core libqt4-gui', 'qt4'),
|
|
||||||
('PyQt', '4.6.1', 'PyQt4', 'python-qt4', 'PyQt4'),
|
|
||||||
('python-mechanize', '0.1.11', 'dev-python/mechanize', 'python-mechanize', 'python-mechanize'),
|
|
||||||
('ImageMagick', '6.3.5', 'imagemagick', 'imagemagick', 'ImageMagick'),
|
|
||||||
('xdg-utils', '1.0.2', 'xdg-utils', 'xdg-utils', 'xdg-utils'),
|
|
||||||
('lxml', '2.1.5', 'lxml', 'python-lxml', 'python-lxml'),
|
|
||||||
('python-dateutil', '1.4.1', 'python-dateutil', 'python-dateutil', 'python-dateutil'),
|
|
||||||
('BeautifulSoup', '3.0.5', 'beautifulsoup', 'python-beautifulsoup', 'python-BeautifulSoup'),
|
|
||||||
('dnspython', '1.6.0', 'dnspython', 'dnspython', 'dnspython', 'dnspython'),
|
|
||||||
('poppler', '0.12.0', 'poppler', 'poppler', 'poppler', 'poppler'),
|
|
||||||
('podofo', '0.7', 'podofo', 'podofo', 'podofo', 'podofo'),
|
|
||||||
('libwmf', '0.2.8', 'libwmf', 'libwmf', 'libwmf', 'libwmf'),
|
|
||||||
]
|
|
||||||
STATUS = 'http://status.calibre-ebook.com/dist'
|
|
||||||
|
|
||||||
class CoolDistro:
|
|
||||||
|
|
||||||
def __init__(self, name, title, prefix=''):
|
|
||||||
self.title = title
|
|
||||||
url = prefix + '/chrome/dl/images/%s_logo.png'
|
|
||||||
self.img = url%name
|
|
||||||
|
|
||||||
def get_linux_data(version='1.0.0'):
|
|
||||||
data = {'version':version, 'app':__appname__}
|
|
||||||
data['title'] = 'Download calibre for linux'
|
|
||||||
data['supported'] = []
|
|
||||||
for name, title in [
|
|
||||||
('debian', 'Debian Sid'),
|
|
||||||
('exherbo', 'Exherbo'),
|
|
||||||
('foresight', 'Foresight 2.1'),
|
|
||||||
('gentoo', 'Gentoo'),
|
|
||||||
('ubuntu', 'Ubuntu Jaunty Jackalope'),
|
|
||||||
('linux_mint', 'Linux Mint Gloria'),
|
|
||||||
]:
|
|
||||||
data['supported'].append(CoolDistro(name, title,
|
|
||||||
prefix='http://calibre.kovidgoyal.net'))
|
|
||||||
data['dependencies'] = DEPENDENCIES
|
|
||||||
return data
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
import os
|
|
||||||
from calibre.utils.genshi.template import MarkupTemplate
|
|
||||||
import cherrypy
|
|
||||||
class Test:
|
|
||||||
def index(self):
|
|
||||||
raw = open(os.path.dirname(os.path.abspath(__file__))+'/templates/linux.html').read()
|
|
||||||
return MarkupTemplate(raw).generate(**get_linux_data()).render('xhtml')
|
|
||||||
index.exposed = True
|
|
||||||
t = Test()
|
|
||||||
t.index()
|
|
||||||
cherrypy.quickstart(t)
|
|
||||||
else:
|
|
||||||
from pkg_resources import resource_filename
|
|
||||||
|
|
||||||
from trac.core import Component, implements
|
|
||||||
from trac.web.chrome import INavigationContributor, ITemplateProvider, add_stylesheet
|
|
||||||
from trac.web.main import IRequestHandler
|
|
||||||
from trac.util import Markup
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DOWNLOAD_DIR = '/var/www/calibre.kovidgoyal.net/htdocs/downloads'
|
|
||||||
MOBILEREAD = 'https://dev.mobileread.com/dist/kovid/calibre/'
|
|
||||||
#MOBILEREAD = 'http://calibre.kovidgoyal.net/downloads/'
|
|
||||||
|
|
||||||
class OS(dict):
|
|
||||||
"""Dictionary with a default value for unknown keys."""
|
|
||||||
def __init__(self, dict):
|
|
||||||
self.update(dict)
|
|
||||||
if not dict.has_key('img'):
|
|
||||||
self['img'] = self['name']
|
|
||||||
|
|
||||||
|
|
||||||
class Download(Component):
|
|
||||||
implements(INavigationContributor, IRequestHandler, ITemplateProvider)
|
|
||||||
|
|
||||||
request_pat = re.compile(r'\/download$|\/download_\S+')
|
|
||||||
|
|
||||||
# INavigationContributor methods
|
|
||||||
def get_active_navigation_item(self, req):
|
|
||||||
return 'download'
|
|
||||||
|
|
||||||
def get_navigation_items(self, req):
|
|
||||||
yield 'mainnav', 'download', Markup('<a href="/download">Get %s</a>'%(__appname__,))
|
|
||||||
|
|
||||||
def get_templates_dirs(self):
|
|
||||||
return [resource_filename(__name__, 'templates')]
|
|
||||||
|
|
||||||
def get_htdocs_dirs(self):
|
|
||||||
return [('dl', resource_filename(__name__, 'htdocs'))]
|
|
||||||
|
|
||||||
# IRequestHandler methods
|
|
||||||
def match_request(self, req):
|
|
||||||
return self.__class__.request_pat.match(req.path_info)
|
|
||||||
|
|
||||||
def process_request(self, req):
|
|
||||||
add_stylesheet(req, 'dl/css/download.css')
|
|
||||||
if req.path_info == '/download':
|
|
||||||
return self.top_level(req)
|
|
||||||
elif req.path_info == '/download_linux_binary_installer':
|
|
||||||
req.send(LINUX_INSTALLER.replace('%version', self.version_from_filename()), 'text/x-python')
|
|
||||||
else:
|
|
||||||
match = re.match(r'\/download_(\S+)', req.path_info)
|
|
||||||
if match:
|
|
||||||
os = match.group(1)
|
|
||||||
if os == 'windows':
|
|
||||||
return self.windows(req)
|
|
||||||
elif os == 'osx':
|
|
||||||
return self.osx(req)
|
|
||||||
elif os == 'linux':
|
|
||||||
return self.linux(req)
|
|
||||||
|
|
||||||
def top_level(self, req):
|
|
||||||
operating_systems = [
|
|
||||||
OS({'name' : 'windows', 'title' : 'Windows'}),
|
|
||||||
OS({'name' : 'osx', 'title' : 'OS X'}),
|
|
||||||
OS({'name' : 'linux', 'title' : 'Linux'}),
|
|
||||||
]
|
|
||||||
data = dict(title='Get ' + __appname__,
|
|
||||||
operating_systems=operating_systems, width=200,
|
|
||||||
font_size='xx-large', top_level=True)
|
|
||||||
return 'download.html', data, None
|
|
||||||
|
|
||||||
def version_from_filename(self):
|
|
||||||
try:
|
|
||||||
return open(DOWNLOAD_DIR+'/latest_version', 'rb').read().strip()
|
|
||||||
except:
|
|
||||||
return '0.0.0'
|
|
||||||
|
|
||||||
def windows(self, req):
|
|
||||||
version = self.version_from_filename()
|
|
||||||
file = '%s-%s.msi'%(__appname__, version,)
|
|
||||||
data = dict(version = version, name='windows',
|
|
||||||
installer_name='Windows installer',
|
|
||||||
title='Download %s for windows'%(__appname__),
|
|
||||||
compatibility=('%(a)s works on Windows XP, Vista and 7.'
|
|
||||||
'If you are upgrading from a version older than 0.6.17, '
|
|
||||||
'please uninstall %(a)s first.')%dict(a=__appname__,),
|
|
||||||
path=STATUS+'/win32', app=__appname__,
|
|
||||||
note=Markup(\
|
|
||||||
'''
|
|
||||||
<p>If you are updating from a version of calibre older than 0.6.12 on
|
|
||||||
<b>Windows XP</b>, first uninstall calibre, then delete the C:\Program
|
|
||||||
Files\calibre folder (the location may be different if you previously
|
|
||||||
installed calibre elsewhere) and only then install the new version of
|
|
||||||
calibre.</p><p><br /></p>
|
|
||||||
<p>If you are using the <b>SONY PRS-500</b> and %(appname)s does not detect your reader, read on:</p>
|
|
||||||
<blockquote>
|
|
||||||
<p>
|
|
||||||
If you are using 64-bit windows, you're out of luck.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
There may be a conflict with the USB driver from SONY. In windows, you cannot install two drivers
|
|
||||||
for one device. In order to resolve the conflict:
|
|
||||||
<ol>
|
|
||||||
<li>Start Device Manager by clicking Start->Run, typing devmgmt.msc and pressing enter.</li>
|
|
||||||
<li>Uninstall all PRS500 related drivers. You will find them in two locations:
|
|
||||||
<ul>
|
|
||||||
<li>Under "Libusb-Win32"</li>
|
|
||||||
<li>Under "Universal Serial ..." (... depends on the version of windows)</li>
|
|
||||||
</ul>
|
|
||||||
You can uninstall a driver by right clicking on it and selecting uninstall.
|
|
||||||
</li>
|
|
||||||
<li>Once the drivers have been uninstalled, find the file prs500.inf (it will be in the
|
|
||||||
driver folder in the folder in which you installed %(appname)s. Right click on it and
|
|
||||||
select Install.</li>
|
|
||||||
</ol>
|
|
||||||
</p>
|
|
||||||
</blockquote>
|
|
||||||
'''%dict(appname=__appname__)))
|
|
||||||
return 'binary.html', data, None
|
|
||||||
|
|
||||||
def osx(self, req):
|
|
||||||
version = self.version_from_filename()
|
|
||||||
file = 'calibre-%s.dmg'%(version,)
|
|
||||||
data = dict(version = version, name='osx',
|
|
||||||
installer_name='OS X universal dmg',
|
|
||||||
title='Download %s for OS X'%(__appname__),
|
|
||||||
compatibility='%s works on OS X Tiger, Leopard, and Snow Leopard.'%(__appname__,),
|
|
||||||
path=STATUS+'/osx32', app=__appname__,
|
|
||||||
note=Markup(\
|
|
||||||
u'''
|
|
||||||
<ol>
|
|
||||||
<li>To install the command line tools, go to Preferences->Advanced</li>
|
|
||||||
<li>The app cannot be run from within the dmg. You must drag it to a folder on your filesystem (The Desktop, Applications, wherever).</li>
|
|
||||||
<li>In order for localization of the user interface in your language, select your language in the preferences (by pressing u\2318+P) and select your language.</li>
|
|
||||||
</ol>
|
|
||||||
'''))
|
|
||||||
return 'binary.html', data, None
|
|
||||||
|
|
||||||
def linux(self, req):
|
|
||||||
data = get_linux_data(version=self.version_from_filename())
|
|
||||||
return 'linux.html', data, None
|
|
||||||
|
|
||||||
|
|
||||||
LINUX_INSTALLER = textwrap.dedent(r'''
|
|
||||||
import sys, os, shutil, tarfile, subprocess, tempfile, urllib2, re, stat
|
|
||||||
|
|
||||||
MOBILEREAD='https://dev.mobileread.com/dist/kovid/calibre/'
|
|
||||||
#MOBILEREAD='http://calibre.kovidgoyal.net/downloads/'
|
|
||||||
|
|
||||||
|
|
||||||
class TerminalController:
|
|
||||||
BOL = '' #: Move the cursor to the beginning of the line
|
|
||||||
UP = '' #: Move the cursor up one line
|
|
||||||
DOWN = '' #: Move the cursor down one line
|
|
||||||
LEFT = '' #: Move the cursor left one char
|
|
||||||
RIGHT = '' #: Move the cursor right one char
|
|
||||||
|
|
||||||
# Deletion:
|
|
||||||
CLEAR_SCREEN = '' #: Clear the screen and move to home position
|
|
||||||
CLEAR_EOL = '' #: Clear to the end of the line.
|
|
||||||
CLEAR_BOL = '' #: Clear to the beginning of the line.
|
|
||||||
CLEAR_EOS = '' #: Clear to the end of the screen
|
|
||||||
|
|
||||||
# Output modes:
|
|
||||||
BOLD = '' #: Turn on bold mode
|
|
||||||
BLINK = '' #: Turn on blink mode
|
|
||||||
DIM = '' #: Turn on half-bright mode
|
|
||||||
REVERSE = '' #: Turn on reverse-video mode
|
|
||||||
NORMAL = '' #: Turn off all modes
|
|
||||||
|
|
||||||
# Cursor display:
|
|
||||||
HIDE_CURSOR = '' #: Make the cursor invisible
|
|
||||||
SHOW_CURSOR = '' #: Make the cursor visible
|
|
||||||
|
|
||||||
# Terminal size:
|
|
||||||
COLS = None #: Width of the terminal (None for unknown)
|
|
||||||
LINES = None #: Height of the terminal (None for unknown)
|
|
||||||
|
|
||||||
# Foreground colors:
|
|
||||||
BLACK = BLUE = GREEN = CYAN = RED = MAGENTA = YELLOW = WHITE = ''
|
|
||||||
|
|
||||||
# Background colors:
|
|
||||||
BG_BLACK = BG_BLUE = BG_GREEN = BG_CYAN = ''
|
|
||||||
BG_RED = BG_MAGENTA = BG_YELLOW = BG_WHITE = ''
|
|
||||||
|
|
||||||
_STRING_CAPABILITIES = """
|
|
||||||
BOL=cr UP=cuu1 DOWN=cud1 LEFT=cub1 RIGHT=cuf1
|
|
||||||
CLEAR_SCREEN=clear CLEAR_EOL=el CLEAR_BOL=el1 CLEAR_EOS=ed BOLD=bold
|
|
||||||
BLINK=blink DIM=dim REVERSE=rev UNDERLINE=smul NORMAL=sgr0
|
|
||||||
HIDE_CURSOR=cinvis SHOW_CURSOR=cnorm""".split()
|
|
||||||
_COLORS = """BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE""".split()
|
|
||||||
_ANSICOLORS = "BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE".split()
|
|
||||||
|
|
||||||
def __init__(self, term_stream=sys.stdout):
|
|
||||||
# Curses isn't available on all platforms
|
|
||||||
try: import curses
|
|
||||||
except: return
|
|
||||||
|
|
||||||
# If the stream isn't a tty, then assume it has no capabilities.
|
|
||||||
if not hasattr(term_stream, 'isatty') or not term_stream.isatty(): return
|
|
||||||
|
|
||||||
# Check the terminal type. If we fail, then assume that the
|
|
||||||
# terminal has no capabilities.
|
|
||||||
try: curses.setupterm()
|
|
||||||
except: return
|
|
||||||
|
|
||||||
# Look up numeric capabilities.
|
|
||||||
self.COLS = curses.tigetnum('cols')
|
|
||||||
self.LINES = curses.tigetnum('lines')
|
|
||||||
|
|
||||||
# Look up string capabilities.
|
|
||||||
for capability in self._STRING_CAPABILITIES:
|
|
||||||
(attrib, cap_name) = capability.split('=')
|
|
||||||
setattr(self, attrib, self._tigetstr(cap_name) or '')
|
|
||||||
|
|
||||||
# Colors
|
|
||||||
set_fg = self._tigetstr('setf')
|
|
||||||
if set_fg:
|
|
||||||
for i,color in zip(range(len(self._COLORS)), self._COLORS):
|
|
||||||
setattr(self, color, curses.tparm(set_fg, i) or '')
|
|
||||||
set_fg_ansi = self._tigetstr('setaf')
|
|
||||||
if set_fg_ansi:
|
|
||||||
for i,color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
|
|
||||||
setattr(self, color, curses.tparm(set_fg_ansi, i) or '')
|
|
||||||
set_bg = self._tigetstr('setb')
|
|
||||||
if set_bg:
|
|
||||||
for i,color in zip(range(len(self._COLORS)), self._COLORS):
|
|
||||||
setattr(self, 'BG_'+color, curses.tparm(set_bg, i) or '')
|
|
||||||
set_bg_ansi = self._tigetstr('setab')
|
|
||||||
if set_bg_ansi:
|
|
||||||
for i,color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS):
|
|
||||||
setattr(self, 'BG_'+color, curses.tparm(set_bg_ansi, i) or '')
|
|
||||||
|
|
||||||
def _tigetstr(self, cap_name):
|
|
||||||
# String capabilities can include "delays" of the form "$<2>".
|
|
||||||
# For any modern terminal, we should be able to just ignore
|
|
||||||
# these, so strip them out.
|
|
||||||
import curses
|
|
||||||
cap = curses.tigetstr(cap_name) or ''
|
|
||||||
return re.sub(r'\$<\d+>[/*]?', '', cap)
|
|
||||||
|
|
||||||
def render(self, template):
|
|
||||||
return re.sub(r'\$\$|\${\w+}', self._render_sub, template)
|
|
||||||
|
|
||||||
def _render_sub(self, match):
|
|
||||||
s = match.group()
|
|
||||||
if s == '$$': return s
|
|
||||||
else: return getattr(self, s[2:-1])
|
|
||||||
|
|
||||||
class ProgressBar:
|
|
||||||
BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n'
|
|
||||||
HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n'
|
|
||||||
|
|
||||||
def __init__(self, term, header):
|
|
||||||
self.term = term
|
|
||||||
if not (self.term.CLEAR_EOL and self.term.UP and self.term.BOL):
|
|
||||||
raise ValueError("Terminal isn't capable enough -- you "
|
|
||||||
"should use a simpler progress dispaly.")
|
|
||||||
self.width = self.term.COLS or 75
|
|
||||||
self.bar = term.render(self.BAR)
|
|
||||||
self.header = self.term.render(self.HEADER % header.center(self.width))
|
|
||||||
self.cleared = 1 #: true if we haven't drawn the bar yet.
|
|
||||||
|
|
||||||
def update(self, percent, message=''):
|
|
||||||
if isinstance(message, unicode):
|
|
||||||
message = message.encode('utf-8', 'ignore')
|
|
||||||
if self.cleared:
|
|
||||||
sys.stdout.write(self.header)
|
|
||||||
self.cleared = 0
|
|
||||||
n = int((self.width-10)*percent)
|
|
||||||
msg = message.center(self.width)
|
|
||||||
sys.stdout.write(
|
|
||||||
self.term.BOL + self.term.UP + self.term.CLEAR_EOL +
|
|
||||||
(self.bar % (100*percent, '='*n, '-'*(self.width-10-n))) +
|
|
||||||
self.term.CLEAR_EOL + msg)
|
|
||||||
sys.stdout.flush()
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
if not self.cleared:
|
|
||||||
sys.stdout.write(self.term.BOL + self.term.CLEAR_EOL +
|
|
||||||
self.term.UP + self.term.CLEAR_EOL +
|
|
||||||
self.term.UP + self.term.CLEAR_EOL)
|
|
||||||
self.cleared = 1
|
|
||||||
|
|
||||||
def download_tarball():
|
|
||||||
try:
|
|
||||||
pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...')
|
|
||||||
except ValueError:
|
|
||||||
print 'Downloading calibre...'
|
|
||||||
pb = None
|
|
||||||
local = 'calibre-test.tar.bz2'
|
|
||||||
src = open(local) if os.access(local, os.R_OK) else urllib2.urlopen(MOBILEREAD+'calibre-%version-i686.tar.bz2')
|
|
||||||
if hasattr(src, 'info'):
|
|
||||||
size = int(src.info()['content-length'])
|
|
||||||
else:
|
|
||||||
src.seek(0, 2)
|
|
||||||
size = src.tell()
|
|
||||||
src.seek(0)
|
|
||||||
f = tempfile.NamedTemporaryFile()
|
|
||||||
while f.tell() < size:
|
|
||||||
f.write(src.read(4*1024))
|
|
||||||
percent = f.tell()/float(size)
|
|
||||||
if pb is not None:
|
|
||||||
pb.update(percent)
|
|
||||||
else:
|
|
||||||
print '%d%%, '%int(percent*100),
|
|
||||||
f.seek(0)
|
|
||||||
return f
|
|
||||||
|
|
||||||
def extract_tarball(tar, destdir):
|
|
||||||
print 'Extracting application files...'
|
|
||||||
if hasattr(tar, 'read'):
|
|
||||||
subprocess.check_call(['tar', 'xjf', tar.name, '-C', destdir])
|
|
||||||
else:
|
|
||||||
subprocess.check_call(['tar', 'xjf', tar, '-C', destdir])
|
|
||||||
|
|
||||||
def main():
|
|
||||||
defdir = '/opt/calibre'
|
|
||||||
destdir = raw_input('Enter the installation directory for calibre (Its contents will be deleted!)[%s]: '%defdir).strip()
|
|
||||||
if not destdir:
|
|
||||||
destdir = defdir
|
|
||||||
destdir = os.path.abspath(destdir)
|
|
||||||
if os.path.exists(destdir):
|
|
||||||
shutil.rmtree(destdir)
|
|
||||||
os.makedirs(destdir)
|
|
||||||
|
|
||||||
f = download_tarball()
|
|
||||||
|
|
||||||
print 'Extracting files to %s ...'%destdir
|
|
||||||
extract_tarball(f, destdir)
|
|
||||||
mh = os.path.join(destdir, 'calibre-mount-helper')
|
|
||||||
if os.geteuid() == 0:
|
|
||||||
os.chown(mh, 0, 0)
|
|
||||||
os.chmod(mh,
|
|
||||||
stat.S_ISUID|stat.S_ISGID|stat.S_IRUSR|stat.S_IWUSR|stat.S_IXUSR|stat.S_IXGRP|stat.S_IXOTH)
|
|
||||||
else:
|
|
||||||
print 'WARNING: Not running as root. Cannot install mount helper.',
|
|
||||||
print 'Device automounting may not work.'
|
|
||||||
|
|
||||||
pi = os.path.join(destdir, 'calibre_postinstall')
|
|
||||||
subprocess.call(pi, shell=True)
|
|
||||||
return 0
|
|
||||||
''')
|
|
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 95 KiB |
@ -1,40 +0,0 @@
|
|||||||
<!DOCTYPE html
|
|
||||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xmlns:py="http://genshi.edgewall.org/"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
||||||
<xi:include href="layout.html" />
|
|
||||||
<head>
|
|
||||||
<title>$title</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="ctxtnav" class="nav"></div>
|
|
||||||
|
|
||||||
<div id="content" class="binary">
|
|
||||||
<h1>$title</h1>
|
|
||||||
<p>$compatibility</p>
|
|
||||||
<p>
|
|
||||||
<a style="border: 0px" href="$path">
|
|
||||||
<img width="50" height="50" style="border:1px red solid" src="${href.chrome('/dl/images/%s_logo.png'%(name,))}" /> $installer_name
|
|
||||||
</a> (Version: $version <a href="/wiki/Changelog">Changelog</a>)
|
|
||||||
</p>
|
|
||||||
While you wait for the download to complete, please consider donating to support the development
|
|
||||||
of ${app}. If the above link does not work, the files are also available from
|
|
||||||
<a href="https://sourceforge.net/projects/calibre/">sourceforge</a>.
|
|
||||||
<div>
|
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
|
||||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
|
||||||
<input type="hidden" name="hosted_button_id" value="3029289" />
|
|
||||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="Donate to support calibre development" />
|
|
||||||
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" />
|
|
||||||
</form>
|
|
||||||
<br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h2>Note</h2>
|
|
||||||
<div class="note">$note</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,41 +0,0 @@
|
|||||||
<!DOCTYPE html
|
|
||||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xmlns:py="http://genshi.edgewall.org/"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
||||||
<xi:include href="layout.html" />
|
|
||||||
<head>
|
|
||||||
<title>$title</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="ctxtnav" class="nav"></div>
|
|
||||||
<p py:if="not top_level">If you have a 64bit computer, or an outdated operating system, the distribution
|
|
||||||
specific installation may not work for you. In that case, first try the binary installer.
|
|
||||||
If that also does not work, your only recourse is to try to install from source. In order
|
|
||||||
to do that you will have to install all the dependencies as well as the -dev package of PyQt4.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<div id="content" class="download">
|
|
||||||
<h1>$title</h1>
|
|
||||||
<center>
|
|
||||||
<table cellspacing="40px">
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:center; font-size: ${font_size}" py:for="os in operating_systems">
|
|
||||||
<a href="download_${os['name']}" style="text-decoration:none; border:0;">
|
|
||||||
<img width="${width}" height="${width+20}" src="${href.chrome('/dl/images/%s_logo.png'%(os['img'],))}" />
|
|
||||||
</a>
|
|
||||||
<a href="download_${os['name']}" style="text-decoration:none; border:0">
|
|
||||||
<br />
|
|
||||||
${os['title']}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br />
|
|
||||||
|
|
||||||
</center>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,165 +0,0 @@
|
|||||||
<!DOCTYPE html
|
|
||||||
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xmlns:py="http://genshi.edgewall.org/"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
||||||
<xi:include href="layout.html" />
|
|
||||||
<head>
|
|
||||||
<title>${title}</title>
|
|
||||||
<style type="text/css">
|
|
||||||
table tr th.distro_type {
|
|
||||||
font-family: monospace;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: larger;
|
|
||||||
vertical-align:middle;
|
|
||||||
text-align: center;
|
|
||||||
border-bottom: solid 1pt black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.right {
|
|
||||||
margin-left:2em;
|
|
||||||
border-left: solid 1pt black;
|
|
||||||
}
|
|
||||||
|
|
||||||
table#install_info {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-width: 1pt;
|
|
||||||
border-style: solid;
|
|
||||||
table-layout: fixed;
|
|
||||||
width: 95%;
|
|
||||||
background: #F7F7F0 none repeat scroll 0 0;
|
|
||||||
}
|
|
||||||
table#dependencies {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-width: 0pt;
|
|
||||||
font-family:monospace;
|
|
||||||
}
|
|
||||||
.tdata {vertical-align: top;}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="ctxtnav" class="nav"></div>
|
|
||||||
<div id="content" class="download">
|
|
||||||
<h1>${title}</h1>
|
|
||||||
<p>
|
|
||||||
The latest release of ${app} is ${version}. See the
|
|
||||||
<a href="/wiki/Changelog">Changelog</a> for a list of new features.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
${app} is available in the software repositories of the following
|
|
||||||
supported linux distributions:
|
|
||||||
<table id="install_info">
|
|
||||||
<col width="150" /><col width="*" />
|
|
||||||
<tr>
|
|
||||||
<th class="left distro_type">Supported<br/>distributions</th>
|
|
||||||
<th class="right distro_type">Unsupported distributions</th>
|
|
||||||
</tr>
|
|
||||||
<tr class="tdata">
|
|
||||||
<td class="left" style="overflow-y:scroll">
|
|
||||||
<div py:for="distro in supported"
|
|
||||||
style="text-align:center;margin-top:2ex;">
|
|
||||||
<div>
|
|
||||||
<img width="64px" height="64px"
|
|
||||||
src="${distro.img}" alt="${distro.title}" />
|
|
||||||
</div>
|
|
||||||
${distro.title}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="right">
|
|
||||||
<div style="margin-left:2em">
|
|
||||||
<h3>Binary install</h3>
|
|
||||||
<p>
|
|
||||||
${app} has a binary installer that has been
|
|
||||||
tested on a number of distributions on both
|
|
||||||
32-bit and 64-bit x86 machines. To install,
|
|
||||||
copy paste the following command into a terminal
|
|
||||||
and press Enter:
|
|
||||||
</p>
|
|
||||||
<pre class="wiki">
|
|
||||||
sudo python -c "import urllib2; exec urllib2.urlopen('http://status.calibre-ebook.com/linux_installer').read(); main()"
|
|
||||||
</pre>
|
|
||||||
<h4>Note</h4>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
When running the command line utilities,
|
|
||||||
they will segfault after completion. This can
|
|
||||||
be ignored.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
You must have xdg-utils installed
|
|
||||||
on your system before running the installer.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<h3>Source install</h3>
|
|
||||||
<p>
|
|
||||||
<ol>
|
|
||||||
<li>
|
|
||||||
Make sure your system has python ≥ ${dependencies[0][1]}
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Install the various dependencies listed below
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
Run the following commands in a terminal:
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
<pre class="wiki">
|
|
||||||
wget -O- http://status.calibre-ebook.com/dist/src | tar xvz
|
|
||||||
cd calibre*
|
|
||||||
sudo python setup.py install
|
|
||||||
</pre>
|
|
||||||
Note that if your distribution does not have a
|
|
||||||
correctly compiled libunrar.so, ${app} will not
|
|
||||||
support rar files. In order to compile ${app} successfully
|
|
||||||
poppler headers must include XPdf headers. That is, poppler
|
|
||||||
must have been configured with --enable-xpdf-headers. Also,
|
|
||||||
some distributions have buggy libpng headers. See
|
|
||||||
<a href="https://bugs.launchpad.net/ubuntu/+source/libpng/+bug/218409">here</a>
|
|
||||||
for example.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
While you wait for the download to complete, please consider
|
|
||||||
donating to support the development of ${app}.
|
|
||||||
</p>
|
|
||||||
<div>
|
|
||||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
|
||||||
<input type="hidden" name="cmd" value="_s-xclick" />
|
|
||||||
<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" />
|
|
||||||
<img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1" />
|
|
||||||
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHbwYJKoZIhvcNAQcEoIIHYDCCB1wCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYBn7jneGiSLVO8rcDrBtOUXL+HftY+CiC47hTntwICio6qqpLKezIryyG8tKcjY58Rcocur/kDwljEutIafVG7XRA7BJL9eZdHAZsZdX04f4dApzkWwR9w6GQhj0kwmO2ZNE878UcgGZBve4qQKWM8bf2pMY7vJwCNoo6ozpIi3VTELMAkGBSsOAwIaBQAwgewGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIBTALt7s1gJmAgcjEAwUMRYeIdIOE/yi0Y5vrVKBFxOUCbqTx/lu3Rk4EHsODZXLHT+BDA5WSWYO3AXfv2Lmlv1kJ7jWrjUVirYoQ5M4qdIhY9DtvPioIMMRoTJmYM9JKH8n2TWcjJ1XIzIuDP4zn8/Ya9hap3RHOrj2RBj89g7iSuFRsjoA0PYZgtWAKwR7g3LLpjRachn041JO55BEd3YWUgorNQeo3WEHgowLFfTWgFFePkm8OoWA1klWkYp4S07IhX5NaRc8OegkdshpkiIHGAKCCA4cwggODMIIC7KADAgECAgEAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTAeFw0wNDAyMTMxMDEzMTVaFw0zNTAyMTMxMDEzMTVaMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUdO3fxEzEtcnI7ZKZL412XvZPugoni7i7D7prCe0AtaHTc97CYgm7NsAtJyxNLixmhLV8pyIEaiHXWAh8fPKW+R017+EmXrr9EaquPmsVvTywAAE1PMNOKqo2kl4Gxiz9zZqIajOm1fZGWcGS0f5JQ2kBqNbvbg2/Za+GJ/qwUCAwEAAaOB7jCB6zAdBgNVHQ4EFgQUlp98u8ZvF71ZP1LXChvsENZklGswgbsGA1UdIwSBszCBsIAUlp98u8ZvF71ZP1LXChvsENZklGuhgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgV86VpqAWuXvX6Oro4qJ1tYVIT5DgWpE692Ag422H7yRIr/9j/iKG4Thia/Oflx4TdL+IFJBAyPK9v6zZNZtBgPBynXb048hsP16l2vi0k5Q2JKiPDsEfBhGI+HnxLXEaUWAcVfCsQFvd2A1sxRr67ip5y2wwBelUecP3AjJ+YcxggGaMIIBlgIBATCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTA4MDQzMDE1MzkyMlowIwYJKoZIhvcNAQkEMRYEFJSI9/zWx7TUlKPY7kLjnvzB1h6sMA0GCSqGSIb3DQEBAQUABIGAikZNCmQdkWPdfmYnGqOb1f65ViaK0zjHf50azvsigWQLlhHqJ3PgB+jEJH3JU9Pm9M4wgiK23Bg2oIGuIsAfQkYO9mw/HjtDtOQHqXyZZbrM32YGtNWUD4ynakLYnaz7OnPl40aTPD4iDApgsGcj1oMdmw7KA2E9J0l2J9iJXF4=-----END PKCS7-----" />
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<hr/>
|
|
||||||
<h3>Note</h3>
|
|
||||||
<p>
|
|
||||||
If your kernel is compiled with CONFIG_SYSFS_DEPRECATED device detection may not work.
|
|
||||||
</p>
|
|
||||||
<hr/>
|
|
||||||
<h3>Dependencies</h3>
|
|
||||||
${app} has the following dependencies (the listed version is the minimum version)
|
|
||||||
<br/><br/>
|
|
||||||
<table id="dependencies">
|
|
||||||
<tr>
|
|
||||||
<th class="distro_type" style="margin-right:2em">Package</th>
|
|
||||||
<th class="distro_type">Version</th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr class="dependency" py:for="dep in dependencies">
|
|
||||||
<td style="margin-right:2em">${dep[0]}</td><td>${dep[1]}</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<h3>Current calibre versions available in various distros</h3>
|
|
||||||
<div id="osw_calibre"></div>
|
|
||||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script>
|
|
||||||
<script src="http://static.oswatershed.org/js/package_badge.js" type="text/javascript"></script>
|
|
||||||
<script>$(document).ready(function(){ package_badge("calibre", "#osw_calibre"); });</script>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -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: 2009-11-26 20:00+0000\n"
|
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||||
"PO-Revision-Date: 2009-11-26 00:09+0000\n"
|
"PO-Revision-Date: 2009-11-30 02:37+0000\n"
|
||||||
"Last-Translator: Jon <jon@linde.net>\n"
|
"Last-Translator: Jon <jon@linde.net>\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: 2009-11-27 04:47+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-01 04:38+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -68,9 +68,9 @@ msgstr "Gør absolut ingenting"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:954
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
||||||
@ -132,7 +132,7 @@ msgstr "Gør absolut ingenting"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -444,8 +444,8 @@ msgstr "John Schember"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
@ -467,7 +467,7 @@ msgstr "Kommuniker med ESlick eBogs læser"
|
|||||||
msgid "Communicate with the IRex Iliad eBook reader."
|
msgid "Communicate with the IRex Iliad eBook reader."
|
||||||
msgstr "Kommuniker med IRex Iliad e-bogslæseren."
|
msgstr "Kommuniker med IRex Iliad e-bogslæseren."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||||
msgid "Device Interface"
|
msgid "Device Interface"
|
||||||
msgstr "Enhedsgrænseflade"
|
msgstr "Enhedsgrænseflade"
|
||||||
|
|
||||||
@ -508,10 +508,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
|||||||
msgstr "Kommuniker med Sony PRS-500 e-bogslæseren."
|
msgstr "Kommuniker med Sony PRS-500 e-bogslæseren."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||||
@ -522,22 +522,22 @@ msgid "Getting list of books on device..."
|
|||||||
msgstr "Henter liste over bøger på enheden..."
|
msgstr "Henter liste over bøger på enheden..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||||
msgstr "Kommuniker med Sony PRS-300/505 e-bogslæseren."
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
||||||
msgid "Kovid Goyal and John Schember"
|
msgid "Kovid Goyal and John Schember"
|
||||||
msgstr "Kovid Goyal og John Schember"
|
msgstr "Kovid Goyal og John Schember"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr "Fjerner bøger fra enhed..."
|
msgstr "Fjerner bøger fra enhed..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr "Sender metadata til enhed..."
|
msgstr "Sender metadata til enhed..."
|
||||||
@ -1805,7 +1805,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
||||||
msgid "Cover"
|
msgid "Cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1837,70 +1837,70 @@ msgstr ""
|
|||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
||||||
msgid "Title Page"
|
msgid "Title Page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||||
msgid "Table of Contents"
|
msgid "Table of Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
||||||
msgid "Glossary"
|
msgid "Glossary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
||||||
msgid "Acknowledgements"
|
msgid "Acknowledgements"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
||||||
msgid "Bibliography"
|
msgid "Bibliography"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
||||||
msgid "Colophon"
|
msgid "Colophon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
||||||
msgid "Copyright"
|
msgid "Copyright"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
||||||
msgid "Dedication"
|
msgid "Dedication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
||||||
msgid "Epigraph"
|
msgid "Epigraph"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
||||||
msgid "Foreword"
|
msgid "Foreword"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
||||||
msgid "List of Illustrations"
|
msgid "List of Illustrations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
||||||
msgid "List of Tables"
|
msgid "List of Tables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1331
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1332
|
||||||
msgid "Preface"
|
msgid "Preface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1333
|
||||||
msgid "Main Text"
|
msgid "Main Text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -7229,6 +7229,14 @@ msgstr ""
|
|||||||
msgid "English (IND)"
|
msgid "English (IND)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "Dutch (BE)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
||||||
msgid "URL must have the scheme sftp"
|
msgid "URL must have the scheme sftp"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -7285,75 +7293,75 @@ msgstr ""
|
|||||||
msgid "Unknown News Source"
|
msgid "Unknown News Source"
|
||||||
msgstr "Ukendt nyhedskilde"
|
msgstr "Ukendt nyhedskilde"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:510
|
||||||
msgid "The \"%s\" recipe needs a username and password."
|
msgid "The \"%s\" recipe needs a username and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:593
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr "Download færdig"
|
msgstr "Download færdig"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
msgstr "Kunne ikke downloade følgende artikler:"
|
msgstr "Kunne ikke downloade følgende artikler:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:601
|
||||||
msgid "Failed to download parts of the following articles:"
|
msgid "Failed to download parts of the following articles:"
|
||||||
msgstr "Kunne ikke downloade dele af følgende artikler:"
|
msgstr "Kunne ikke downloade dele af følgende artikler:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:603
|
||||||
msgid " from "
|
msgid " from "
|
||||||
msgstr " fra "
|
msgstr " fra "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605
|
||||||
msgid "\tFailed links:"
|
msgid "\tFailed links:"
|
||||||
msgstr "\tMislykkede links:"
|
msgstr "\tMislykkede links:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:686
|
||||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||||
msgid "Fetching feeds..."
|
msgid "Fetching feeds..."
|
||||||
msgstr "Henter feeds..."
|
msgstr "Henter feeds..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:709
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||||
msgid "Got feeds from index page"
|
msgid "Got feeds from index page"
|
||||||
msgstr "Fik feeds fra indekssiden"
|
msgstr "Fik feeds fra indekssiden"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:715
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:718
|
||||||
msgid "Trying to download cover..."
|
msgid "Trying to download cover..."
|
||||||
msgstr "Prøver at downloade omslag..."
|
msgstr "Prøver at downloade omslag..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:769
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776
|
||||||
msgid "Starting download [%d thread(s)]..."
|
msgid "Starting download [%d thread(s)]..."
|
||||||
msgstr "Starter download [%d tråd(e)]..."
|
msgstr "Starter download [%d tråd(e)]..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:785
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
|
||||||
msgid "Feeds downloaded to %s"
|
msgid "Feeds downloaded to %s"
|
||||||
msgstr "Feeds er hentet til %s"
|
msgstr "Feeds er hentet til %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:795
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||||
msgid "Could not download cover: %s"
|
msgid "Could not download cover: %s"
|
||||||
msgstr "Kunne ikke hente omslaget: %s"
|
msgstr "Kunne ikke hente omslaget: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:809
|
||||||
msgid "Downloading cover from %s"
|
msgid "Downloading cover from %s"
|
||||||
msgstr "Downloader omslag fra %s"
|
msgstr "Downloader omslag fra %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:928
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:935
|
||||||
msgid "Untitled Article"
|
msgid "Untitled Article"
|
||||||
msgstr "Unavngiven artikel"
|
msgstr "Unavngiven artikel"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:999
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1006
|
||||||
msgid "Article downloaded: %s"
|
msgid "Article downloaded: %s"
|
||||||
msgstr "Artikel hentet: %s"
|
msgstr "Artikel hentet: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1010
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1017
|
||||||
msgid "Article download failed: %s"
|
msgid "Article download failed: %s"
|
||||||
msgstr "Hentning af artikel mislykkedes: %s"
|
msgstr "Hentning af artikel mislykkedes: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1027
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1034
|
||||||
msgid "Fetching feed"
|
msgid "Fetching feed"
|
||||||
msgstr "Henter feed"
|
msgstr "Henter feed"
|
||||||
|
|
||||||
@ -8618,3 +8626,6 @@ msgstr "Vis detaljeret output information. Nyttig til fejlfinding"
|
|||||||
|
|
||||||
#~ msgid "Hungarian"
|
#~ msgid "Hungarian"
|
||||||
#~ msgstr "Ungarsk"
|
#~ msgstr "Ungarsk"
|
||||||
|
|
||||||
|
#~ msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||||
|
#~ msgstr "Kommuniker med Sony PRS-300/505 e-bogslæseren."
|
||||||
|
@ -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: 2009-11-26 20:00+0000\n"
|
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||||
"PO-Revision-Date: 2009-11-26 21:31+0000\n"
|
"PO-Revision-Date: 2009-11-30 22:02+0000\n"
|
||||||
"Last-Translator: S. Dorscht <Unknown>\n"
|
"Last-Translator: Kovid Goyal <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: 2009-11-27 04:47+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
@ -69,9 +69,9 @@ msgstr "Macht absolut gar nichts"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:954
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
||||||
@ -133,7 +133,7 @@ msgstr "Macht absolut gar nichts"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -449,8 +449,8 @@ msgstr "John Schember"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
@ -472,7 +472,7 @@ msgstr "Kommunikation mit dem ESlick eBook Reader."
|
|||||||
msgid "Communicate with the IRex Iliad eBook reader."
|
msgid "Communicate with the IRex Iliad eBook reader."
|
||||||
msgstr "Kommunikation mit dem IRex Iliad eBook Reader."
|
msgstr "Kommunikation mit dem IRex Iliad eBook Reader."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||||
msgid "Device Interface"
|
msgid "Device Interface"
|
||||||
msgstr "Geräte-Schnittstellen"
|
msgstr "Geräte-Schnittstellen"
|
||||||
|
|
||||||
@ -513,10 +513,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
|||||||
msgstr "Kommunikation mit dem Sony PRS-500 eBook Reader."
|
msgstr "Kommunikation mit dem Sony PRS-500 eBook Reader."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||||
@ -527,22 +527,22 @@ msgid "Getting list of books on device..."
|
|||||||
msgstr "Die Liste der Bücher auf dem Gerät beziehen ..."
|
msgstr "Die Liste der Bücher auf dem Gerät beziehen ..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||||
msgstr "Kommunikation mit dem Sony PRS-300/505 eBook Reader."
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
||||||
msgid "Kovid Goyal and John Schember"
|
msgid "Kovid Goyal and John Schember"
|
||||||
msgstr "Kovid Goyal und John Schember"
|
msgstr "Kovid Goyal und John Schember"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr "Bücher vom Gerät entfernen ..."
|
msgstr "Bücher vom Gerät entfernen ..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr "Metadaten ans Gerät senden ..."
|
msgstr "Metadaten ans Gerät senden ..."
|
||||||
@ -785,21 +785,21 @@ msgstr ""
|
|||||||
"input_file ist die Eingabe und output_file ist die Ausgabe. Beide müssen als "
|
"input_file ist die Eingabe und output_file ist die Ausgabe. Beide müssen als "
|
||||||
"die ersten zwei Argumente des Befehls angegeben werden.\n"
|
"die ersten zwei Argumente des Befehls angegeben werden.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Das Ausgabe eBook Format wird aus der Dateiendung von output_file erraten. "
|
"Das Ausgabe-eBook-Format wird aus der Dateiendung von output_file erraten. "
|
||||||
"output_file kann auch das spezielle Format .EXT sein, wobei EXT die "
|
"output_file kann auch das spezielle Format .EXT sein, wobei EXT die "
|
||||||
"Dateiendung der Ausgabedatei ist. In diesem Fall wird der Name der "
|
"Dateiendung der Ausgabe-Datei ist. In diesem Fall wird der Name der Ausgabe-"
|
||||||
"Ausgabedatei von der Eingabedatei abgeleitet. Beachten Sie, dass die "
|
"Datei von der Eingabe-Datei abgeleitet. Beachten Sie, dass die Dateinamen "
|
||||||
"Dateinamen nicht mit einem Anführungszeichen beginnen dürfen. Schlussendlich "
|
"nicht mit einem Anführungszeichen beginnen dürfen. Schlussendlich wird eine "
|
||||||
"wird eine Ausgabedatei ohne Dateiendung als ein Verzeichnis behandelt, in "
|
"Ausgabe-Datei ohne Dateiendung als ein Verzeichnis behandelt, in das ein "
|
||||||
"das ein \"open ebook\" (OEB) bestehend aus HTML Dateien geschrieben wird. "
|
"\"open ebook\" (OEB) bestehend aus HTML-Dateien geschrieben wird. Diese "
|
||||||
"Diese Dateien sind die Dateien, die normalerweise an das Ausgabe Plugin "
|
"Dateien sind die Dateien, die normalerweise an das Ausgabe-Plugin "
|
||||||
"weitergereicht werden.\n"
|
"weitergereicht werden.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Nach der Angabe von Eingabe- und Ausgabedatei kann die Konvertierung durch "
|
"Nach der Angabe von Eingabe- und Ausgabe-Datei kann die Konvertierung durch "
|
||||||
"die Angabe von verschiedenen Optionen angepasst werden. Die verfügbaren "
|
"die Angabe von verschiedenen Optionen angepasst werden. Die verfügbaren "
|
||||||
"Optionen hängen ab von den Eingabe- und Ausgabedateitypen. Für eine Hilfe "
|
"Optionen hängen ab von den Eingabe- und Ausgabe-Dateitypen. Für eine Hilfe "
|
||||||
"dazu geben Sie die Eingabe- und Ausgabedateien an und verwenden Sie dann die "
|
"dazu geben Sie die Eingabe- und Ausgabe-Dateien an und verwenden Sie dann "
|
||||||
"Otion -h.\n"
|
"die Option -h.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Eine vollständige Dokumentation des Konvertierungssystems finden Sie unter\n"
|
"Eine vollständige Dokumentation des Konvertierungssystems finden Sie unter\n"
|
||||||
|
|
||||||
@ -888,9 +888,9 @@ msgid ""
|
|||||||
"cases, an output profile is required to produce documents that will work on "
|
"cases, an output profile is required to produce documents that will work on "
|
||||||
"a device. For example EPUB on the SONY reader. Choices are:"
|
"a device. For example EPUB on the SONY reader. Choices are:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Geben Sie das Ausgabe Profil an. Das Ausgabe Profil schreibt der "
|
"Geben Sie das Ausgabe-Profil an. Das Ausgabe-Profil schreibt der "
|
||||||
"Konvertierung vor, wie sie das erstellte Dokument für das angegebene Gerät "
|
"Konvertierung vor, wie sie das erstellte Dokument für das angegebene Gerät "
|
||||||
"optimieren kann. In bestimmten Fällen ist ein Ausgabe Profil zur Erstellung "
|
"optimieren kann. In bestimmten Fällen ist ein Ausgabe-Profil zur Erstellung "
|
||||||
"einer auf dem Gerät funktionierenden Datei nötig. Zum Beispiel EPUB auf dem "
|
"einer auf dem Gerät funktionierenden Datei nötig. Zum Beispiel EPUB auf dem "
|
||||||
"SONY Reader. Wählbar ist:"
|
"SONY Reader. Wählbar ist:"
|
||||||
|
|
||||||
@ -904,7 +904,7 @@ msgstr ""
|
|||||||
"Die Bezugsschriftgröße in Punkt. Alle Schriftgrößen im erstellen eBook "
|
"Die Bezugsschriftgröße in Punkt. Alle Schriftgrößen im erstellen eBook "
|
||||||
"werden basieren auf dieser Größe skaliert. Mit einer größeren Schriftgröße "
|
"werden basieren auf dieser Größe skaliert. Mit einer größeren Schriftgröße "
|
||||||
"erhalten Sie eine größere Schrift in der Ausgabe und umgekehrt. Laut "
|
"erhalten Sie eine größere Schrift in der Ausgabe und umgekehrt. Laut "
|
||||||
"Voreinstellung basiert die Bezugsschriftgröße auf dem gewählten Ausgabe "
|
"Voreinstellung basiert die Bezugsschriftgröße auf dem gewählten Ausgabe-"
|
||||||
"Profil."
|
"Profil."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:139
|
||||||
@ -920,7 +920,7 @@ msgstr ""
|
|||||||
"für die Größen xx-small bis xx-large mit der letzten Größe für riesige "
|
"für die Größen xx-small bis xx-large mit der letzten Größe für riesige "
|
||||||
"Schriften. Der Schriftskalierungs-Algorithmus verwendet diese Größen für die "
|
"Schriften. Der Schriftskalierungs-Algorithmus verwendet diese Größen für die "
|
||||||
"intelligente Skalierung von Schriften. Voreinstellung ist die Verwendung "
|
"intelligente Skalierung von Schriften. Voreinstellung ist die Verwendung "
|
||||||
"einer Zuordnung auf der Grundlage des gewählten Ausgabe Profils."
|
"einer Zuordnung auf der Grundlage des gewählten Ausgabe-Profils."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:151
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:151
|
||||||
msgid "Disable all rescaling of font sizes."
|
msgid "Disable all rescaling of font sizes."
|
||||||
@ -1102,7 +1102,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Blocksatz in der Ausgabe nicht erzwingen. Ob der Text dann im Blocksatz "
|
"Blocksatz in der Ausgabe nicht erzwingen. Ob der Text dann im Blocksatz "
|
||||||
"angezeigt wird oder nicht, hängt davon ab, ob das eBook-Format oder der "
|
"angezeigt wird oder nicht, hängt davon ab, ob das eBook-Format oder der "
|
||||||
"Reader-Blocksatz unterstützen."
|
"Reader Blocksatz unterstützen."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:308
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:308
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1319,12 +1319,12 @@ msgid ""
|
|||||||
"if your source file contains a very large number of page breaks, you should "
|
"if your source file contains a very large number of page breaks, you should "
|
||||||
"turn off splitting on page breaks."
|
"turn off splitting on page breaks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das Aufteilen bei Seitenwechseln ausschalten. Normalerweise werden "
|
"Das Aufteilen bei Seitenwechseln ausschalten. Normalerweise werden Eingabe-"
|
||||||
"eingehende Dateien automatisch bei jedem Seitenwechsel in zwei Dateien "
|
"Dateien automatisch bei jedem Seitenwechsel in zwei Dateien aufgeteilt. "
|
||||||
"aufgeteilt. Damit erhält man in der Ausgabe ein eBook, das schneller mit "
|
"Damit erhält man in der Ausgabe ein eBook, das schneller mit weniger "
|
||||||
"weniger Resourcen analysiert werden kann. Das Aufteilen ist jedoch langsam "
|
"Resourcen analysiert werden kann. Das Aufteilen ist jedoch langsam und falls "
|
||||||
"und falls die Ausgangsdatei sehr viele Seitenwechsel enthält, sollten Sie "
|
"die Ausgangsdatei sehr viele Seitenwechsel enthält, sollten Sie das "
|
||||||
"das Aufteilen bei Seitenwechseln ausschalten."
|
"Aufteilen bei Seitenwechseln ausschalten."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:74
|
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:74
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1343,7 +1343,7 @@ msgid ""
|
|||||||
"default cover is generated with the title, authors, etc. This option "
|
"default cover is generated with the title, authors, etc. This option "
|
||||||
"disables the generation of this cover."
|
"disables the generation of this cover."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Normalerweise wird, falls die Eingabe Datei kein Umschlagbild hat und Sie "
|
"Normalerweise wird, falls die Eingabe-Datei kein Umschlagbild hat und Sie "
|
||||||
"keines angeben, ein voreingestelltes Umschlagbild mit Titel, Autoren, usw. "
|
"keines angeben, ein voreingestelltes Umschlagbild mit Titel, Autoren, usw. "
|
||||||
"erstellt. Diese Einstellung schaltet die Erstellung dieses Umschlagbildes "
|
"erstellt. Diese Einstellung schaltet die Erstellung dieses Umschlagbildes "
|
||||||
"aus."
|
"aus."
|
||||||
@ -1392,7 +1392,7 @@ msgid ""
|
|||||||
"can result in various nasty side effects in the rest of of the conversion "
|
"can result in various nasty side effects in the rest of of the conversion "
|
||||||
"pipeline."
|
"pipeline."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Normalerweise ordnet dieses Eingabe Plugin alle Eingabe Dateien in eine "
|
"Normalerweise ordnet dieses Eingabe-Plugin alle Eingabe-Dateien in eine "
|
||||||
"standardisierte Ordnerhierarchie um. Verwenden Sie diese Einstellung nur, "
|
"standardisierte Ordnerhierarchie um. Verwenden Sie diese Einstellung nur, "
|
||||||
"wenn Sie wissen, was Sie tun, denn es kann verschiedene nervige "
|
"wenn Sie wissen, was Sie tun, denn es kann verschiedene nervige "
|
||||||
"Nebenwirkungen beim Rest des Konvertierungsprozesses zur Folge haben."
|
"Nebenwirkungen beim Rest des Konvertierungsprozesses zur Folge haben."
|
||||||
@ -1508,7 +1508,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137
|
||||||
msgid "Output LRS file"
|
msgid "Output LRS file"
|
||||||
msgstr "Ausgabe LRS Datei"
|
msgstr "Ausgabe-LRS-Datei"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139
|
||||||
msgid "Do not save embedded image and font files to disk"
|
msgid "Do not save embedded image and font files to disk"
|
||||||
@ -2011,7 +2011,7 @@ msgstr ""
|
|||||||
"abrufen\n"
|
"abrufen\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
||||||
msgid "Cover"
|
msgid "Cover"
|
||||||
msgstr "Umschlagbild"
|
msgstr "Umschlagbild"
|
||||||
|
|
||||||
@ -2044,70 +2044,70 @@ msgstr "Komprimierung der Datei Inhalte ausschalten."
|
|||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr "Alle Artikel"
|
msgstr "Alle Artikel"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
||||||
msgid "Title Page"
|
msgid "Title Page"
|
||||||
msgstr "Titelseite"
|
msgstr "Titelseite"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||||
msgid "Table of Contents"
|
msgid "Table of Contents"
|
||||||
msgstr "Inhaltsverzeichnis"
|
msgstr "Inhaltsverzeichnis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr "Index"
|
msgstr "Index"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
||||||
msgid "Glossary"
|
msgid "Glossary"
|
||||||
msgstr "Glossar"
|
msgstr "Glossar"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
||||||
msgid "Acknowledgements"
|
msgid "Acknowledgements"
|
||||||
msgstr "Danksagung"
|
msgstr "Danksagung"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
||||||
msgid "Bibliography"
|
msgid "Bibliography"
|
||||||
msgstr "Literaturverzeichnis"
|
msgstr "Literaturverzeichnis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
||||||
msgid "Colophon"
|
msgid "Colophon"
|
||||||
msgstr "Schlussschrift"
|
msgstr "Schlussschrift"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
||||||
msgid "Copyright"
|
msgid "Copyright"
|
||||||
msgstr "Copyright"
|
msgstr "Copyright"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
||||||
msgid "Dedication"
|
msgid "Dedication"
|
||||||
msgstr "Widmung"
|
msgstr "Widmung"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
||||||
msgid "Epigraph"
|
msgid "Epigraph"
|
||||||
msgstr "Epigraph"
|
msgstr "Epigraph"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
||||||
msgid "Foreword"
|
msgid "Foreword"
|
||||||
msgstr "Vorwort"
|
msgstr "Vorwort"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
||||||
msgid "List of Illustrations"
|
msgid "List of Illustrations"
|
||||||
msgstr "Abbildungsverzeichnis"
|
msgstr "Abbildungsverzeichnis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
||||||
msgid "List of Tables"
|
msgid "List of Tables"
|
||||||
msgstr "Tabellenverzeichnis"
|
msgstr "Tabellenverzeichnis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1331
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr "Anmerkungen"
|
msgstr "Anmerkungen"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1332
|
||||||
msgid "Preface"
|
msgid "Preface"
|
||||||
msgstr "Vorwort"
|
msgstr "Vorwort"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1333
|
||||||
msgid "Main Text"
|
msgid "Main Text"
|
||||||
msgstr "Haupttext"
|
msgstr "Haupttext"
|
||||||
|
|
||||||
@ -2122,11 +2122,12 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62
|
||||||
msgid "Output file. Default is derived from input filename."
|
msgid "Output file. Default is derived from input filename."
|
||||||
msgstr "Ausgabedatei. Voreinstellung stammt aus dem Namen der Eingabedatei."
|
msgstr ""
|
||||||
|
"Ausgabe-Datei. Die Voreinstellung stammt aus dem Namen der Eingabe-Datei."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:64
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:64
|
||||||
msgid "Produce more human-readable XML output."
|
msgid "Produce more human-readable XML output."
|
||||||
msgstr "Erstelle besser menschlich-lesbare XML Ausgabe."
|
msgstr "Erstelle besser menschlich lesbare XML-Ausgabe."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:66
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:66
|
||||||
msgid "Useful for debugging."
|
msgid "Useful for debugging."
|
||||||
@ -2217,7 +2218,7 @@ msgid ""
|
|||||||
"Specify the character encoding of the output document. The default is "
|
"Specify the character encoding of the output document. The default is "
|
||||||
"cp1252. Note: This option is not honored by all formats."
|
"cp1252. Note: This option is not honored by all formats."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Geben Sie die Zeichenkodierung für das Ausgabe Dokument an. Die "
|
"Geben Sie die Zeichenkodierung für das Ausgabe-Dokument an. Die "
|
||||||
"Voreinstellung ist cp1252. Achtung: Diese Einstellung wird nicht von allen "
|
"Voreinstellung ist cp1252. Achtung: Diese Einstellung wird nicht von allen "
|
||||||
"Formaten übernommen."
|
"Formaten übernommen."
|
||||||
|
|
||||||
@ -2276,7 +2277,7 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Path to output file. By default a file is created in the current directory."
|
"Path to output file. By default a file is created in the current directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Pfad zur Ausgabedatei. Die Datei wird im aktuellen Verzeichnis erstellt "
|
"Pfad zur Ausgabe-Datei. Die Datei wird im aktuellen Verzeichnis erstellt "
|
||||||
"(Voreinstellung)."
|
"(Voreinstellung)."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:41
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:41
|
||||||
@ -2473,8 +2474,8 @@ msgid ""
|
|||||||
"The size of the paper. This size will be overridden when an output profile "
|
"The size of the paper. This size will be overridden when an output profile "
|
||||||
"is used. Default is letter. Choices are %s"
|
"is used. Default is letter. Choices are %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Größe der Seite. Diese Größe wird überschrieben, wenn ein Ausgabe Profil "
|
"Größe der Seite. Diese Größe wird überschrieben, wenn ein Ausgabe-Profil "
|
||||||
"verwendet wird. Voreinstellung ist letter. Wählbar ist %s"
|
"verwendet wird. Voreinstellung ist Letter. Wählbar ist %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -2499,7 +2500,7 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Specify the character encoding of the output document. The default is cp1252."
|
"Specify the character encoding of the output document. The default is cp1252."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Geben Sie die Zeichenkodierung des Ausgabe Dokuments an. Voreinstellung ist "
|
"Geben Sie die Zeichenkodierung des Ausgabe-Dokuments an. Voreinstellung ist "
|
||||||
"cp1252."
|
"cp1252."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:183
|
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:183
|
||||||
@ -2514,7 +2515,7 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Specify the character encoding of the output document. The default is utf-8."
|
"Specify the character encoding of the output document. The default is utf-8."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Geben Sie die Zeichenkodierung für das Ausgabe Dokument an. Die "
|
"Geben Sie die Zeichenkodierung für das Ausgabe-Dokument an. Die "
|
||||||
"Voreinstellung ist utf-8."
|
"Voreinstellung ist utf-8."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27
|
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27
|
||||||
@ -2532,7 +2533,7 @@ msgid ""
|
|||||||
"Run the text input through the markdown pre-processor. To learn more about "
|
"Run the text input through the markdown pre-processor. To learn more about "
|
||||||
"markdown see"
|
"markdown see"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Texteingabe durch die Markdown Vorverarbeitung laufen lassen. Mehr über "
|
"Texteingabe durch die Markdown-Vorverarbeitung laufen lassen. Mehr über "
|
||||||
"Markdown erfahren Sie unter"
|
"Markdown erfahren Sie unter"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24
|
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24
|
||||||
@ -2551,7 +2552,7 @@ msgid ""
|
|||||||
"Specify the character encoding of the output document. The default is utf-8. "
|
"Specify the character encoding of the output document. The default is utf-8. "
|
||||||
"Note: This option is not honored by all formats."
|
"Note: This option is not honored by all formats."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Geben Sie die Zeichenkodierung des Ausgabedokuments an. Die Voreinstellung "
|
"Geben Sie die Zeichenkodierung des Ausgabe-Dokuments an. Die Voreinstellung "
|
||||||
"ist utf-8. Achtung: Diese Einstellung wird nicht von allen Formaten "
|
"ist utf-8. Achtung: Diese Einstellung wird nicht von allen Formaten "
|
||||||
"übernommen."
|
"übernommen."
|
||||||
|
|
||||||
@ -2793,11 +2794,11 @@ msgstr "Auf einmal konvertieren"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185
|
||||||
msgid "Options specific to the output format."
|
msgid "Options specific to the output format."
|
||||||
msgstr "Einstellungen für das Ausgabeformat."
|
msgstr "Einstellungen für das Ausgabe-Format."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15
|
||||||
msgid "Comic Input"
|
msgid "Comic Input"
|
||||||
msgstr "Comic Eingabe"
|
msgstr "Comic-Eingabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||||
@ -2908,7 +2909,7 @@ msgstr "&Comic Verarbeitung ausschalten"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111
|
||||||
msgid "&Output format:"
|
msgid "&Output format:"
|
||||||
msgstr "Ausgabef&ormat:"
|
msgstr "Ausgabe-F&ormat:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19
|
||||||
msgid "Debug"
|
msgid "Debug"
|
||||||
@ -2991,7 +2992,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15
|
||||||
msgid "EPUB Output"
|
msgid "EPUB Output"
|
||||||
msgstr "EPUB Ausgabe"
|
msgstr "EPUB-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
|
||||||
@ -3022,7 +3023,7 @@ msgstr "Kein voreingestelltes &Cover"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12
|
||||||
msgid "FB2 Input"
|
msgid "FB2 Input"
|
||||||
msgstr "FB2 Eingabe"
|
msgstr "FB2-Eingabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:29
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:29
|
||||||
msgid "Do not insert a &Table of Contents at the beginning of the book."
|
msgid "Do not insert a &Table of Contents at the beginning of the book."
|
||||||
@ -3030,7 +3031,7 @@ msgstr "Kein Inhal&tsverzeichnis am Anfang des Buches einfügen."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14
|
||||||
msgid "FB2 Output"
|
msgid "FB2 Output"
|
||||||
msgstr "FB2 Ausgabe"
|
msgstr "FB2-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37
|
||||||
@ -3060,15 +3061,15 @@ msgid ""
|
|||||||
"works.</p>"
|
"works.</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Dieser Assistent hilft, die richtige Schriftgröße für Ihre Bedürfnisse zu "
|
"<p>Dieser Assistent hilft, die richtige Schriftgröße für Ihre Bedürfnisse zu "
|
||||||
"wählen. Geben Sie die Basis-Schriftgröße des Eingabe Dokuments an und geben "
|
"wählen. Geben Sie die Basis-Schriftgröße des Eingabe-Dokuments an und geben "
|
||||||
"eine Eingabe Schriftgröße an. Der Assistent zeigt durch den "
|
"eine Eingabe-Schriftgröße an. Der Assistent zeigt durch den "
|
||||||
"Schriftskalierungs-Algorithmus an, auf welche Schriftgröße sie abgebildet "
|
"Schriftskalierungs-Algorithmus an, auf welche Schriftgröße sie abgebildet "
|
||||||
"wird. Sie können den Algorithmus anpassen, indem Sie die Ausgabe Basis-"
|
"wird. Sie können den Algorithmus anpassen, indem Sie die Ausgabe-Basis-"
|
||||||
"Schriftgröße und den Schriftschlüssel unten verändern. Wenn die Werte für "
|
"Schriftgröße und den Schriftschlüssel unten verändern. Wenn die Werte für "
|
||||||
"Sie passend sind, klicken Sie auf OK.</p>\n"
|
"Sie passend sind, klicken Sie auf OK.</p>\n"
|
||||||
"<p>Voreingestellt wird Calibre, falls die Ausgabe Basis-Schriftgröße gleich "
|
"<p>Voreingestellt wird Calibre, falls die Ausgabe-Basis-Schriftgröße gleich "
|
||||||
"null ist und/oder keine Schriftgrößenschlüssel angegeben wird, die Werte des "
|
"null ist und/oder keine Schriftgrößenschlüssel angegeben wird, die Werte des "
|
||||||
"aktuellen Ausgabe Profils verwenden. </p>\n"
|
"aktuellen Ausgabe-Profils verwenden. </p>\n"
|
||||||
"<p>Sehen Sie sich das englischsprachige <a "
|
"<p>Sehen Sie sich das englischsprachige <a "
|
||||||
"href=\"http://calibre.kovidgoyal.net/user_manual/conversion.html#font-size-"
|
"href=\"http://calibre.kovidgoyal.net/user_manual/conversion.html#font-size-"
|
||||||
"rescaling\">Benutzerhandbuch</a> für eine Diskussion, wie die Schriftgrößen-"
|
"rescaling\">Benutzerhandbuch</a> für eine Diskussion, wie die Schriftgrößen-"
|
||||||
@ -3076,7 +3077,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103
|
||||||
msgid "&Output document"
|
msgid "&Output document"
|
||||||
msgstr "Ausgabe D&okument"
|
msgstr "Ausgabe-D&okument"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109
|
||||||
@ -3151,7 +3152,7 @@ msgstr "Zeilen&höhe:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119
|
||||||
msgid "Input character &encoding:"
|
msgid "Input character &encoding:"
|
||||||
msgstr "Eingabe Z&eichenkodierung:"
|
msgstr "Eingabe-Z&eichenkodierung:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120
|
||||||
msgid "Remove &spacing between paragraphs"
|
msgid "Remove &spacing between paragraphs"
|
||||||
@ -3187,7 +3188,7 @@ msgstr "Extra &CSS"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||||
msgid "LRF Output"
|
msgid "LRF Output"
|
||||||
msgstr "LRF Ausgabe"
|
msgstr "LRF-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116
|
||||||
msgid "Enable &autorotation of wide images"
|
msgid "Enable &autorotation of wide images"
|
||||||
@ -3248,7 +3249,7 @@ msgid ""
|
|||||||
"Set the metadata. The output file will contain as much of this metadata as "
|
"Set the metadata. The output file will contain as much of this metadata as "
|
||||||
"possible."
|
"possible."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Metadaten eingeben. Die Ausgabedatei wird möglichst viel dieser Metadaten "
|
"Metadaten eingeben. Die Ausgabe-Datei wird möglichst viel dieser Metadaten "
|
||||||
"enthalten."
|
"enthalten."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:152
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:152
|
||||||
@ -3373,7 +3374,7 @@ msgstr "Buch "
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:15
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:15
|
||||||
msgid "MOBI Output"
|
msgid "MOBI Output"
|
||||||
msgstr "MOBI Ausgabe"
|
msgstr "MOBI-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:45
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:45
|
||||||
msgid "&Title for Table of Contents:"
|
msgid "&Title for Table of Contents:"
|
||||||
@ -3401,7 +3402,7 @@ msgstr "Seiteneinrichtung"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:111
|
||||||
msgid "&Output profile:"
|
msgid "&Output profile:"
|
||||||
msgstr "Ausgabe Pr&ofil:"
|
msgstr "Ausgabe-Pr&ofil:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:112
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:112
|
||||||
msgid "Profile description"
|
msgid "Profile description"
|
||||||
@ -3433,7 +3434,7 @@ msgstr "&Unten:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12
|
||||||
msgid "PDB Input"
|
msgid "PDB Input"
|
||||||
msgstr "PDB Eingabe"
|
msgstr "PDB-Eingabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:32
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:32
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:39
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:39
|
||||||
@ -3455,7 +3456,7 @@ msgstr "&Format:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:12
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:12
|
||||||
msgid "PDF Input"
|
msgid "PDF Input"
|
||||||
msgstr "PDF Eingabe"
|
msgstr "PDF-Eingabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:39
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:39
|
||||||
msgid "Line &Un-Wrapping Factor:"
|
msgid "Line &Un-Wrapping Factor:"
|
||||||
@ -3467,7 +3468,7 @@ msgstr "Keine B&ilder"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17
|
||||||
msgid "PDF Output"
|
msgid "PDF Output"
|
||||||
msgstr "PDF Ausgabe"
|
msgstr "PDF-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:40
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:40
|
||||||
msgid "&Paper Size:"
|
msgid "&Paper Size:"
|
||||||
@ -3479,7 +3480,7 @@ msgstr "&Orientierung:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14
|
||||||
msgid "RB Output"
|
msgid "RB Output"
|
||||||
msgstr "RB Ausgabe"
|
msgstr "RB-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1411
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1411
|
||||||
@ -3522,7 +3523,7 @@ msgstr "Konvertieren"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196
|
||||||
msgid "Options specific to the input format."
|
msgid "Options specific to the input format."
|
||||||
msgstr "Einstellungen für das Eingabeformat."
|
msgstr "Einstellungen für das Eingabe-Format."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:108
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:108
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:61
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:61
|
||||||
@ -3606,7 +3607,7 @@ msgstr "&Metadaten als erste Seite des Buchs einfügen"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63
|
||||||
msgid "&Preprocess input file to possibly improve structure detection"
|
msgid "&Preprocess input file to possibly improve structure detection"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Eingabedatei zur möglichen Verbesserung der Struktur Erkennung "
|
"Eingabe-Datei zur möglichen Verbesserung der Struktur-Erkennung "
|
||||||
"vorverar&beiten"
|
"vorverar&beiten"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64
|
||||||
@ -3683,7 +3684,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16
|
||||||
msgid "TXT Output"
|
msgid "TXT Output"
|
||||||
msgstr "TXT Ausgabe"
|
msgstr "TXT-Ausgabe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:52
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:52
|
||||||
msgid "&Line ending style:"
|
msgid "&Line ending style:"
|
||||||
@ -4439,7 +4440,7 @@ msgstr "Auftrags&priorität:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
|
||||||
msgid "Preferred &output format:"
|
msgid "Preferred &output format:"
|
||||||
msgstr "Bev&orzugtes Ausgabeformat:"
|
msgstr "Bev&orzugtes Ausgabe-Format:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
|
||||||
msgid "Preferred &input format order:"
|
msgid "Preferred &input format order:"
|
||||||
@ -7396,7 +7397,7 @@ msgstr ""
|
|||||||
"eine durch Kommata getrennte Liste von Feldern sein.\n"
|
"eine durch Kommata getrennte Liste von Feldern sein.\n"
|
||||||
"Verfügbare Felder: %s\n"
|
"Verfügbare Felder: %s\n"
|
||||||
"Voreinstellung: %%default. Das Feld \"all\" kann für die Auswahl aller "
|
"Voreinstellung: %%default. Das Feld \"all\" kann für die Auswahl aller "
|
||||||
"Felder verwendet werden. Funktioniert nur mit dem Ausgabeformat Text."
|
"Felder verwendet werden. Funktioniert nur mit dem Ausgabe-Format Text."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:211
|
#: /home/kovid/work/calibre/src/calibre/library/cli.py:211
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -7892,7 +7893,7 @@ msgstr "Sprache, in der die Benutzer-Oberfläche dargestellt wird"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:639
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:639
|
||||||
msgid "The default output format for ebook conversions."
|
msgid "The default output format for ebook conversions."
|
||||||
msgstr "Das voreingestellte Ausgabeformat für eBook Konvertierungen."
|
msgstr "Das voreingestellte Ausgabe-Format für eBook Konvertierungen."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:643
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:643
|
||||||
msgid "Ordered list of formats to prefer for input."
|
msgid "Ordered list of formats to prefer for input."
|
||||||
@ -7958,6 +7959,14 @@ msgstr "Englisch (CA)"
|
|||||||
msgid "English (IND)"
|
msgid "English (IND)"
|
||||||
msgstr "Englisch (IND)"
|
msgstr "Englisch (IND)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "Dutch (BE)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
||||||
msgid "URL must have the scheme sftp"
|
msgid "URL must have the scheme sftp"
|
||||||
msgstr "URL muss dem sftp Schema entsprechen"
|
msgstr "URL muss dem sftp Schema entsprechen"
|
||||||
@ -8014,77 +8023,77 @@ msgstr ""
|
|||||||
msgid "Unknown News Source"
|
msgid "Unknown News Source"
|
||||||
msgstr "Nachrichtenquelle unbekannt"
|
msgstr "Nachrichtenquelle unbekannt"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:510
|
||||||
msgid "The \"%s\" recipe needs a username and password."
|
msgid "The \"%s\" recipe needs a username and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Das \"%s\" Downloadschema benötigt einen Benutzernamen und ein Passwort."
|
"Das \"%s\" Downloadschema benötigt einen Benutzernamen und ein Passwort."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:593
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr "Download beendet"
|
msgstr "Download beendet"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
msgstr "Der Download der folgenden Artikel schlug fehl:"
|
msgstr "Der Download der folgenden Artikel schlug fehl:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:601
|
||||||
msgid "Failed to download parts of the following articles:"
|
msgid "Failed to download parts of the following articles:"
|
||||||
msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:"
|
msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:603
|
||||||
msgid " from "
|
msgid " from "
|
||||||
msgstr " von "
|
msgstr " von "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605
|
||||||
msgid "\tFailed links:"
|
msgid "\tFailed links:"
|
||||||
msgstr "\tFehlgeschlagene Verknüpfungen:"
|
msgstr "\tFehlgeschlagene Verknüpfungen:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:686
|
||||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Konnte Artikel nicht abrufen. Mit -vv starten, um den Grund dafür zu sehen"
|
"Konnte Artikel nicht abrufen. Mit -vv starten, um den Grund dafür zu sehen"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||||
msgid "Fetching feeds..."
|
msgid "Fetching feeds..."
|
||||||
msgstr "Rufe Feeds ab..."
|
msgstr "Rufe Feeds ab..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:709
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||||
msgid "Got feeds from index page"
|
msgid "Got feeds from index page"
|
||||||
msgstr "Feeds der Index-Seite erhalten"
|
msgstr "Feeds der Index-Seite erhalten"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:715
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:718
|
||||||
msgid "Trying to download cover..."
|
msgid "Trying to download cover..."
|
||||||
msgstr "Umschlagbild versuchen heruterzuladen ..."
|
msgstr "Umschlagbild versuchen heruterzuladen ..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:769
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776
|
||||||
msgid "Starting download [%d thread(s)]..."
|
msgid "Starting download [%d thread(s)]..."
|
||||||
msgstr "Download von [%d Thread(s)] starten ..."
|
msgstr "Download von [%d Thread(s)] starten ..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:785
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
|
||||||
msgid "Feeds downloaded to %s"
|
msgid "Feeds downloaded to %s"
|
||||||
msgstr "Feeds wurden nach %s heruntergeladen"
|
msgstr "Feeds wurden nach %s heruntergeladen"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:795
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||||
msgid "Could not download cover: %s"
|
msgid "Could not download cover: %s"
|
||||||
msgstr "Umschlagbild konnte nicht heruntergeladen werden: %s"
|
msgstr "Umschlagbild konnte nicht heruntergeladen werden: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:809
|
||||||
msgid "Downloading cover from %s"
|
msgid "Downloading cover from %s"
|
||||||
msgstr "Umschlagbild von %s herunterladen"
|
msgstr "Umschlagbild von %s herunterladen"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:928
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:935
|
||||||
msgid "Untitled Article"
|
msgid "Untitled Article"
|
||||||
msgstr "Artikel ohne Titel"
|
msgstr "Artikel ohne Titel"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:999
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1006
|
||||||
msgid "Article downloaded: %s"
|
msgid "Article downloaded: %s"
|
||||||
msgstr "Artikel heruntergeladen: %s"
|
msgstr "Artikel heruntergeladen: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1010
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1017
|
||||||
msgid "Article download failed: %s"
|
msgid "Article download failed: %s"
|
||||||
msgstr "Herunterladen der Artikel schlug fehl: %s"
|
msgstr "Herunterladen der Artikel schlug fehl: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1027
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1034
|
||||||
msgid "Fetching feed"
|
msgid "Fetching feed"
|
||||||
msgstr "Feed abrufen"
|
msgstr "Feed abrufen"
|
||||||
|
|
||||||
@ -10274,3 +10283,6 @@ msgstr "Detaillierte Ausgabeinformation anzeigen. Hilfreich zur Fehlersuche."
|
|||||||
|
|
||||||
#~ msgid "sr-Latn-RS"
|
#~ msgid "sr-Latn-RS"
|
||||||
#~ msgstr "sr-Latn-RS"
|
#~ msgstr "sr-Latn-RS"
|
||||||
|
|
||||||
|
#~ msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||||
|
#~ msgstr "Kommunikation mit dem Sony PRS-300/505 eBook Reader."
|
||||||
|
@ -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: 2009-11-26 20:00+0000\n"
|
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||||
"PO-Revision-Date: 2009-11-27 15:00+0000\n"
|
"PO-Revision-Date: 2009-12-01 16:56+0000\n"
|
||||||
"Last-Translator: kilikolo <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: 2009-11-28 04:55+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-02 04:53+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -71,9 +71,9 @@ msgstr "No hacer nada en absoluto"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:954
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
||||||
@ -135,7 +135,7 @@ msgstr "No hacer nada en absoluto"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -452,8 +452,8 @@ msgstr "John Schember"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
@ -475,7 +475,7 @@ msgstr "Comunicar con el lector ESlick"
|
|||||||
msgid "Communicate with the IRex Iliad eBook reader."
|
msgid "Communicate with the IRex Iliad eBook reader."
|
||||||
msgstr "Comunicar con el lector IRex Iliad."
|
msgstr "Comunicar con el lector IRex Iliad."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||||
msgid "Device Interface"
|
msgid "Device Interface"
|
||||||
msgstr "Interfaz del dispositivo"
|
msgstr "Interfaz del dispositivo"
|
||||||
|
|
||||||
@ -516,10 +516,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
|||||||
msgstr "Comunicar con el lector Sony PRS-500"
|
msgstr "Comunicar con el lector Sony PRS-500"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||||
@ -530,22 +530,22 @@ msgid "Getting list of books on device..."
|
|||||||
msgstr "Obteniendo la lista de libros en el dispositivo ..."
|
msgstr "Obteniendo la lista de libros en el dispositivo ..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||||
msgstr "Comunicar con los lectores Sony PRS-300/505"
|
msgstr "Comunicar con el lector Sony PRS-300/505/500"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
||||||
msgid "Kovid Goyal and John Schember"
|
msgid "Kovid Goyal and John Schember"
|
||||||
msgstr "Kovid Goyal y John Schember"
|
msgstr "Kovid Goyal y John Schember"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr "Eliminando libros del dispositivo..."
|
msgstr "Eliminando libros del dispositivo..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr "Enviando metadatos al dispositivo..."
|
msgstr "Enviando metadatos al dispositivo..."
|
||||||
@ -1986,7 +1986,7 @@ msgstr ""
|
|||||||
"LibraryThing.com\n"
|
"LibraryThing.com\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
||||||
msgid "Cover"
|
msgid "Cover"
|
||||||
msgstr "Portada"
|
msgstr "Portada"
|
||||||
|
|
||||||
@ -2021,70 +2021,70 @@ msgstr "Desactivar la compresión del fichero."
|
|||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr "Todos los artículos"
|
msgstr "Todos los artículos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
||||||
msgid "Title Page"
|
msgid "Title Page"
|
||||||
msgstr "Página de título"
|
msgstr "Página de título"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||||
msgid "Table of Contents"
|
msgid "Table of Contents"
|
||||||
msgstr "Índice"
|
msgstr "Índice"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr "Índice analítico"
|
msgstr "Índice analítico"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
||||||
msgid "Glossary"
|
msgid "Glossary"
|
||||||
msgstr "Glosario"
|
msgstr "Glosario"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
||||||
msgid "Acknowledgements"
|
msgid "Acknowledgements"
|
||||||
msgstr "Agradecimientos"
|
msgstr "Agradecimientos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
||||||
msgid "Bibliography"
|
msgid "Bibliography"
|
||||||
msgstr "Bibliografía"
|
msgstr "Bibliografía"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
||||||
msgid "Colophon"
|
msgid "Colophon"
|
||||||
msgstr "Colofón"
|
msgstr "Colofón"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
||||||
msgid "Copyright"
|
msgid "Copyright"
|
||||||
msgstr "Copyright"
|
msgstr "Copyright"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
||||||
msgid "Dedication"
|
msgid "Dedication"
|
||||||
msgstr "Dedicatoria"
|
msgstr "Dedicatoria"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
||||||
msgid "Epigraph"
|
msgid "Epigraph"
|
||||||
msgstr "Epígrafe"
|
msgstr "Epígrafe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
||||||
msgid "Foreword"
|
msgid "Foreword"
|
||||||
msgstr "Prólogo"
|
msgstr "Prólogo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
||||||
msgid "List of Illustrations"
|
msgid "List of Illustrations"
|
||||||
msgstr "Lista de ilustraciones"
|
msgstr "Lista de ilustraciones"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
||||||
msgid "List of Tables"
|
msgid "List of Tables"
|
||||||
msgstr "Lista de tablas"
|
msgstr "Lista de tablas"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1331
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr "Notas"
|
msgstr "Notas"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1332
|
||||||
msgid "Preface"
|
msgid "Preface"
|
||||||
msgstr "Prefacio"
|
msgstr "Prefacio"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1333
|
||||||
msgid "Main Text"
|
msgid "Main Text"
|
||||||
msgstr "Texto principal"
|
msgstr "Texto principal"
|
||||||
|
|
||||||
@ -3128,7 +3128,7 @@ msgstr "tamaño de la identación:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122
|
||||||
msgid " em"
|
msgid " em"
|
||||||
msgstr ""
|
msgstr " em"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123
|
||||||
msgid "Insert &blank line"
|
msgid "Insert &blank line"
|
||||||
@ -7917,6 +7917,14 @@ msgstr "Inglés (Canadá)"
|
|||||||
msgid "English (IND)"
|
msgid "English (IND)"
|
||||||
msgstr "Inglés (India)"
|
msgstr "Inglés (India)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr "Neerlandés (NL)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "Dutch (BE)"
|
||||||
|
msgstr "Neerlandés (BE)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
||||||
msgid "URL must have the scheme sftp"
|
msgid "URL must have the scheme sftp"
|
||||||
msgstr "La URL debe tener el esquema sftp"
|
msgstr "La URL debe tener el esquema sftp"
|
||||||
@ -7974,76 +7982,76 @@ msgstr ""
|
|||||||
msgid "Unknown News Source"
|
msgid "Unknown News Source"
|
||||||
msgstr "Fuente de noticias desconocida"
|
msgstr "Fuente de noticias desconocida"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:510
|
||||||
msgid "The \"%s\" recipe needs a username and password."
|
msgid "The \"%s\" recipe needs a username and password."
|
||||||
msgstr "La receta \"%s\" necesita usuario y contraseña."
|
msgstr "La receta \"%s\" necesita usuario y contraseña."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:593
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr "Descarga finalizada"
|
msgstr "Descarga finalizada"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
msgstr "Fallo al descargar los siguientes artículos:"
|
msgstr "Fallo al descargar los siguientes artículos:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:601
|
||||||
msgid "Failed to download parts of the following articles:"
|
msgid "Failed to download parts of the following articles:"
|
||||||
msgstr "Fallo al descargar partes de los siguientes artículos"
|
msgstr "Fallo al descargar partes de los siguientes artículos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:603
|
||||||
msgid " from "
|
msgid " from "
|
||||||
msgstr " de "
|
msgstr " de "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605
|
||||||
msgid "\tFailed links:"
|
msgid "\tFailed links:"
|
||||||
msgstr "\tEnlaces fallidos:"
|
msgstr "\tEnlaces fallidos:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:686
|
||||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No se pudo obtener el artículo. Ejecute calibre con -vv para ver el motivo"
|
"No se pudo obtener el artículo. Ejecute calibre con -vv para ver el motivo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||||
msgid "Fetching feeds..."
|
msgid "Fetching feeds..."
|
||||||
msgstr "Obteniendo canales de noticias..."
|
msgstr "Obteniendo canales de noticias..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:709
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||||
msgid "Got feeds from index page"
|
msgid "Got feeds from index page"
|
||||||
msgstr "Se obtivieron canales de noticias de la página principal"
|
msgstr "Se obtivieron canales de noticias de la página principal"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:715
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:718
|
||||||
msgid "Trying to download cover..."
|
msgid "Trying to download cover..."
|
||||||
msgstr "Intentando descargar la portada..."
|
msgstr "Intentando descargar la portada..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:769
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776
|
||||||
msgid "Starting download [%d thread(s)]..."
|
msgid "Starting download [%d thread(s)]..."
|
||||||
msgstr "Iniciando la descarga [%d proceso(s)]"
|
msgstr "Iniciando la descarga [%d proceso(s)]"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:785
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
|
||||||
msgid "Feeds downloaded to %s"
|
msgid "Feeds downloaded to %s"
|
||||||
msgstr "Canales de noticias descargados en %s"
|
msgstr "Canales de noticias descargados en %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:795
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||||
msgid "Could not download cover: %s"
|
msgid "Could not download cover: %s"
|
||||||
msgstr "No se pudo descargar la portada: %s"
|
msgstr "No se pudo descargar la portada: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:809
|
||||||
msgid "Downloading cover from %s"
|
msgid "Downloading cover from %s"
|
||||||
msgstr "Descargando la portada desde %s"
|
msgstr "Descargando la portada desde %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:928
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:935
|
||||||
msgid "Untitled Article"
|
msgid "Untitled Article"
|
||||||
msgstr "Artículo sin título"
|
msgstr "Artículo sin título"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:999
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1006
|
||||||
msgid "Article downloaded: %s"
|
msgid "Article downloaded: %s"
|
||||||
msgstr "Artículo descargado: %s"
|
msgstr "Artículo descargado: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1010
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1017
|
||||||
msgid "Article download failed: %s"
|
msgid "Article download failed: %s"
|
||||||
msgstr "Falló la descarga del artículo: %s"
|
msgstr "Falló la descarga del artículo: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1027
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1034
|
||||||
msgid "Fetching feed"
|
msgid "Fetching feed"
|
||||||
msgstr "Obteniendo canal de noticias"
|
msgstr "Obteniendo canal de noticias"
|
||||||
|
|
||||||
@ -10032,3 +10040,6 @@ msgstr "Mostrar información de salida detallada. Útil para la depuración"
|
|||||||
#~ "Con esta opción se interpreta que cada línea con sangría inicial (una "
|
#~ "Con esta opción se interpreta que cada línea con sangría inicial (una "
|
||||||
#~ "tabulación o 2 o más espacios) representa un párrafo. Los párrafos terminan "
|
#~ "tabulación o 2 o más espacios) representa un párrafo. Los párrafos terminan "
|
||||||
#~ "cuando se alcanza la siguiente línea con sangría inicial."
|
#~ "cuando se alcanza la siguiente línea con sangría inicial."
|
||||||
|
|
||||||
|
#~ msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||||
|
#~ msgstr "Comunicar con los lectores Sony PRS-300/505"
|
||||||
|
7277
src/calibre/translations/eu.po
Normal file
@ -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: 2009-11-26 20:00+0000\n"
|
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||||
"PO-Revision-Date: 2009-11-26 09:23+0000\n"
|
"PO-Revision-Date: 2009-11-30 02:38+0000\n"
|
||||||
"Last-Translator: lafis <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Korean <ko@li.org>\n"
|
"Language-Team: Korean <ko@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: 2009-11-27 04:47+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -68,9 +68,9 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:954
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
||||||
@ -132,7 +132,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -419,8 +419,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
@ -442,7 +442,7 @@ msgstr ""
|
|||||||
msgid "Communicate with the IRex Iliad eBook reader."
|
msgid "Communicate with the IRex Iliad eBook reader."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||||
msgid "Device Interface"
|
msgid "Device Interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -483,10 +483,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||||
@ -497,7 +497,7 @@ msgid "Getting list of books on device..."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||||
@ -505,14 +505,14 @@ msgstr ""
|
|||||||
msgid "Kovid Goyal and John Schember"
|
msgid "Kovid Goyal and John Schember"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1699,7 +1699,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
||||||
msgid "Cover"
|
msgid "Cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1730,70 +1730,70 @@ msgstr ""
|
|||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
||||||
msgid "Title Page"
|
msgid "Title Page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||||
msgid "Table of Contents"
|
msgid "Table of Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
||||||
msgid "Glossary"
|
msgid "Glossary"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
||||||
msgid "Acknowledgements"
|
msgid "Acknowledgements"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
||||||
msgid "Bibliography"
|
msgid "Bibliography"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
||||||
msgid "Colophon"
|
msgid "Colophon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
||||||
msgid "Copyright"
|
msgid "Copyright"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
||||||
msgid "Dedication"
|
msgid "Dedication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
||||||
msgid "Epigraph"
|
msgid "Epigraph"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
||||||
msgid "Foreword"
|
msgid "Foreword"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
||||||
msgid "List of Illustrations"
|
msgid "List of Illustrations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
||||||
msgid "List of Tables"
|
msgid "List of Tables"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1331
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1332
|
||||||
msgid "Preface"
|
msgid "Preface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1333
|
||||||
msgid "Main Text"
|
msgid "Main Text"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -7064,6 +7064,14 @@ msgstr ""
|
|||||||
msgid "English (IND)"
|
msgid "English (IND)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "Dutch (BE)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
||||||
msgid "URL must have the scheme sftp"
|
msgid "URL must have the scheme sftp"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -7116,75 +7124,75 @@ msgstr ""
|
|||||||
msgid "Unknown News Source"
|
msgid "Unknown News Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:510
|
||||||
msgid "The \"%s\" recipe needs a username and password."
|
msgid "The \"%s\" recipe needs a username and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:593
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:601
|
||||||
msgid "Failed to download parts of the following articles:"
|
msgid "Failed to download parts of the following articles:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:603
|
||||||
msgid " from "
|
msgid " from "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605
|
||||||
msgid "\tFailed links:"
|
msgid "\tFailed links:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:686
|
||||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||||
msgid "Fetching feeds..."
|
msgid "Fetching feeds..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:709
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||||
msgid "Got feeds from index page"
|
msgid "Got feeds from index page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:715
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:718
|
||||||
msgid "Trying to download cover..."
|
msgid "Trying to download cover..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:769
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776
|
||||||
msgid "Starting download [%d thread(s)]..."
|
msgid "Starting download [%d thread(s)]..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:785
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
|
||||||
msgid "Feeds downloaded to %s"
|
msgid "Feeds downloaded to %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:795
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||||
msgid "Could not download cover: %s"
|
msgid "Could not download cover: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:809
|
||||||
msgid "Downloading cover from %s"
|
msgid "Downloading cover from %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:928
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:935
|
||||||
msgid "Untitled Article"
|
msgid "Untitled Article"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:999
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1006
|
||||||
msgid "Article downloaded: %s"
|
msgid "Article downloaded: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1010
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1017
|
||||||
msgid "Article download failed: %s"
|
msgid "Article download failed: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1027
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1034
|
||||||
msgid "Fetching feed"
|
msgid "Fetching feed"
|
||||||
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: 2009-11-26 20:00+0000\n"
|
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||||
"PO-Revision-Date: 2009-11-27 11:00+0000\n"
|
"PO-Revision-Date: 2009-11-30 02:42+0000\n"
|
||||||
"Last-Translator: Bartosz Kaszubowski <gosimek@gmail.com>\n"
|
"Last-Translator: Bartosz Kaszubowski <gosimek@gmail.com>\n"
|
||||||
"Language-Team: Polish <pl@li.org>\n"
|
"Language-Team: Polish <pl@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: 2009-11-28 04:55+0000\n"
|
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41
|
||||||
@ -68,9 +68,9 @@ msgstr "Ta opcja nic nie zmienia"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:954
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105
|
||||||
@ -132,7 +132,7 @@ msgstr "Ta opcja nic nie zmienia"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:649
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:721
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:768
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -432,8 +432,8 @@ msgstr "John Schember"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
@ -455,7 +455,7 @@ msgstr ""
|
|||||||
msgid "Communicate with the IRex Iliad eBook reader."
|
msgid "Communicate with the IRex Iliad eBook reader."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||||
msgid "Device Interface"
|
msgid "Device Interface"
|
||||||
msgstr "Interfejs urządzenia"
|
msgstr "Interfejs urządzenia"
|
||||||
|
|
||||||
@ -496,10 +496,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||||
@ -510,7 +510,7 @@ msgid "Getting list of books on device..."
|
|||||||
msgstr "Pobieranie listy książek znajdujących się na urządzeniu"
|
msgstr "Pobieranie listy książek znajdujących się na urządzeniu"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||||
@ -518,14 +518,14 @@ msgstr ""
|
|||||||
msgid "Kovid Goyal and John Schember"
|
msgid "Kovid Goyal and John Schember"
|
||||||
msgstr "Kovid Goyal i John Schember"
|
msgstr "Kovid Goyal i John Schember"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:129
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr "Usuwanie książek z urządzenia..."
|
msgstr "Usuwanie książek z urządzenia..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:159
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr "Przesyłanie danych meta do urządzenia..."
|
msgstr "Przesyłanie danych meta do urządzenia..."
|
||||||
@ -1778,7 +1778,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1083
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
||||||
msgid "Cover"
|
msgid "Cover"
|
||||||
msgstr "Okładka"
|
msgstr "Okładka"
|
||||||
|
|
||||||
@ -1811,70 +1811,70 @@ msgstr "Nie kompresuj zawartości pliku."
|
|||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr "Wszystkie artykuły"
|
msgstr "Wszystkie artykuły"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
||||||
msgid "Title Page"
|
msgid "Title Page"
|
||||||
msgstr "Strona tytułowa"
|
msgstr "Strona tytułowa"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||||
msgid "Table of Contents"
|
msgid "Table of Contents"
|
||||||
msgstr "Spis treści"
|
msgstr "Spis treści"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr "Spis"
|
msgstr "Spis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
||||||
msgid "Glossary"
|
msgid "Glossary"
|
||||||
msgstr "Słowniczek"
|
msgstr "Słowniczek"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
||||||
msgid "Acknowledgements"
|
msgid "Acknowledgements"
|
||||||
msgstr "Podziękowania"
|
msgstr "Podziękowania"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
||||||
msgid "Bibliography"
|
msgid "Bibliography"
|
||||||
msgstr "Bibliografia"
|
msgstr "Bibliografia"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
||||||
msgid "Colophon"
|
msgid "Colophon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
||||||
msgid "Copyright"
|
msgid "Copyright"
|
||||||
msgstr "Prawa autorskie"
|
msgstr "Prawa autorskie"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
||||||
msgid "Dedication"
|
msgid "Dedication"
|
||||||
msgstr "Dedykacja"
|
msgstr "Dedykacja"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
||||||
msgid "Epigraph"
|
msgid "Epigraph"
|
||||||
msgstr "Epigraf"
|
msgstr "Epigraf"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
||||||
msgid "Foreword"
|
msgid "Foreword"
|
||||||
msgstr "Przedsłowie"
|
msgstr "Przedsłowie"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
||||||
msgid "List of Illustrations"
|
msgid "List of Illustrations"
|
||||||
msgstr "Lista ilustracji"
|
msgstr "Lista ilustracji"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1327
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
||||||
msgid "List of Tables"
|
msgid "List of Tables"
|
||||||
msgstr "Lista tabel"
|
msgstr "Lista tabel"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1328
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1331
|
||||||
msgid "Notes"
|
msgid "Notes"
|
||||||
msgstr "Notatki"
|
msgstr "Notatki"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1329
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1332
|
||||||
msgid "Preface"
|
msgid "Preface"
|
||||||
msgstr "Wstęp"
|
msgstr "Wstęp"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1333
|
||||||
msgid "Main Text"
|
msgid "Main Text"
|
||||||
msgstr "Tekst główny"
|
msgstr "Tekst główny"
|
||||||
|
|
||||||
@ -7218,6 +7218,14 @@ msgstr "angielski (Kanada)"
|
|||||||
msgid "English (IND)"
|
msgid "English (IND)"
|
||||||
msgstr "angielski (Indie)"
|
msgstr "angielski (Indie)"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
|
||||||
|
msgid "Dutch (NL)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
|
||||||
|
msgid "Dutch (BE)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53
|
||||||
msgid "URL must have the scheme sftp"
|
msgid "URL must have the scheme sftp"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -7270,75 +7278,75 @@ msgstr "Hasło dla stron wymagających zalogowania to przeglądania zawartości.
|
|||||||
msgid "Unknown News Source"
|
msgid "Unknown News Source"
|
||||||
msgstr "Nieznane źródło informacji"
|
msgstr "Nieznane źródło informacji"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:510
|
||||||
msgid "The \"%s\" recipe needs a username and password."
|
msgid "The \"%s\" recipe needs a username and password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:593
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr "Pobranie zakończone"
|
msgstr "Pobranie zakończone"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
msgstr "Nie udało się pobrać następujących artykułów:"
|
msgstr "Nie udało się pobrać następujących artykułów:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:601
|
||||||
msgid "Failed to download parts of the following articles:"
|
msgid "Failed to download parts of the following articles:"
|
||||||
msgstr "Nie udało się pobrać części następujących artykułów:"
|
msgstr "Nie udało się pobrać części następujących artykułów:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:603
|
||||||
msgid " from "
|
msgid " from "
|
||||||
msgstr " z "
|
msgstr " z "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605
|
||||||
msgid "\tFailed links:"
|
msgid "\tFailed links:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:686
|
||||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||||
msgid "Fetching feeds..."
|
msgid "Fetching feeds..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:709
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||||
msgid "Got feeds from index page"
|
msgid "Got feeds from index page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:715
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:718
|
||||||
msgid "Trying to download cover..."
|
msgid "Trying to download cover..."
|
||||||
msgstr "Próbuję pobrać okładkę..."
|
msgstr "Próbuję pobrać okładkę..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:769
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776
|
||||||
msgid "Starting download [%d thread(s)]..."
|
msgid "Starting download [%d thread(s)]..."
|
||||||
msgstr "Rozpoczynam pobieranie [%d wątek(ków)]..."
|
msgstr "Rozpoczynam pobieranie [%d wątek(ków)]..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:785
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
|
||||||
msgid "Feeds downloaded to %s"
|
msgid "Feeds downloaded to %s"
|
||||||
msgstr "Źródła pobrano do %s"
|
msgstr "Źródła pobrano do %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:795
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||||
msgid "Could not download cover: %s"
|
msgid "Could not download cover: %s"
|
||||||
msgstr "Nie można pobrać okładki: %s"
|
msgstr "Nie można pobrać okładki: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:809
|
||||||
msgid "Downloading cover from %s"
|
msgid "Downloading cover from %s"
|
||||||
msgstr "Pobieranie okładki z %s"
|
msgstr "Pobieranie okładki z %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:928
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:935
|
||||||
msgid "Untitled Article"
|
msgid "Untitled Article"
|
||||||
msgstr "Artykuł bez tytułu"
|
msgstr "Artykuł bez tytułu"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:999
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1006
|
||||||
msgid "Article downloaded: %s"
|
msgid "Article downloaded: %s"
|
||||||
msgstr "Artykuł pobrany: %s"
|
msgstr "Artykuł pobrany: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1010
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1017
|
||||||
msgid "Article download failed: %s"
|
msgid "Article download failed: %s"
|
||||||
msgstr "Pobieranie artykułu nie powiodło się: %s"
|
msgstr "Pobieranie artykułu nie powiodło się: %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1027
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1034
|
||||||
msgid "Fetching feed"
|
msgid "Fetching feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1544,7 +1544,7 @@ class Zeroconf(object):
|
|||||||
# This is a quick test to see if we can parse the packets we generate
|
# This is a quick test to see if we can parse the packets we generate
|
||||||
#temp = DNSIncoming(out.packet())
|
#temp = DNSIncoming(out.packet())
|
||||||
try:
|
try:
|
||||||
bytes_sent = self.socket.sendto(out.packet(), 0, (addr, port))
|
self.socket.sendto(out.packet(), 0, (addr, port))
|
||||||
except:
|
except:
|
||||||
# Ignore this, it may be a temporary loss of network connection
|
# Ignore this, it may be a temporary loss of network connection
|
||||||
pass
|
pass
|
||||||
|
@ -65,7 +65,6 @@ def set_translators():
|
|||||||
# CALIBRE_OVERRIDE_LANG=de_DE.utf8 program
|
# CALIBRE_OVERRIDE_LANG=de_DE.utf8 program
|
||||||
lang = get_lang()
|
lang = get_lang()
|
||||||
if lang:
|
if lang:
|
||||||
translations = available_translations()
|
|
||||||
buf = iso639 = None
|
buf = iso639 = None
|
||||||
if os.access(lang+'.po', os.R_OK):
|
if os.access(lang+'.po', os.R_OK):
|
||||||
from calibre.translations.msgfmt import make
|
from calibre.translations.msgfmt import make
|
||||||
|
@ -11,7 +11,7 @@ from calibre.constants import iswindows
|
|||||||
|
|
||||||
def find_executable():
|
def find_executable():
|
||||||
name = 'sigil' + ('.exe' if iswindows else '')
|
name = 'sigil' + ('.exe' if iswindows else '')
|
||||||
path = find_executable_in_path(name)
|
find_executable_in_path(name)
|
||||||
#if path is None and iswindows:
|
#if path is None and iswindows:
|
||||||
# path = search_program_files()
|
# path = search_program_files()
|
||||||
|
|
||||||
|
@ -79,7 +79,6 @@ def save_soup(soup, target):
|
|||||||
|
|
||||||
html = unicode(soup)
|
html = unicode(soup)
|
||||||
with open(target, 'wb') as f:
|
with open(target, 'wb') as f:
|
||||||
idx = html.find('hoping')
|
|
||||||
f.write(html.encode('utf-8'))
|
f.write(html.encode('utf-8'))
|
||||||
|
|
||||||
class response(str):
|
class response(str):
|
||||||
@ -259,7 +258,7 @@ class RecursiveFetcher(object):
|
|||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
data = self.fetch_url(iurl)
|
data = self.fetch_url(iurl)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
||||||
continue
|
continue
|
||||||
stylepath = os.path.join(diskpath, 'style'+str(c)+'.css')
|
stylepath = os.path.join(diskpath, 'style'+str(c)+'.css')
|
||||||
@ -282,7 +281,7 @@ class RecursiveFetcher(object):
|
|||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
data = self.fetch_url(iurl)
|
data = self.fetch_url(iurl)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
||||||
continue
|
continue
|
||||||
c += 1
|
c += 1
|
||||||
@ -314,7 +313,7 @@ class RecursiveFetcher(object):
|
|||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
data = self.fetch_url(iurl)
|
data = self.fetch_url(iurl)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
self.log.exception('Could not fetch image %s'% iurl)
|
self.log.exception('Could not fetch image %s'% iurl)
|
||||||
continue
|
continue
|
||||||
c += 1
|
c += 1
|
||||||
@ -443,7 +442,7 @@ class RecursiveFetcher(object):
|
|||||||
|
|
||||||
save_soup(soup, res)
|
save_soup(soup, res)
|
||||||
self.localize_link(tag, 'href', res)
|
self.localize_link(tag, 'href', res)
|
||||||
except Exception, err:
|
except Exception:
|
||||||
self.failed_links.append((iurl, traceback.format_exc()))
|
self.failed_links.append((iurl, traceback.format_exc()))
|
||||||
self.log.exception('Could not fetch link', iurl)
|
self.log.exception('Could not fetch link', iurl)
|
||||||
finally:
|
finally:
|
||||||
|