Sync to trunk.

This commit is contained in:
John Schember 2009-12-02 18:29:04 -05:00
commit 073bab8468
94 changed files with 11785 additions and 6284 deletions

View File

@ -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

View File

@ -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');

View File

@ -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 = [

View File

@ -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

View File

@ -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()

View File

@ -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)

View File

@ -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')]

View File

@ -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)

View 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'})]

View 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
'''

View File

@ -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 :

View File

@ -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']

View File

@ -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']):

View File

@ -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

View 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

View File

@ -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))

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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'

View File

@ -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) :
"""

View File

@ -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']

View File

@ -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):

View File

@ -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'):

View File

@ -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):

View File

@ -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 &amp; 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.

View File

@ -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('& ', '&amp;'))
self.extract_embedded_content(doc)
log.debug('Converting XML to HTML...')
ss = open(P('templates/fb2.xsl'), 'rb').read()

View File

@ -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)

View File

@ -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)

View File

@ -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):

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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])

View File

@ -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()

View File

@ -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>

View File

@ -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:

View File

@ -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())):

View File

@ -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)

View File

@ -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,))

File diff suppressed because it is too large Load Diff

View File

@ -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()

View File

@ -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

View File

@ -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'),

View File

@ -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)

View File

@ -636,10 +636,6 @@ class LibraryServer(object):
'type="application/atom+xml" href="/stanza/?%s"/>\n'
) % '&amp;'.join(q)
author_list=[]
tag_list=[]
series_list=[]
for record in nrecord_list:
r = record[FIELD_MAP['formats']]
r = r.upper() if r else ''

View File

@ -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')

View File

@ -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():

View File

@ -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.

View File

@ -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"/>' % (

View File

@ -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')

View File

@ -1,3 +0,0 @@
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'

View File

@ -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-&gt;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
''')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

View File

@ -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>

View File

@ -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>

View File

@ -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 &ge; ${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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 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."

View File

@ -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."

View File

@ -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"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 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 ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,14 +7,14 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 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 ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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: