Sync to trunk.
@ -34,6 +34,9 @@
|
||||
tickets: [4040]
|
||||
|
||||
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
|
||||
tickets: [4098]
|
||||
|
||||
@ -46,12 +49,20 @@
|
||||
|
||||
- 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:
|
||||
- title: The Economist (no subscription required)
|
||||
author: Kovid Goyal
|
||||
|
||||
- title: Sports Illustrated1
|
||||
- title: Sports Illustrated
|
||||
author: kwetal
|
||||
|
||||
- title: Levante
|
||||
@ -60,6 +71,9 @@
|
||||
- title: ncrnext
|
||||
author: kwetal
|
||||
|
||||
- title: Gulli
|
||||
author: posativ
|
||||
|
||||
improved recipes:
|
||||
- The Philadelphia Inquirer
|
||||
- Harpers
|
||||
|
@ -148,13 +148,13 @@ function fetch_library_books(start, num, timeout, sort, order, search) {
|
||||
$("#book_list tbody").html(display);
|
||||
$("#book_list tbody tr").bind('mouseenter', function() {
|
||||
var row = $(this);
|
||||
$('#book_list tbody tr:even()').css('background-color', '#eeeeee');
|
||||
$('#book_list tbody tr:odd()').css('background-color', 'white');
|
||||
$('#book_list tbody tr:even').css('background-color', '#eeeeee');
|
||||
$('#book_list tbody tr:odd').css('background-color', 'white');
|
||||
|
||||
row.css('background-color', "#fff2a8");
|
||||
row.bind('mouseleave', function(){
|
||||
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');
|
||||
});
|
||||
});
|
||||
@ -173,7 +173,7 @@ function fetch_library_books(start, num, timeout, sort, order, search) {
|
||||
|
||||
|
||||
layout();
|
||||
$('#book_list tbody tr:even()').css('background-color', '#eeeeee');
|
||||
$('#book_list tbody tr:even').css('background-color', '#eeeeee');
|
||||
},
|
||||
|
||||
complete : function(XMLHttpRequest, textStatus) {
|
||||
@ -262,6 +262,7 @@ function setup_sorting() {
|
||||
if (sort_indicator.html() == '↑') {
|
||||
order = 'descending'; html = '↓';
|
||||
}
|
||||
|
||||
sort_indicator.html(html);
|
||||
$('#book_list * .sort_indicator').css('visibility', 'hidden');
|
||||
sort_indicator.css('visibility', 'visible');
|
||||
|
@ -30,13 +30,13 @@ class Barrons(BasicNewsRecipe):
|
||||
oldest_article = 7
|
||||
|
||||
extra_css = '''
|
||||
.datestamp{color:#666666; font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
||||
h3{color:#FF0000; font-family:Georgia,"Times New Roman",Times,serif; }
|
||||
.datestamp{font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
||||
h3{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; }
|
||||
.byline{color:#AAAAAA; 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;}
|
||||
.articlePage{ font-family:Georgia,"Century Schoolbook","Times New Roman",Times,serif;color:#333333;}
|
||||
.byline{font-family:Verdana,Geneva,Kalimati,sans-serif; font-size:x-small;}
|
||||
.subhead{font-family:Georgia,"Times New Roman",Times,serif; font-size: small;}
|
||||
.articlePage{ font-family:Georgia,"Century Schoolbook","Times New Roman",Times,serif;}
|
||||
.insettipUnit{font-size: x-small;}
|
||||
'''
|
||||
remove_tags = [
|
||||
|
@ -19,13 +19,18 @@ class BusinessWeek(BasicNewsRecipe):
|
||||
max_articles_per_feed = 10
|
||||
no_stylesheets = True
|
||||
|
||||
|
||||
recursions = 1
|
||||
match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*']
|
||||
extra_css = '''
|
||||
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; }
|
||||
#lede600{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;}
|
||||
.byline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;}
|
||||
.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;}
|
||||
.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;}
|
||||
.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 = [
|
||||
@ -71,10 +83,11 @@ class BusinessWeek(BasicNewsRecipe):
|
||||
|
||||
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'
|
||||
|
||||
for tag in soup.findAll(name= 'div',attrs={ 'id':'pageNav'}):
|
||||
tag.extract()
|
||||
return soup
|
||||
|
||||
|
@ -33,7 +33,6 @@ class ChicagoBreakingNews(BasicNewsRecipe):
|
||||
feeds = [(u'Breaking news', u'http://feeds2.feedburner.com/ChicagoBreakingNews/')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
links = soup.findAll('a')
|
||||
for item in soup.findAll('a'):
|
||||
if item['href'].find('http://feedads.googleadservices.com') > -1:
|
||||
item.extract()
|
||||
|
@ -1,7 +1,9 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
from calibre.utils.threadpool import ThreadPool, makeRequests
|
||||
import time
|
||||
from datetime import datetime
|
||||
from lxml import html
|
||||
from urllib2 import urlopen
|
||||
|
||||
class Economist(BasicNewsRecipe):
|
||||
|
||||
@ -23,46 +25,55 @@ class Economist(BasicNewsRecipe):
|
||||
'http://feeds.feedburner.com/economist/full_print_edition',
|
||||
raw=True)
|
||||
entries = parse(raw).entries
|
||||
feeds = {}
|
||||
pool = ThreadPool(10)
|
||||
self.feed_dict = {}
|
||||
requests = []
|
||||
for i, item in enumerate(entries):
|
||||
from calibre.web.feeds import Article
|
||||
published = time.gmtime(item.get('timestamp', time.time()))
|
||||
title = item.get('title', _('Untitled article'))
|
||||
link = item.get('link', None)
|
||||
description = item.get('description', '')
|
||||
author = item.get('author', '')
|
||||
|
||||
try:
|
||||
feedtitle, link = self.process_eco_feed_article(link)
|
||||
self.log('Found print version for article:', title)
|
||||
except:
|
||||
self.log.exception('Failed to process article:', title)
|
||||
continue
|
||||
requests.append([i, link, title, description, author, published])
|
||||
requests = makeRequests(self.process_eco_feed_article, requests, self.eco_article_found,
|
||||
self.eco_article_failed)
|
||||
for r in requests: pool.putRequest(r)
|
||||
pool.wait()
|
||||
|
||||
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))
|
||||
continue
|
||||
return [(t, a) for t, a in self.feed_dict.items()]
|
||||
|
||||
|
||||
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 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)
|
||||
def process_eco_feed_article(self, args):
|
||||
i, url, title, description, author, published = args
|
||||
ret = urlopen(url)
|
||||
raw = ret.read()
|
||||
url = self.browser.geturl().replace('displaystory', 'PrinterFriendly').strip()
|
||||
url = ret.geturl().replace('displaystory', 'PrinterFriendly').strip()
|
||||
root = html.fromstring(raw)
|
||||
matches = root.xpath('//*[@class = "article-section"]')
|
||||
feedtitle = 'Miscellaneous'
|
||||
if matches:
|
||||
feedtitle = html.tostring(matches[0], method='text',
|
||||
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
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Darko Miletic <darko.miletic at gmail.com>'
|
||||
__copyright__ = '2008 - 2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||
'''
|
||||
engadget.com
|
||||
'''
|
||||
@ -12,20 +12,11 @@ class Engadget(BasicNewsRecipe):
|
||||
title = u'Engadget'
|
||||
__author__ = 'Darko Miletic'
|
||||
description = 'Tech news'
|
||||
language = 'en'
|
||||
|
||||
language = 'en'
|
||||
oldest_article = 7
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
use_embedded_content = False
|
||||
|
||||
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'})
|
||||
]
|
||||
|
||||
use_embedded_content = True
|
||||
|
||||
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'}):
|
||||
atag = item.find('a')
|
||||
ptag = item.find('p')
|
||||
datetag = item.find('span')
|
||||
url = self.INDEX + atag['href']
|
||||
title = self.tag_to_string(atag)
|
||||
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
|
||||
table = soup.find('table')
|
||||
previousTable = table
|
||||
contentTable = None
|
||||
|
||||
# Find the deepest table containing the stories
|
||||
while True :
|
||||
|
@ -53,8 +53,8 @@ class NYTimes(BasicNewsRecipe):
|
||||
articles = {}
|
||||
key = None
|
||||
ans = []
|
||||
allSectionKeywords = ['The Front Page', 'International','National','Obituaries','Editorials',
|
||||
'New York','Business Day','Sports','Dining','Arts','Home','Styles']
|
||||
#allSectionKeywords = ['The Front Page', 'International','National','Obituaries','Editorials',
|
||||
#'New York','Business Day','Sports','Dining','Arts','Home','Styles']
|
||||
excludeSectionKeywords = ['Dining','Styles']
|
||||
|
||||
|
||||
|
@ -71,7 +71,6 @@ class ScientificAmerican(BasicNewsRecipe):
|
||||
feeds.append(('Features', features))
|
||||
|
||||
section = []
|
||||
found = []
|
||||
title = None
|
||||
|
||||
for x in soup.find(id='magazine-main_col1').findAll(['div', 'a']):
|
||||
|
@ -72,7 +72,6 @@ class Time(BasicNewsRecipe):
|
||||
return feeds
|
||||
|
||||
def find_articles(self, seched):
|
||||
articles = []
|
||||
for a in seched.findNextSiblings( attrs={'class':['toc_hed','rule2']}):
|
||||
if a.name in "div":
|
||||
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'
|
||||
|
||||
import sys, os, cPickle, subprocess
|
||||
from operator import attrgetter
|
||||
from setup import Command
|
||||
import __builtin__
|
||||
|
||||
def check_for_python_errors(filename, builtins):
|
||||
from pyflakes import checker, ast
|
||||
def set_builtins(builtins):
|
||||
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:
|
||||
tree = ast.parse(contents, filename)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
try:
|
||||
value = sys.exc_info()[1]
|
||||
lineno, offset, line = value[1][1:]
|
||||
except IndexError:
|
||||
lineno, offset, line = 1, 0, ''
|
||||
if line.endswith("\n"):
|
||||
line = line[:-1]
|
||||
compile(code_string, filename, "exec")
|
||||
except MemoryError:
|
||||
# Python 2.4 will raise MemoryError if the source can't be
|
||||
# decoded.
|
||||
if sys.version_info[:2] == (2, 4):
|
||||
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:
|
||||
w = checker.Checker(tree, filename, builtins = builtins)
|
||||
w.messages.sort(key = attrgetter('lineno'))
|
||||
return w.messages
|
||||
|
||||
# Okay, it's syntactically valid. Now parse it into an ast and check
|
||||
# it.
|
||||
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):
|
||||
|
||||
@ -65,15 +89,18 @@ class Check(Command):
|
||||
cache = {}
|
||||
if os.path.exists(self.CACHE):
|
||||
cache = cPickle.load(open(self.CACHE, 'rb'))
|
||||
builtins = list(set_builtins(self.BUILTINS))
|
||||
for f, mtime in self.get_files(cache):
|
||||
self.info('\tChecking', f)
|
||||
w = check_for_python_errors(f, self.BUILTINS)
|
||||
w = check_for_python_errors(open(f, 'rb').read(), f)
|
||||
if w:
|
||||
self.report_errors(w)
|
||||
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
||||
subprocess.call(['gvim', '-f', f])
|
||||
raise SystemExit(1)
|
||||
cache[f] = mtime
|
||||
for x in builtins:
|
||||
delattr(__builtin__, x)
|
||||
cPickle.dump(cache, open(self.CACHE, 'wb'), -1)
|
||||
wn_path = os.path.expanduser('~/work/servers/src/calibre_servers/main')
|
||||
if os.path.exists(wn_path):
|
||||
@ -85,11 +112,5 @@ class Check(Command):
|
||||
|
||||
def report_errors(self, errors):
|
||||
for err in errors:
|
||||
if isinstance(err, SyntaxError):
|
||||
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)
|
||||
self.info('\t\t', str(err))
|
||||
|
||||
|
@ -2,7 +2,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = 'calibre'
|
||||
__version__ = '0.6.24'
|
||||
__version__ = '0.6.25'
|
||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
import re
|
||||
|
@ -35,18 +35,9 @@ Run an embedded python interpreter.
|
||||
parser.add_option('--pdfreflow', default=None,
|
||||
help='Path to PDF file to try and reflow. Output will be placed in '
|
||||
'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
|
||||
|
||||
def develop_from(path):
|
||||
from calibre.gui2 import build_forms
|
||||
print 'Compiling .ui forms...'
|
||||
build_forms(path)
|
||||
|
||||
def migrate(old, new):
|
||||
from calibre.utils.config import prefs
|
||||
from calibre.library.database import LibraryDatabase
|
||||
@ -192,8 +183,6 @@ def main(args=sys.argv):
|
||||
from calibre.utils.logging import default_log
|
||||
opts2, args = px().parse_args(['xxxx', '-vvvv', opts.pdfreflow])
|
||||
run(opts2, opts.pdfreflow, default_log)
|
||||
elif opts.develop_from is not None:
|
||||
develop_from(opts.develop_from)
|
||||
else:
|
||||
from calibre import ipython
|
||||
ipython()
|
||||
|
@ -17,18 +17,31 @@ class ANDROID(USBMS):
|
||||
# Ordered list of supported formats
|
||||
FORMATS = ['epub']
|
||||
|
||||
VENDOR_ID = [
|
||||
0x0bb4,
|
||||
]
|
||||
PRODUCT_ID = [0x0c02, 0x0c01]
|
||||
BCD = [0x100]
|
||||
EBOOK_DIR_MAIN = 'wordplayer/calibretransfer'
|
||||
VENDOR_ID = {
|
||||
0x0bb4 : { 0x0c02 : [0x100], 0x0c01 : [0x100]},
|
||||
0x22b8 : { 0x41d9 : [0x216]},
|
||||
}
|
||||
EBOOK_DIR_MAIN = ['wordplayer/calibretransfer', 'eBooks/import', 'Books']
|
||||
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'
|
||||
WINDOWS_MAIN_MEM = 'ANDROID_PHONE'
|
||||
VENDOR_NAME = ['HTC', 'MOTOROLA']
|
||||
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855']
|
||||
|
||||
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
|
||||
|
||||
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'
|
||||
|
||||
FORMATS = ['epub', 'fb2', 'pdf', 'djvu', 'rtf', 'chm', 'txt']
|
||||
FORMATS = ['epub', 'fb2', 'prc', 'mobi', 'pdf', 'djvu', 'rtf', 'chm', 'txt']
|
||||
|
||||
VENDOR_NAME = 'PHILIPS'
|
||||
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_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
|
||||
a backend that implement the Device interface for the SONY PRS500 Reader.
|
||||
"""
|
||||
import os
|
||||
|
||||
from calibre.customize import Plugin
|
||||
from calibre.constants import iswindows
|
||||
|
||||
class DevicePlugin(Plugin):
|
||||
"""
|
||||
@ -21,7 +23,14 @@ class DevicePlugin(Plugin):
|
||||
|
||||
# Ordered list of supported formats
|
||||
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
|
||||
#: An integer or a list of integers
|
||||
PRODUCT_ID = 0x0000
|
||||
# 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.
|
||||
@ -29,6 +38,88 @@ class DevicePlugin(Plugin):
|
||||
THUMBNAIL_HEIGHT = 68 # Height for thumbnails on device
|
||||
# Whether the metadata on books can be set via the GUI.
|
||||
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) :
|
||||
"""
|
||||
|
@ -26,6 +26,7 @@ class PRS505(CLI, Device):
|
||||
description = _('Communicate with the Sony PRS-300/505/500 eBook reader.')
|
||||
author = _('Kovid Goyal and John Schember')
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
path_sep = '/'
|
||||
|
||||
FORMATS = ['epub', 'lrf', 'lrx', 'rtf', 'pdf', 'txt']
|
||||
|
||||
|
@ -67,44 +67,8 @@ class DeviceScanner(object):
|
||||
'''Fetch list of connected USB devices from operating system'''
|
||||
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):
|
||||
vendor_ids = device.VENDOR_ID if hasattr(device.VENDOR_ID, '__len__') else [device.VENDOR_ID]
|
||||
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
|
||||
return device.is_usb_connected(self.devices)
|
||||
|
||||
|
||||
def main(args=sys.argv):
|
||||
|
@ -211,8 +211,16 @@ class Device(DeviceConfig, DevicePlugin):
|
||||
def windows_match_device(self, drive, attr):
|
||||
pnp_id = str(drive.PNPDeviceID).upper()
|
||||
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
|
||||
|
||||
if hasattr(device_id, 'search'):
|
||||
@ -606,7 +614,6 @@ class Device(DeviceConfig, DevicePlugin):
|
||||
|
||||
def eject_linux(self):
|
||||
drives = self.find_device_nodes()
|
||||
success = False
|
||||
for drive in drives:
|
||||
if drive:
|
||||
cmd = 'calibre-mount-helper'
|
||||
@ -663,7 +670,8 @@ class Device(DeviceConfig, DevicePlugin):
|
||||
traceback.print_exc()
|
||||
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):
|
||||
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,
|
||||
*(self.EBOOK_DIR_CARD_B.split('/')))
|
||||
else:
|
||||
path = os.path.join(self._main_prefix,
|
||||
*(self.EBOOK_DIR_MAIN.split('/')))
|
||||
candidates = self.get_main_ebook_dir()
|
||||
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):
|
||||
if hasattr(obj, 'seek'):
|
||||
|
@ -9,14 +9,22 @@ from calibre.utils.config import Config, ConfigProxy
|
||||
class DeviceConfig(object):
|
||||
|
||||
HELP_MESSAGE = _('Configure Device')
|
||||
EXTRA_CUSTOMIZATION_MESSAGE = None
|
||||
EXTRA_CUSTOMIZATION_DEFAULT = None
|
||||
|
||||
@classmethod
|
||||
def _config(cls):
|
||||
klass = cls if isinstance(cls, type) else cls.__class__
|
||||
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('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('format_map', default=cls.FORMATS,
|
||||
help=_('Ordered list of formats the device will accept'))
|
||||
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
|
||||
|
||||
@classmethod
|
||||
@ -27,16 +35,23 @@ class DeviceConfig(object):
|
||||
def config_widget(cls):
|
||||
from calibre.gui2.device_drivers.configwidget import ConfigWidget
|
||||
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
|
||||
|
||||
@classmethod
|
||||
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:
|
||||
cls._configProxy()['use_subdirs'] = config_widget.use_subdirs()
|
||||
proxy['use_subdirs'] = config_widget.use_subdirs()
|
||||
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
|
||||
def settings(cls):
|
||||
|
@ -312,7 +312,6 @@ class EPUBOutput(OutputFormatPlugin):
|
||||
for tag in XPath('//h:center')(root):
|
||||
tag.tag = XHTML('div')
|
||||
tag.set('style', 'text-align:center')
|
||||
|
||||
# ADE can't handle & in an img url
|
||||
for tag in XPath('//h:img[@src]')(root):
|
||||
tag.set('src', tag.get('src', '').replace('&', ''))
|
||||
@ -340,6 +339,7 @@ class EPUBOutput(OutputFormatPlugin):
|
||||
else:
|
||||
self.oeb.log.warn('No stylesheet found')
|
||||
|
||||
|
||||
def workaround_sony_quirks(self):
|
||||
'''
|
||||
Perform toc link transforms to alleviate slow loading.
|
||||
|
@ -43,8 +43,11 @@ class FB2Input(InputFormatPlugin):
|
||||
from calibre.ebooks.oeb.base import XLINK_NS
|
||||
NAMESPACES = {'f':FB2NS, 'l':XLINK_NS}
|
||||
log.debug('Parsing XML...')
|
||||
parser = etree.XMLParser(recover=True, no_network=True)
|
||||
doc = etree.fromstring(stream.read())
|
||||
raw = stream.read()
|
||||
try:
|
||||
doc = etree.fromstring(raw)
|
||||
except etree.XMLSyntaxError:
|
||||
doc = etree.fromstring(raw.replace('& ', '&'))
|
||||
self.extract_embedded_content(doc)
|
||||
log.debug('Converting XML to HTML...')
|
||||
ss = open(P('templates/fb2.xsl'), 'rb').read()
|
||||
|
@ -21,4 +21,26 @@ class LITInput(InputFormatPlugin):
|
||||
from calibre.ebooks.conversion.plumber import create_oebbook
|
||||
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)
|
||||
unbin = UnBinary(raw, name, manifest, HTML_MAP, atoms)
|
||||
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:
|
||||
internal = '/'.join(('/data', entry.internal))
|
||||
content = self._litfile.get_file(internal)
|
||||
|
@ -106,7 +106,7 @@ def process_file(lrfpath, opts, logger=None):
|
||||
os.makedirs(opts.out)
|
||||
|
||||
document = LRFDocument(open(lrfpath, 'rb'))
|
||||
conv = LRFConverter(document, opts, logger)
|
||||
LRFConverter(document, opts, logger)
|
||||
|
||||
|
||||
def main(args=sys.argv):
|
||||
|
@ -872,8 +872,9 @@ class Text(LRFStream):
|
||||
if isinstance(c, basestring):
|
||||
s += c
|
||||
elif c is None:
|
||||
p = open_containers.pop()
|
||||
s += u'</%s>'%(p.name,)
|
||||
if open_containers:
|
||||
p = open_containers.pop()
|
||||
s += u'</%s>'%(p.name,)
|
||||
else:
|
||||
s += unicode(c)
|
||||
if not c.self_closing:
|
||||
|
@ -2207,7 +2207,7 @@ class JumpButton(LrsObject, LrsContainer):
|
||||
def toElement(self, se):
|
||||
b = self.lrsObjectElement("Button")
|
||||
pb = SubElement(b, "PushButton")
|
||||
jt = SubElement(pb, "JumpTo",
|
||||
SubElement(pb, "JumpTo",
|
||||
refpage=str(self.textBlock.parent.objId),
|
||||
refobj=str(self.textBlock.objId))
|
||||
return b
|
||||
|
@ -323,7 +323,7 @@ class MobiReader(object):
|
||||
self.log.warning('Malformed markup, parsing using BeautifulSoup')
|
||||
try:
|
||||
root = soupparser.fromstring(self.processed_html)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
self.log.warning('MOBI markup appears to contain random bytes. Stripping.')
|
||||
self.processed_html = self.remove_random_bytes(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')
|
||||
# Zero out self._HTMLRecords, return False
|
||||
self._HTMLRecords = []
|
||||
last_name = None
|
||||
#last_name = None
|
||||
return False
|
||||
|
||||
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" % \
|
||||
(myIndex, child.title if child.title.strip() > "" else "(missing)", myStartingRecord, myStartingRecord, offset, length) )
|
||||
|
||||
last_name = "%04X" % myIndex
|
||||
#last_name = "%04X" % myIndex
|
||||
myIndex += 1
|
||||
|
||||
# Successfully parsed the entries
|
||||
@ -625,7 +625,7 @@ class MobiWriter(object):
|
||||
self._oeb.log.warning('_generate_indexed_navpoints: Failed to generate index')
|
||||
# Zero out self._HTMLRecords, return False
|
||||
self._HTMLRecords = []
|
||||
last_name = None
|
||||
#last_name = None
|
||||
return False
|
||||
|
||||
previousOffset = offset
|
||||
@ -659,7 +659,7 @@ class MobiWriter(object):
|
||||
# *** This should check currentSectionNumber, because content could start late
|
||||
if thisRecord > 0:
|
||||
sectionChangesInThisRecord = True
|
||||
sectionChangesInRecordNumber = thisRecord
|
||||
#sectionChangesInRecordNumber = thisRecord
|
||||
self._currentSectionIndex += 1
|
||||
self._HTMLRecords[thisRecord].nextSectionNumber = self._currentSectionIndex
|
||||
# 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" % \
|
||||
(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
|
||||
|
||||
# Successfully parsed the entries
|
||||
@ -1999,7 +1999,7 @@ class MobiWriter(object):
|
||||
self._articleCount = 0
|
||||
self._chapterCount = 0
|
||||
|
||||
first = True
|
||||
#first = True
|
||||
|
||||
if self._conforming_periodical_toc :
|
||||
self._oeb.logger.info('Generating structured CTOC ...')
|
||||
@ -2007,7 +2007,7 @@ class MobiWriter(object):
|
||||
if self.opts.verbose > 2 :
|
||||
self._oeb.logger.info(" %s" % child)
|
||||
self._add_structured_ctoc_node(child, self._ctoc)
|
||||
first = False
|
||||
#first = False
|
||||
|
||||
else :
|
||||
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
|
||||
# offset, skip it
|
||||
h = child.href
|
||||
first = False
|
||||
|
||||
if h is None:
|
||||
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)
|
||||
|
||||
sectionParent = myDoc.documentStructure.sectionParents[0]
|
||||
articleCount = len(sectionParent.articles)
|
||||
#articleCount = len(sectionParent.articles)
|
||||
|
||||
# Write opening periodical 0xDF entry
|
||||
index = 0
|
||||
@ -2361,7 +2360,7 @@ class MobiWriter(object):
|
||||
while sectionCount <= lastSection :
|
||||
# section
|
||||
sectionParent = myDoc.documentStructure.sectionParents[sectionCount - 1]
|
||||
articleCount = len(sectionParent.articles)
|
||||
#articleCount = len(sectionParent.articles)
|
||||
#index += 1
|
||||
offset = sectionParent.startAddress
|
||||
length = sectionParent.sectionLength
|
||||
|
@ -799,6 +799,7 @@ class Manifest(object):
|
||||
try:
|
||||
data = etree.fromstring(data)
|
||||
except etree.XMLSyntaxError, err:
|
||||
self.oeb.log.exception('Initial parse failed:')
|
||||
repl = lambda m: ENTITYDEFS.get(m.group(1), m.group(0))
|
||||
data = ENTITY_RE.sub(repl, data)
|
||||
try:
|
||||
@ -843,6 +844,7 @@ class Manifest(object):
|
||||
|
||||
# Force into the XHTML namespace
|
||||
if not namespace(data.tag):
|
||||
self.oeb.log.warn('Forcing', self.href, 'into XHTML namespace')
|
||||
data.attrib['xmlns'] = XHTML_NS
|
||||
data = etree.tostring(data, encoding=unicode)
|
||||
|
||||
@ -859,6 +861,10 @@ class Manifest(object):
|
||||
data = re.compile(r'<!--.*?-->', re.DOTALL).sub('',
|
||||
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)
|
||||
elif namespace(data.tag) != XHTML_NS:
|
||||
# OEB_DOC_NS, but possibly others
|
||||
|
@ -168,7 +168,6 @@ class OEBReader(object):
|
||||
manifest = self.oeb.manifest
|
||||
known = set(manifest.hrefs)
|
||||
unchecked = set(manifest.values())
|
||||
bad = []
|
||||
while unchecked:
|
||||
new = set()
|
||||
for item in unchecked:
|
||||
|
@ -103,7 +103,7 @@ def run(opts, pathtopdf, log):
|
||||
pdfreflow.reflow(data)
|
||||
index = os.path.join(os.getcwdu(), 'index.xml')
|
||||
xml = open(index, 'rb').read()
|
||||
#pdfdoc = PDFDocument(xml, opts, log)
|
||||
PDFDocument(xml, opts, log)
|
||||
|
||||
def option_parser():
|
||||
from optparse import OptionParser
|
||||
|
@ -20,7 +20,7 @@ def is_valid_pdf(pdf_path):
|
||||
|
||||
try:
|
||||
with open(os.path.abspath(pdf_path), 'rb') as pdf_file:
|
||||
pdf = PdfFileReader(pdf_file)
|
||||
PdfFileReader(pdf_file)
|
||||
except:
|
||||
return False
|
||||
return True
|
||||
|
@ -596,3 +596,6 @@ def build_forms(srcdir, info=None):
|
||||
|
||||
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):
|
||||
'''Copy books from device to disk'''
|
||||
for path in paths:
|
||||
name = path.rpartition('/')[2]
|
||||
name = path.rpartition(getattr(self.device, 'path_sep', '/'))[2]
|
||||
dest = os.path.join(target, name)
|
||||
if os.path.abspath(dest) != os.path.abspath(path):
|
||||
f = open(dest, 'wb')
|
||||
@ -609,7 +609,6 @@ class DeviceGUI(object):
|
||||
def emails_sent(self, results, remove=[]):
|
||||
errors, good = [], []
|
||||
for jobname, exception, tb in results:
|
||||
id = jobname.partition(':')[0]
|
||||
title = jobname.partition(':')[-1]
|
||||
if exception is not None:
|
||||
errors.append([title, exception, tb])
|
||||
|
@ -11,7 +11,8 @@ from calibre.gui2.device_drivers.configwidget_ui import Ui_ConfigWidget
|
||||
class ConfigWidget(QWidget, Ui_ConfigWidget):
|
||||
|
||||
def __init__(self, settings, all_formats, supports_subdirs,
|
||||
must_read_metadata):
|
||||
must_read_metadata, extra_customization_message,
|
||||
extra_customization_value):
|
||||
|
||||
QWidget.__init__(self)
|
||||
Ui_ConfigWidget.__init__(self)
|
||||
@ -38,6 +39,14 @@ class ConfigWidget(QWidget, Ui_ConfigWidget):
|
||||
self.opt_read_metadata.setChecked(self.settings.read_metadata)
|
||||
else:
|
||||
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):
|
||||
idx = self.columns.currentRow()
|
||||
|
@ -73,23 +73,39 @@
|
||||
</item>
|
||||
</layout>
|
||||
</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>
|
||||
</widget>
|
||||
</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>
|
||||
</widget>
|
||||
<resources>
|
||||
|
@ -135,7 +135,7 @@ class FetchMetadata(QDialog, Ui_FetchMetadata):
|
||||
set_isbndb_key(key)
|
||||
else:
|
||||
key = None
|
||||
title = author = publisher = isbn = pubdate = None
|
||||
title = author = publisher = isbn = None
|
||||
if self.isbn:
|
||||
isbn = self.isbn
|
||||
if self.title:
|
||||
|
@ -50,7 +50,7 @@ class TagEditor(QDialog, Ui_TagEditor):
|
||||
confirms, deletes = [], []
|
||||
items = self.available_tags.selectedItems() if item is None else [item]
|
||||
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
|
||||
for item in items:
|
||||
if self.db.is_tag_used(qstring_to_unicode(item.text())):
|
||||
|
@ -125,7 +125,6 @@ class JobManager(QAbstractTableModel):
|
||||
|
||||
def _update(self):
|
||||
# Update running time
|
||||
rows = set([])
|
||||
for i, j in enumerate(self.jobs):
|
||||
if j.run_state == j.RUNNING:
|
||||
idx = self.index(i, 3)
|
||||
|
@ -186,7 +186,7 @@ class TextBlock(object):
|
||||
try:
|
||||
self.populate(tb.content)
|
||||
self.end_line()
|
||||
except TextBlock.HeightExceeded, err:
|
||||
except TextBlock.HeightExceeded:
|
||||
pass
|
||||
#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])
|
||||
for tag in data[r]:
|
||||
t = TagTreeItem(parent=c, data=tag, icon_map=self.icon_map)
|
||||
t
|
||||
|
||||
self.db.add_listener(self.database_changed)
|
||||
self.connect(self, SIGNAL('need_refresh()'), self.refresh,
|
||||
@ -229,7 +230,6 @@ class TagsModel(QAbstractItemModel):
|
||||
def reset_all_states(self):
|
||||
for i in xrange(self.rowCount(QModelIndex())):
|
||||
category_index = self.index(i, 0, QModelIndex())
|
||||
category_item = category_index.internalPointer()
|
||||
for j in xrange(self.rowCount(category_index)):
|
||||
tag_index = self.index(j, 0, category_index)
|
||||
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
|
||||
|
||||
def convert_bulk_ebook(parent, queue, db, book_ids, out_format=None, args=[]):
|
||||
changed = False
|
||||
jobs = []
|
||||
bad = []
|
||||
|
||||
total = len(book_ids)
|
||||
if total == 0:
|
||||
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:
|
||||
ndb = LibraryDatabase2(newloc)
|
||||
LibraryDatabase2(newloc)
|
||||
except Exception, err:
|
||||
det = traceback.format_exc()
|
||||
error_dialog(parent, _('Invalid database'),
|
||||
|
@ -889,10 +889,8 @@ class LibraryDatabase2(LibraryDatabase):
|
||||
def formats(self, index, index_is_id=False):
|
||||
''' 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)
|
||||
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
||||
try:
|
||||
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)
|
||||
except:
|
||||
return None
|
||||
@ -910,7 +908,10 @@ class LibraryDatabase2(LibraryDatabase):
|
||||
def format_abspath(self, index, format, index_is_id=False):
|
||||
'Return absolute path to the ebook file of format `format`'
|
||||
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:
|
||||
path = os.path.join(self.library_path, self.path(id, index_is_id=True))
|
||||
format = ('.' + format.lower()) if format else ''
|
||||
@ -1813,11 +1814,9 @@ books_series_link feeds
|
||||
else:
|
||||
actual_formats = [x.lower() for x in actual_formats.split(',')]
|
||||
|
||||
mismatch = False
|
||||
for fmt in formats:
|
||||
if fmt in actual_formats:
|
||||
continue
|
||||
mismatch = True
|
||||
if id not in bad:
|
||||
bad[id] = []
|
||||
bad[id].append(fmt)
|
||||
|
@ -636,10 +636,6 @@ class LibraryServer(object):
|
||||
'type="application/atom+xml" href="/stanza/?%s"/>\n'
|
||||
) % '&'.join(q)
|
||||
|
||||
author_list=[]
|
||||
tag_list=[]
|
||||
series_list=[]
|
||||
|
||||
for record in nrecord_list:
|
||||
r = record[FIELD_MAP['formats']]
|
||||
r = r.upper() if r else ''
|
||||
|
@ -388,7 +388,7 @@ class PostInstall:
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
shutil.rmtree(tdir)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
if self.opts.fatal_errors:
|
||||
raise
|
||||
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:
|
||||
|
||||
''')
|
||||
sections = []
|
||||
toc = {}
|
||||
sec_templ = textwrap.dedent('''\
|
||||
.. include:: ../global.rst
|
||||
@ -141,7 +140,6 @@ def generate_ebook_convert_help(preamble, info):
|
||||
|
||||
''')
|
||||
for i, ip in enumerate(input_format_plugins()):
|
||||
path = os.path.join('cli', 'ebook-convert-%d.rst'%i)
|
||||
sraw = sec_templ.format(ip.name)
|
||||
toc[ip.name] = 'ebook-convert-%d'%i
|
||||
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
|
||||
|
||||
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.
|
||||
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
|
||||
@ -117,8 +114,6 @@ in your favorite editor and add the line::
|
||||
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!``.
|
||||
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
|
||||
------------------------------
|
||||
@ -128,11 +123,8 @@ the previously checked out calibre code directory, for example::
|
||||
|
||||
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.
|
||||
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>`_
|
||||
@ -151,8 +143,6 @@ in your favorite editor and add the line::
|
||||
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!``.
|
||||
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
|
||||
------------------------------
|
||||
@ -166,9 +156,7 @@ Install the |app| using the binary installer. The opena terminal and change to
|
||||
|
||||
cd /home/kovid/work/calibre
|
||||
|
||||
calibre is the directory that contains the src and resources sub directories. Then, run the following command::
|
||||
|
||||
calibre-debug --develop-from src
|
||||
calibre is the directory that contains the src and resources sub directories.
|
||||
|
||||
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
|
||||
@ -187,7 +175,4 @@ in your favorite editor and add the line::
|
||||
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!``.
|
||||
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]
|
||||
id = '%s.%s' % (id, shortname)
|
||||
else:
|
||||
id = descr = None
|
||||
id = None
|
||||
|
||||
if id:
|
||||
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 ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-26 20:00+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 00:09+0000\n"
|
||||
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 02:37+0000\n"
|
||||
"Last-Translator: Jon <jon@linde.net>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-27 04:47+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-01 04:38+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /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/odt/input.py:49
|
||||
#: /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:891
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||
#: /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:139
|
||||
#: /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:721
|
||||
#: /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:63
|
||||
#: /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/jetbook/driver.py:76
|
||||
#: /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:132
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||
#: /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:111
|
||||
msgid "Transferring books to device..."
|
||||
@ -467,7 +467,7 @@ msgstr "Kommuniker med ESlick eBogs læser"
|
||||
msgid "Communicate with the IRex Iliad eBook reader."
|
||||
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"
|
||||
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."
|
||||
|
||||
#: /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:96
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||
#: /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:52
|
||||
#: /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..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||
msgstr "Kommuniker med Sony PRS-300/505 e-bogslæseren."
|
||||
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
||||
msgid "Kovid Goyal and 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:170
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||
#: /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:144
|
||||
msgid "Removing books from device..."
|
||||
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
|
||||
msgid "Sending metadata to device..."
|
||||
msgstr "Sender metadata til enhed..."
|
||||
@ -1805,7 +1805,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /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"
|
||||
msgstr ""
|
||||
|
||||
@ -1837,70 +1837,70 @@ msgstr ""
|
||||
msgid "All articles"
|
||||
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"
|
||||
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/gui2/viewer/main.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||
msgid "Table of Contents"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -7229,6 +7229,14 @@ msgstr ""
|
||||
msgid "English (IND)"
|
||||
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
|
||||
msgid "URL must have the scheme sftp"
|
||||
msgstr ""
|
||||
@ -7285,75 +7293,75 @@ msgstr ""
|
||||
msgid "Unknown News Source"
|
||||
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."
|
||||
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"
|
||||
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:"
|
||||
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:"
|
||||
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 "
|
||||
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:"
|
||||
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"
|
||||
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..."
|
||||
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"
|
||||
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..."
|
||||
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)]..."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Henter feed"
|
||||
|
||||
@ -8618,3 +8626,6 @@ msgstr "Vis detaljeret output information. Nyttig til fejlfinding"
|
||||
|
||||
#~ msgid "Hungarian"
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: de\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-11-26 20:00+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 21:31+0000\n"
|
||||
"Last-Translator: S. Dorscht <Unknown>\n"
|
||||
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 22:02+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-27 04:47+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\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/odt/input.py:49
|
||||
#: /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:891
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||
#: /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:139
|
||||
#: /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:721
|
||||
#: /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:63
|
||||
#: /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/jetbook/driver.py:76
|
||||
#: /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:132
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||
#: /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:111
|
||||
msgid "Transferring books to device..."
|
||||
@ -472,7 +472,7 @@ msgstr "Kommunikation mit dem ESlick eBook Reader."
|
||||
msgid "Communicate with the 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"
|
||||
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."
|
||||
|
||||
#: /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:96
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||
#: /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:52
|
||||
#: /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 ..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||
msgstr "Kommunikation mit dem Sony PRS-300/505 eBook Reader."
|
||||
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18
|
||||
msgid "Kovid Goyal and 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:170
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||
#: /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:144
|
||||
msgid "Removing books from device..."
|
||||
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
|
||||
msgid "Sending metadata to device..."
|
||||
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 "
|
||||
"die ersten zwei Argumente des Befehls angegeben werden.\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 "
|
||||
"Dateiendung der Ausgabedatei ist. In diesem Fall wird der Name der "
|
||||
"Ausgabedatei von der Eingabedatei abgeleitet. Beachten Sie, dass die "
|
||||
"Dateinamen nicht mit einem Anführungszeichen beginnen dürfen. Schlussendlich "
|
||||
"wird eine Ausgabedatei ohne Dateiendung als ein Verzeichnis behandelt, in "
|
||||
"das ein \"open ebook\" (OEB) bestehend aus HTML Dateien geschrieben wird. "
|
||||
"Diese Dateien sind die Dateien, die normalerweise an das Ausgabe Plugin "
|
||||
"Dateiendung der Ausgabe-Datei ist. In diesem Fall wird der Name der Ausgabe-"
|
||||
"Datei von der Eingabe-Datei abgeleitet. Beachten Sie, dass die Dateinamen "
|
||||
"nicht mit einem Anführungszeichen beginnen dürfen. Schlussendlich wird eine "
|
||||
"Ausgabe-Datei ohne Dateiendung als ein Verzeichnis behandelt, in das ein "
|
||||
"\"open ebook\" (OEB) bestehend aus HTML-Dateien geschrieben wird. Diese "
|
||||
"Dateien sind die Dateien, die normalerweise an das Ausgabe-Plugin "
|
||||
"weitergereicht werden.\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 "
|
||||
"Optionen hängen ab von den Eingabe- und Ausgabedateitypen. Für eine Hilfe "
|
||||
"dazu geben Sie die Eingabe- und Ausgabedateien an und verwenden Sie dann die "
|
||||
"Otion -h.\n"
|
||||
"Optionen hängen ab von den Eingabe- und Ausgabe-Dateitypen. Für eine Hilfe "
|
||||
"dazu geben Sie die Eingabe- und Ausgabe-Dateien an und verwenden Sie dann "
|
||||
"die Option -h.\n"
|
||||
"\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 "
|
||||
"a device. For example EPUB on the SONY reader. Choices are:"
|
||||
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 "
|
||||
"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 "
|
||||
"SONY Reader. Wählbar ist:"
|
||||
|
||||
@ -904,7 +904,7 @@ msgstr ""
|
||||
"Die Bezugsschriftgröße in Punkt. Alle Schriftgrößen im erstellen eBook "
|
||||
"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 "
|
||||
"Voreinstellung basiert die Bezugsschriftgröße auf dem gewählten Ausgabe "
|
||||
"Voreinstellung basiert die Bezugsschriftgröße auf dem gewählten Ausgabe-"
|
||||
"Profil."
|
||||
|
||||
#: /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 "
|
||||
"Schriften. Der Schriftskalierungs-Algorithmus verwendet diese Größen für die "
|
||||
"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
|
||||
msgid "Disable all rescaling of font sizes."
|
||||
@ -1102,7 +1102,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"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 "
|
||||
"Reader-Blocksatz unterstützen."
|
||||
"Reader Blocksatz unterstützen."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:308
|
||||
msgid ""
|
||||
@ -1319,12 +1319,12 @@ msgid ""
|
||||
"if your source file contains a very large number of page breaks, you should "
|
||||
"turn off splitting on page breaks."
|
||||
msgstr ""
|
||||
"Das Aufteilen bei Seitenwechseln ausschalten. Normalerweise werden "
|
||||
"eingehende Dateien automatisch bei jedem Seitenwechsel in zwei Dateien "
|
||||
"aufgeteilt. Damit erhält man in der Ausgabe ein eBook, das schneller mit "
|
||||
"weniger Resourcen analysiert werden kann. Das Aufteilen ist jedoch langsam "
|
||||
"und falls die Ausgangsdatei sehr viele Seitenwechsel enthält, sollten Sie "
|
||||
"das Aufteilen bei Seitenwechseln ausschalten."
|
||||
"Das Aufteilen bei Seitenwechseln ausschalten. Normalerweise werden Eingabe-"
|
||||
"Dateien automatisch bei jedem Seitenwechsel in zwei Dateien aufgeteilt. "
|
||||
"Damit erhält man in der Ausgabe ein eBook, das schneller mit weniger "
|
||||
"Resourcen analysiert werden kann. Das Aufteilen ist jedoch langsam und falls "
|
||||
"die Ausgangsdatei sehr viele Seitenwechsel enthält, sollten Sie das "
|
||||
"Aufteilen bei Seitenwechseln ausschalten."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:74
|
||||
msgid ""
|
||||
@ -1343,7 +1343,7 @@ msgid ""
|
||||
"default cover is generated with the title, authors, etc. This option "
|
||||
"disables the generation of this cover."
|
||||
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. "
|
||||
"erstellt. Diese Einstellung schaltet die Erstellung dieses Umschlagbildes "
|
||||
"aus."
|
||||
@ -1392,7 +1392,7 @@ msgid ""
|
||||
"can result in various nasty side effects in the rest of of the conversion "
|
||||
"pipeline."
|
||||
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, "
|
||||
"wenn Sie wissen, was Sie tun, denn es kann verschiedene nervige "
|
||||
"Nebenwirkungen beim Rest des Konvertierungsprozesses zur Folge haben."
|
||||
@ -1508,7 +1508,7 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137
|
||||
msgid "Output LRS file"
|
||||
msgstr "Ausgabe LRS Datei"
|
||||
msgstr "Ausgabe-LRS-Datei"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139
|
||||
msgid "Do not save embedded image and font files to disk"
|
||||
@ -2011,7 +2011,7 @@ msgstr ""
|
||||
"abrufen\n"
|
||||
|
||||
#: /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"
|
||||
msgstr "Umschlagbild"
|
||||
|
||||
@ -2044,70 +2044,70 @@ msgstr "Komprimierung der Datei Inhalte ausschalten."
|
||||
msgid "All articles"
|
||||
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"
|
||||
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/gui2/viewer/main.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||
msgid "Table of Contents"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Haupttext"
|
||||
|
||||
@ -2122,11 +2122,12 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62
|
||||
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
|
||||
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
|
||||
msgid "Useful for debugging."
|
||||
@ -2217,7 +2218,7 @@ msgid ""
|
||||
"Specify the character encoding of the output document. The default is "
|
||||
"cp1252. Note: This option is not honored by all formats."
|
||||
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 "
|
||||
"Formaten übernommen."
|
||||
|
||||
@ -2276,7 +2277,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Path to output file. By default a file is created in the current directory."
|
||||
msgstr ""
|
||||
"Pfad zur Ausgabedatei. Die Datei wird im aktuellen Verzeichnis erstellt "
|
||||
"Pfad zur Ausgabe-Datei. Die Datei wird im aktuellen Verzeichnis erstellt "
|
||||
"(Voreinstellung)."
|
||||
|
||||
#: /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 "
|
||||
"is used. Default is letter. Choices are %s"
|
||||
msgstr ""
|
||||
"Größe der Seite. Diese Größe wird überschrieben, wenn ein Ausgabe Profil "
|
||||
"verwendet wird. Voreinstellung ist letter. Wählbar ist %s"
|
||||
"Größe der Seite. Diese Größe wird überschrieben, wenn ein Ausgabe-Profil "
|
||||
"verwendet wird. Voreinstellung ist Letter. Wählbar ist %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40
|
||||
msgid ""
|
||||
@ -2499,7 +2500,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Specify the character encoding of the output document. The default is cp1252."
|
||||
msgstr ""
|
||||
"Geben Sie die Zeichenkodierung des Ausgabe Dokuments an. Voreinstellung ist "
|
||||
"Geben Sie die Zeichenkodierung des Ausgabe-Dokuments an. Voreinstellung ist "
|
||||
"cp1252."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:183
|
||||
@ -2514,7 +2515,7 @@ msgstr ""
|
||||
msgid ""
|
||||
"Specify the character encoding of the output document. The default is utf-8."
|
||||
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."
|
||||
|
||||
#: /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 "
|
||||
"markdown see"
|
||||
msgstr ""
|
||||
"Texteingabe durch die Markdown Vorverarbeitung laufen lassen. Mehr über "
|
||||
"Texteingabe durch die Markdown-Vorverarbeitung laufen lassen. Mehr über "
|
||||
"Markdown erfahren Sie unter"
|
||||
|
||||
#: /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. "
|
||||
"Note: This option is not honored by all formats."
|
||||
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 "
|
||||
"ü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/single.py:185
|
||||
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
|
||||
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/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/single_ui.py:111
|
||||
msgid "&Output format:"
|
||||
msgstr "Ausgabef&ormat:"
|
||||
msgstr "Ausgabe-F&ormat:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19
|
||||
msgid "Debug"
|
||||
@ -2991,7 +2992,7 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15
|
||||
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/fb2_output.py:15
|
||||
@ -3022,7 +3023,7 @@ msgstr "Kein voreingestelltes &Cover"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12
|
||||
msgid "FB2 Input"
|
||||
msgstr "FB2 Eingabe"
|
||||
msgstr "FB2-Eingabe"
|
||||
|
||||
#: /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."
|
||||
@ -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
|
||||
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/pdb_output_ui.py:37
|
||||
@ -3060,15 +3061,15 @@ msgid ""
|
||||
"works.</p>"
|
||||
msgstr ""
|
||||
"<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 "
|
||||
"eine Eingabe Schriftgröße an. Der Assistent zeigt durch den "
|
||||
"wählen. Geben Sie die Basis-Schriftgröße des Eingabe-Dokuments an und geben "
|
||||
"eine Eingabe-Schriftgröße an. Der Assistent zeigt durch den "
|
||||
"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 "
|
||||
"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 "
|
||||
"aktuellen Ausgabe Profils verwenden. </p>\n"
|
||||
"aktuellen Ausgabe-Profils verwenden. </p>\n"
|
||||
"<p>Sehen Sie sich das englischsprachige <a "
|
||||
"href=\"http://calibre.kovidgoyal.net/user_manual/conversion.html#font-size-"
|
||||
"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
|
||||
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:109
|
||||
@ -3151,7 +3152,7 @@ msgstr "Zeilen&höhe:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119
|
||||
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
|
||||
msgid "Remove &spacing between paragraphs"
|
||||
@ -3187,7 +3188,7 @@ msgstr "Extra &CSS"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||
msgid "LRF Output"
|
||||
msgstr "LRF Ausgabe"
|
||||
msgstr "LRF-Ausgabe"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116
|
||||
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 "
|
||||
"possible."
|
||||
msgstr ""
|
||||
"Metadaten eingeben. Die Ausgabedatei wird möglichst viel dieser Metadaten "
|
||||
"Metadaten eingeben. Die Ausgabe-Datei wird möglichst viel dieser Metadaten "
|
||||
"enthalten."
|
||||
|
||||
#: /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
|
||||
msgid "MOBI Output"
|
||||
msgstr "MOBI Ausgabe"
|
||||
msgstr "MOBI-Ausgabe"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:45
|
||||
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
|
||||
msgid "&Output profile:"
|
||||
msgstr "Ausgabe Pr&ofil:"
|
||||
msgstr "Ausgabe-Pr&ofil:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:112
|
||||
msgid "Profile description"
|
||||
@ -3433,7 +3434,7 @@ msgstr "&Unten:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12
|
||||
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/txt_input_ui.py:39
|
||||
@ -3455,7 +3456,7 @@ msgstr "&Format:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:12
|
||||
msgid "PDF Input"
|
||||
msgstr "PDF Eingabe"
|
||||
msgstr "PDF-Eingabe"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:39
|
||||
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
|
||||
msgid "PDF Output"
|
||||
msgstr "PDF Ausgabe"
|
||||
msgstr "PDF-Ausgabe"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:40
|
||||
msgid "&Paper Size:"
|
||||
@ -3479,7 +3480,7 @@ msgstr "&Orientierung:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14
|
||||
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/main.py:1411
|
||||
@ -3522,7 +3523,7 @@ msgstr "Konvertieren"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196
|
||||
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/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
|
||||
msgid "&Preprocess input file to possibly improve structure detection"
|
||||
msgstr ""
|
||||
"Eingabedatei zur möglichen Verbesserung der Struktur Erkennung "
|
||||
"Eingabe-Datei zur möglichen Verbesserung der Struktur-Erkennung "
|
||||
"vorverar&beiten"
|
||||
|
||||
#: /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
|
||||
msgid "TXT Output"
|
||||
msgstr "TXT Ausgabe"
|
||||
msgstr "TXT-Ausgabe"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:52
|
||||
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
|
||||
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
|
||||
msgid "Preferred &input format order:"
|
||||
@ -7396,7 +7397,7 @@ msgstr ""
|
||||
"eine durch Kommata getrennte Liste von Feldern sein.\n"
|
||||
"Verfügbare Felder: %s\n"
|
||||
"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
|
||||
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
|
||||
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
|
||||
msgid "Ordered list of formats to prefer for input."
|
||||
@ -7958,6 +7959,14 @@ msgstr "Englisch (CA)"
|
||||
msgid "English (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
|
||||
msgid "URL must have the scheme sftp"
|
||||
msgstr "URL muss dem sftp Schema entsprechen"
|
||||
@ -8014,77 +8023,77 @@ msgstr ""
|
||||
msgid "Unknown News Source"
|
||||
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."
|
||||
msgstr ""
|
||||
"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"
|
||||
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:"
|
||||
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:"
|
||||
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 "
|
||||
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:"
|
||||
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"
|
||||
msgstr ""
|
||||
"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..."
|
||||
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"
|
||||
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..."
|
||||
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)]..."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Feed abrufen"
|
||||
|
||||
@ -10274,3 +10283,6 @@ msgstr "Detaillierte Ausgabeinformation anzeigen. Hilfreich zur Fehlersuche."
|
||||
|
||||
#~ msgid "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 ""
|
||||
"Project-Id-Version: es\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-11-26 20:00+0000\n"
|
||||
"PO-Revision-Date: 2009-11-27 15:00+0000\n"
|
||||
"Last-Translator: kilikolo <Unknown>\n"
|
||||
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||
"PO-Revision-Date: 2009-12-01 16:56+0000\n"
|
||||
"Last-Translator: Jellby <Unknown>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-28 04:55+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-02 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /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/odt/input.py:49
|
||||
#: /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:891
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||
#: /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:139
|
||||
#: /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:721
|
||||
#: /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:63
|
||||
#: /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/jetbook/driver.py:76
|
||||
#: /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:132
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||
#: /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:111
|
||||
msgid "Transferring books to device..."
|
||||
@ -475,7 +475,7 @@ msgstr "Comunicar con el lector ESlick"
|
||||
msgid "Communicate with the IRex Iliad eBook reader."
|
||||
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"
|
||||
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"
|
||||
|
||||
#: /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:96
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||
#: /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:52
|
||||
#: /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 ..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26
|
||||
msgid "Communicate with the Sony PRS-300/505 eBook reader."
|
||||
msgstr "Comunicar con los lectores Sony PRS-300/505"
|
||||
msgid "Communicate with the Sony PRS-300/505/500 eBook reader."
|
||||
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/prs700/driver.py:18
|
||||
msgid "Kovid Goyal and 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:170
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||
#: /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:144
|
||||
msgid "Removing books from device..."
|
||||
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
|
||||
msgid "Sending metadata to device..."
|
||||
msgstr "Enviando metadatos al dispositivo..."
|
||||
@ -1986,7 +1986,7 @@ msgstr ""
|
||||
"LibraryThing.com\n"
|
||||
|
||||
#: /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"
|
||||
msgstr "Portada"
|
||||
|
||||
@ -2021,70 +2021,70 @@ msgstr "Desactivar la compresión del fichero."
|
||||
msgid "All articles"
|
||||
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"
|
||||
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/gui2/viewer/main.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||
msgid "Table of Contents"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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
|
||||
msgid " em"
|
||||
msgstr ""
|
||||
msgstr " em"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123
|
||||
msgid "Insert &blank line"
|
||||
@ -7917,6 +7917,14 @@ msgstr "Inglés (Canadá)"
|
||||
msgid "English (IND)"
|
||||
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
|
||||
msgid "URL must have the scheme sftp"
|
||||
msgstr "La URL debe tener el esquema sftp"
|
||||
@ -7974,76 +7982,76 @@ msgstr ""
|
||||
msgid "Unknown News Source"
|
||||
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."
|
||||
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"
|
||||
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:"
|
||||
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:"
|
||||
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 "
|
||||
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:"
|
||||
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"
|
||||
msgstr ""
|
||||
"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..."
|
||||
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"
|
||||
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..."
|
||||
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)]..."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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 "
|
||||
#~ "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."
|
||||
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-26 20:00+0000\n"
|
||||
"PO-Revision-Date: 2009-11-26 09:23+0000\n"
|
||||
"Last-Translator: lafis <Unknown>\n"
|
||||
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 02:38+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||
"Language-Team: Korean <ko@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-27 04:47+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /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/odt/input.py:49
|
||||
#: /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:891
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||
#: /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:139
|
||||
#: /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:721
|
||||
#: /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:63
|
||||
#: /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/jetbook/driver.py:76
|
||||
#: /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:132
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||
#: /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:111
|
||||
msgid "Transferring books to device..."
|
||||
@ -442,7 +442,7 @@ msgstr ""
|
||||
msgid "Communicate with the IRex Iliad eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||
msgid "Device Interface"
|
||||
msgstr ""
|
||||
|
||||
@ -483,10 +483,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /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:96
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||
#: /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:52
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55
|
||||
@ -497,7 +497,7 @@ msgid "Getting list of books on device..."
|
||||
msgstr ""
|
||||
|
||||
#: /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 ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||
@ -505,14 +505,14 @@ msgstr ""
|
||||
msgid "Kovid Goyal and John Schember"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||
#: /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:144
|
||||
msgid "Removing books from device..."
|
||||
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
|
||||
msgid "Sending metadata to device..."
|
||||
msgstr ""
|
||||
@ -1699,7 +1699,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /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"
|
||||
msgstr ""
|
||||
|
||||
@ -1730,70 +1730,70 @@ msgstr ""
|
||||
msgid "All articles"
|
||||
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"
|
||||
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/gui2/viewer/main.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||
msgid "Table of Contents"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
@ -7064,6 +7064,14 @@ msgstr ""
|
||||
msgid "English (IND)"
|
||||
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
|
||||
msgid "URL must have the scheme sftp"
|
||||
msgstr ""
|
||||
@ -7116,75 +7124,75 @@ msgstr ""
|
||||
msgid "Unknown News Source"
|
||||
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."
|
||||
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"
|
||||
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:"
|
||||
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:"
|
||||
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 "
|
||||
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:"
|
||||
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"
|
||||
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..."
|
||||
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"
|
||||
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..."
|
||||
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)]..."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
|
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-11-26 20:00+0000\n"
|
||||
"PO-Revision-Date: 2009-11-27 11:00+0000\n"
|
||||
"POT-Creation-Date: 2009-11-30 20:45+0000\n"
|
||||
"PO-Revision-Date: 2009-11-30 02:42+0000\n"
|
||||
"Last-Translator: Bartosz Kaszubowski <gosimek@gmail.com>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2009-11-28 04:55+0000\n"
|
||||
"X-Launchpad-Export-Date: 2009-12-01 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /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/odt/input.py:49
|
||||
#: /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:891
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:951
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:894
|
||||
#: /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:139
|
||||
#: /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:721
|
||||
#: /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:63
|
||||
#: /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/jetbook/driver.py:76
|
||||
#: /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:132
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131
|
||||
#: /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:111
|
||||
msgid "Transferring books to device..."
|
||||
@ -455,7 +455,7 @@ msgstr ""
|
||||
msgid "Communicate with the IRex Iliad eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/interface.py:21
|
||||
msgid "Device Interface"
|
||||
msgstr "Interfejs urządzenia"
|
||||
|
||||
@ -496,10 +496,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /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:96
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100
|
||||
#: /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:52
|
||||
#: /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"
|
||||
|
||||
#: /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 ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27
|
||||
@ -518,14 +518,14 @@ msgstr ""
|
||||
msgid "Kovid Goyal and 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:170
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164
|
||||
#: /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:144
|
||||
msgid "Removing books from device..."
|
||||
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
|
||||
msgid "Sending metadata to device..."
|
||||
msgstr "Przesyłanie danych meta do urządzenia..."
|
||||
@ -1778,7 +1778,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /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"
|
||||
msgstr "Okładka"
|
||||
|
||||
@ -1811,70 +1811,70 @@ msgstr "Nie kompresuj zawartości pliku."
|
||||
msgid "All articles"
|
||||
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"
|
||||
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/gui2/viewer/main.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168
|
||||
msgid "Table of Contents"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr "Tekst główny"
|
||||
|
||||
@ -7218,6 +7218,14 @@ msgstr "angielski (Kanada)"
|
||||
msgid "English (IND)"
|
||||
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
|
||||
msgid "URL must have the scheme sftp"
|
||||
msgstr ""
|
||||
@ -7270,75 +7278,75 @@ msgstr "Hasło dla stron wymagających zalogowania to przeglądania zawartości.
|
||||
msgid "Unknown News Source"
|
||||
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."
|
||||
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"
|
||||
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:"
|
||||
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:"
|
||||
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 "
|
||||
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:"
|
||||
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"
|
||||
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..."
|
||||
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"
|
||||
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..."
|
||||
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)]..."
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1544,7 +1544,7 @@ class Zeroconf(object):
|
||||
# This is a quick test to see if we can parse the packets we generate
|
||||
#temp = DNSIncoming(out.packet())
|
||||
try:
|
||||
bytes_sent = self.socket.sendto(out.packet(), 0, (addr, port))
|
||||
self.socket.sendto(out.packet(), 0, (addr, port))
|
||||
except:
|
||||
# Ignore this, it may be a temporary loss of network connection
|
||||
pass
|
||||
|
@ -65,7 +65,6 @@ def set_translators():
|
||||
# CALIBRE_OVERRIDE_LANG=de_DE.utf8 program
|
||||
lang = get_lang()
|
||||
if lang:
|
||||
translations = available_translations()
|
||||
buf = iso639 = None
|
||||
if os.access(lang+'.po', os.R_OK):
|
||||
from calibre.translations.msgfmt import make
|
||||
|
@ -11,7 +11,7 @@ from calibre.constants import iswindows
|
||||
|
||||
def find_executable():
|
||||
name = 'sigil' + ('.exe' if iswindows else '')
|
||||
path = find_executable_in_path(name)
|
||||
find_executable_in_path(name)
|
||||
#if path is None and iswindows:
|
||||
# path = search_program_files()
|
||||
|
||||
|
@ -79,7 +79,6 @@ def save_soup(soup, target):
|
||||
|
||||
html = unicode(soup)
|
||||
with open(target, 'wb') as f:
|
||||
idx = html.find('hoping')
|
||||
f.write(html.encode('utf-8'))
|
||||
|
||||
class response(str):
|
||||
@ -259,7 +258,7 @@ class RecursiveFetcher(object):
|
||||
continue
|
||||
try:
|
||||
data = self.fetch_url(iurl)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
||||
continue
|
||||
stylepath = os.path.join(diskpath, 'style'+str(c)+'.css')
|
||||
@ -282,7 +281,7 @@ class RecursiveFetcher(object):
|
||||
continue
|
||||
try:
|
||||
data = self.fetch_url(iurl)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
self.log.exception('Could not fetch stylesheet %s'% iurl)
|
||||
continue
|
||||
c += 1
|
||||
@ -314,7 +313,7 @@ class RecursiveFetcher(object):
|
||||
continue
|
||||
try:
|
||||
data = self.fetch_url(iurl)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
self.log.exception('Could not fetch image %s'% iurl)
|
||||
continue
|
||||
c += 1
|
||||
@ -443,7 +442,7 @@ class RecursiveFetcher(object):
|
||||
|
||||
save_soup(soup, res)
|
||||
self.localize_link(tag, 'href', res)
|
||||
except Exception, err:
|
||||
except Exception:
|
||||
self.failed_links.append((iurl, traceback.format_exc()))
|
||||
self.log.exception('Could not fetch link', iurl)
|
||||
finally:
|
||||
|