mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Sync to trunk.
This commit is contained in:
commit
8d34fe7167
@ -4,6 +4,70 @@
|
||||
# for important features/bug fixes.
|
||||
# Also, each release can have new and improved recipes.
|
||||
|
||||
- version: 0.6.36
|
||||
date: 2010-01-25
|
||||
|
||||
new features:
|
||||
- title: Catalog generation in MOBI format
|
||||
|
||||
- title: "Driver for Inves Book 600"
|
||||
|
||||
- title: "Show notifications on OS X even when systray icon is disabled. "
|
||||
|
||||
bug fixes:
|
||||
- title: Fix memory leak in catalog generation
|
||||
|
||||
- title: Fix regression that broke PML output
|
||||
|
||||
- title: Fix bug in MOBI Input
|
||||
tickets: [4643]
|
||||
|
||||
- title: "Replace commas with semi-colons in download tags"
|
||||
tickets: [4650]
|
||||
|
||||
- title: Fix catalog output format dropdown empty in linux
|
||||
tickets: [4656]
|
||||
|
||||
- title: "Fix display of non-English characters in OS X notifications"
|
||||
tickets: [4654]
|
||||
|
||||
- title: Add .cbc to list of book formats
|
||||
tickets: [4662]
|
||||
|
||||
- title: "Content server: Mobile page breaks if library contains empty books. Now fixed."
|
||||
|
||||
- title: "Support old 212 byte header PDB files"
|
||||
tickets: [4646]
|
||||
|
||||
- title: "Fix regression that caused wrong error message to be displayed when device is out of space"
|
||||
|
||||
|
||||
new recipes:
|
||||
- title: Harvard Business Review Blogs
|
||||
author: Brian_G
|
||||
|
||||
- title: Neowin
|
||||
author: Darko Miletic
|
||||
|
||||
- title: Greensboro News and Record
|
||||
author: Walt Anthony
|
||||
|
||||
- title: Hot Air
|
||||
author: Walt Anthony
|
||||
|
||||
- title: ionline
|
||||
author: Darko Miletic
|
||||
|
||||
- title: The National Review Online
|
||||
author: Walt Anthony
|
||||
|
||||
improved recipes:
|
||||
- Ars Technica
|
||||
- Sports Illustrated
|
||||
- Common Dreams
|
||||
- Wired Magazine
|
||||
|
||||
|
||||
- version: 0.6.35
|
||||
date: 2010-01-22
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB |
BIN
resources/images/news/nursingtimes.png
Normal file
BIN
resources/images/news/nursingtimes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 788 B |
BIN
resources/images/news/observer.png
Normal file
BIN
resources/images/news/observer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 835 B |
@ -90,7 +90,3 @@ class ArsTechnica2(BasicNewsRecipe):
|
||||
|
||||
return soup
|
||||
|
||||
def get_article_url(self, article):
|
||||
return article.get('feedburner_origlink', None).rpartition('?')[0]
|
||||
|
||||
|
||||
|
@ -10,13 +10,31 @@ doscovermagazine.com
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class DiscoverMagazine(BasicNewsRecipe):
|
||||
|
||||
title = u'Discover Magazine'
|
||||
description = u'Science, Technology and the Future'
|
||||
__author__ = 'Mike Diaz'
|
||||
oldest_article = 33
|
||||
language = 'en'
|
||||
|
||||
oldest_article = 33
|
||||
max_articles_per_feed = 20
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
use_embedded_content = False
|
||||
encoding = 'utf-8'
|
||||
|
||||
extra_css = '.headline {font-size: x-large;} \n .fact {padding-top: 10pt}'
|
||||
|
||||
remove_tags_before = dict(id='articlePage')
|
||||
|
||||
keep_only_tags = [dict(name='div', attrs={'id':'articlePage'})]
|
||||
|
||||
remove_tags = [dict(attrs={'id':['buttons', 'tool-box', 'teaser', 'already-subscriber', 'teaser-suite', 'related-articles', 'relatedItem', 'box-popular', 'box-blogs', 'box-news', 'footer']}),
|
||||
dict(attrs={'class':'popularNewsBox'}),
|
||||
dict(name=['img', 'style', 'head'])]
|
||||
|
||||
remove_tags_after = dict(id='articlePage')
|
||||
|
||||
feeds = [
|
||||
(u'Technology', u'http://discovermagazine.com/topics/technology/rss.xml'),
|
||||
(u'Health - Medicine', u'http://discovermagazine.com/topics/health-medicine/rss.xml'),
|
||||
|
197
resources/recipes/hbr_blogs.recipe
Normal file
197
resources/recipes/hbr_blogs.recipe
Normal file
@ -0,0 +1,197 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
import re
|
||||
|
||||
# Needed for BLOGs
|
||||
from calibre.web.feeds import Feed
|
||||
|
||||
class HBR(BasicNewsRecipe):
|
||||
|
||||
title = 'Harvard Business Review Blogs'
|
||||
description = 'To subscribe go to http://hbr.harvardbusiness.org'
|
||||
needs_subscription = True
|
||||
__author__ = 'Kovid Goyal and Sujata Raman, enhanced by BrianG'
|
||||
language = 'en'
|
||||
no_stylesheets = True
|
||||
|
||||
LOGIN_URL = 'http://hbr.org/login?request_url=/'
|
||||
INDEX = 'http://hbr.org/current'
|
||||
|
||||
#
|
||||
# Blog Stuff
|
||||
#
|
||||
|
||||
|
||||
INCLUDE_BLOGS = True
|
||||
INCLUDE_ARTICLES = False
|
||||
|
||||
# option-specific settings.
|
||||
|
||||
if INCLUDE_BLOGS == True:
|
||||
remove_tags_after = dict(id='articleBody')
|
||||
remove_tags_before = dict(id='pageFeature')
|
||||
feeds = [('Blog','http://feeds.harvardbusiness.org/harvardbusiness')]
|
||||
oldest_article = 30
|
||||
max_articles_per_feed = 100
|
||||
else:
|
||||
timefmt = ' [%B %Y]'
|
||||
|
||||
|
||||
keep_only_tags = [ dict(name='div', id='pageContainer')
|
||||
]
|
||||
|
||||
remove_tags = [dict(id=['mastheadContainer', 'magazineHeadline',
|
||||
'articleToolbarTopRD', 'pageRightSubColumn', 'pageRightColumn',
|
||||
'todayOnHBRListWidget', 'mostWidget', 'keepUpWithHBR',
|
||||
'articleToolbarTop','articleToolbarBottom', 'articleToolbarRD',
|
||||
'mailingListTout', 'partnerCenter', 'pageFooter']),
|
||||
dict(name='iframe')]
|
||||
|
||||
extra_css = '''
|
||||
a {font-family:Georgia,"Times New Roman",Times,serif; font-style:italic; color:#000000; }
|
||||
.article{font-family:Georgia,"Times New Roman",Times,serif; font-size: xx-small;}
|
||||
h2{font-family:Georgia,"Times New Roman",Times,serif; font-weight:bold; font-size:large; }
|
||||
h4{font-family:Georgia,"Times New Roman",Times,serif; font-weight:bold; font-size:small; }
|
||||
#articleBody{font-family:Georgia,"Times New Roman",Times,serif; font-style:italic; color:#000000;font-size:x-small;}
|
||||
#summaryText{font-family:Georgia,"Times New Roman",Times,serif; font-weight:bold; font-size:x-small;}
|
||||
'''
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
def get_browser(self):
|
||||
br = BasicNewsRecipe.get_browser(self)
|
||||
br.open(self.LOGIN_URL)
|
||||
br.select_form(name='signInForm')
|
||||
br['signInForm:username'] = self.username
|
||||
br['signInForm:password'] = self.password
|
||||
raw = br.submit().read()
|
||||
if 'My Account' not in raw:
|
||||
raise Exception('Failed to login, are you sure your username and password are correct?')
|
||||
self.logout_url = None
|
||||
link = br.find_link(text='Sign out')
|
||||
if link:
|
||||
self.logout_url = link.absolute_url
|
||||
return br
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def cleanup(self):
|
||||
if self.logout_url is not None:
|
||||
self.browser.open(self.logout_url)
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def map_url(self, url):
|
||||
if url.endswith('/ar/1'):
|
||||
return url[:-1]+'pr'
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
def hbr_get_toc(self):
|
||||
soup = self.index_to_soup(self.INDEX)
|
||||
url = soup.find('a', text=lambda t:'Full Table of Contents' in t).parent.get('href')
|
||||
return self.index_to_soup('http://hbr.org'+url)
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
def hbr_parse_section(self, container, feeds):
|
||||
current_section = None
|
||||
current_articles = []
|
||||
for x in container.findAll(name=['li', 'h3', 'h4']):
|
||||
if x.name in ['h3', 'h4'] and not x.findAll(True):
|
||||
if current_section and current_articles:
|
||||
feeds.append((current_section, current_articles))
|
||||
current_section = self.tag_to_string(x)
|
||||
current_articles = []
|
||||
self.log('\tFound section:', current_section)
|
||||
if x.name == 'li':
|
||||
a = x.find('a', href=True)
|
||||
if a is not None:
|
||||
title = self.tag_to_string(a)
|
||||
url = a.get('href')
|
||||
if '/ar/' not in url:
|
||||
continue
|
||||
if url.startswith('/'):
|
||||
url = 'http://hbr.org'+url
|
||||
url = self.map_url(url)
|
||||
p = x.find('p')
|
||||
desc = ''
|
||||
if p is not None:
|
||||
desc = self.tag_to_string(p)
|
||||
if not title or not url:
|
||||
continue
|
||||
self.log('\t\tFound article:', title)
|
||||
self.log('\t\t\t', url)
|
||||
self.log('\t\t\t', desc)
|
||||
current_articles.append({'title':title, 'url':url,
|
||||
'description':desc, 'date':''})
|
||||
if current_section and current_articles:
|
||||
feeds.append((current_section, current_articles))
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
|
||||
def hbr_parse_toc(self, soup):
|
||||
feeds = []
|
||||
features = soup.find(id='issueFeaturesContent')
|
||||
self.hbr_parse_section(features, feeds)
|
||||
departments = soup.find(id='issueDepartments')
|
||||
self.hbr_parse_section(departments, feeds)
|
||||
return feeds
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def feed_to_index_append(self, feedObject, masterFeed):
|
||||
# Loop thru the feed object and build the correct type of article list
|
||||
for feed in feedObject:
|
||||
# build the correct structure from the feed object
|
||||
newArticles = []
|
||||
for article in feed.articles:
|
||||
newArt = {
|
||||
'title' : article.title,
|
||||
'url' : article.url,
|
||||
'date' : article.date,
|
||||
'description' : article.text_summary
|
||||
}
|
||||
newArticles.append(newArt)
|
||||
|
||||
# Append the earliest/latest dates of the feed to the feed title
|
||||
startDate, endDate = self.get_feed_dates(feed, '%d-%b')
|
||||
newFeedTitle = feed.title + ' (' + startDate + ' thru ' + endDate + ')'
|
||||
|
||||
# append the newly-built list object to the index object passed in
|
||||
# as masterFeed.
|
||||
masterFeed.append( (newFeedTitle,newArticles) )
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def get_feed_dates(self, feedObject, dateMask):
|
||||
startDate = feedObject.articles[len(feedObject.articles)-1].localtime.strftime(dateMask)
|
||||
endDate = feedObject.articles[0].localtime.strftime(dateMask)
|
||||
|
||||
return startDate, endDate
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def hbr_parse_blogs(self, feeds):
|
||||
# Do the "official" parse_feeds first
|
||||
rssFeeds = Feed()
|
||||
|
||||
# Use the PARSE_FEEDS method to get a Feeds object of the articles
|
||||
rssFeeds = BasicNewsRecipe.parse_feeds(self)
|
||||
|
||||
# Create a new feed of the right configuration and append to existing afeeds
|
||||
self.feed_to_index_append(rssFeeds[:], feeds)
|
||||
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def parse_index(self):
|
||||
if self.INCLUDE_ARTICLES == True:
|
||||
soup = self.hbr_get_toc()
|
||||
feeds = self.hbr_parse_toc(soup)
|
||||
else:
|
||||
feeds = []
|
||||
|
||||
# blog stuff
|
||||
if self.INCLUDE_BLOGS == True:
|
||||
self.hbr_parse_blogs(feeds)
|
||||
|
||||
return feeds
|
||||
#-------------------------------------------------------------------------------------------------
|
||||
def get_cover_url(self):
|
||||
cover_url = None
|
||||
index = 'http://hbr.org/current'
|
||||
soup = self.index_to_soup(index)
|
||||
link_item = soup.find('img', alt=re.compile("Current Issue"), src=True)
|
||||
|
||||
if link_item:
|
||||
cover_url = 'http://hbr.org' + link_item['src']
|
||||
|
||||
return cover_url
|
@ -1,4 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import time
|
||||
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
|
||||
@ -8,6 +11,7 @@ class JASN(BasicNewsRecipe):
|
||||
__author__ = 'Krittika Goyal'
|
||||
oldest_article = 31 #days
|
||||
max_articles_per_feed = 25
|
||||
delay = 5
|
||||
needs_subscription = True
|
||||
|
||||
INDEX = 'http://jasn.asnjournals.org/current.shtml'
|
||||
@ -15,13 +19,13 @@ class JASN(BasicNewsRecipe):
|
||||
remove_tags_before = dict(name='h2')
|
||||
#remove_tags_after = dict(name='th', attrs={'align':'left'})
|
||||
remove_tags = [
|
||||
dict(name='iframe'),
|
||||
dict(name='iframe'),
|
||||
#dict(name='div', attrs={'class':'related-articles'}),
|
||||
dict(name='td', attrs={'id':['jasnFooter']}),
|
||||
dict(name='table', attrs={'id':"jasnNavBar"}),
|
||||
dict(name='table', attrs={'class':'content_box_outer_table'}),
|
||||
dict(name='th', attrs={'align':'left'})
|
||||
]
|
||||
dict(name='td', attrs={'id':['jasnFooter']}),
|
||||
dict(name='table', attrs={'id':"jasnNavBar"}),
|
||||
dict(name='table', attrs={'class':'content_box_outer_table'}),
|
||||
dict(name='th', attrs={'align':'left'})
|
||||
]
|
||||
|
||||
|
||||
|
||||
@ -45,10 +49,52 @@ class JASN(BasicNewsRecipe):
|
||||
raise ValueError('Failed to log in, is your account expired?')
|
||||
return br
|
||||
|
||||
feeds = [
|
||||
('JASN',
|
||||
'http://jasn.asnjournals.org/rss/current.xml'),
|
||||
]
|
||||
#feeds = [
|
||||
#('JASN',
|
||||
#'http://jasn.asnjournals.org/rss/current.xml'),
|
||||
#]
|
||||
|
||||
|
||||
#TO GET ARTICLE TOC
|
||||
def jasn_get_index(self):
|
||||
return self.index_to_soup('http://jasn.asnjournals.org/current.shtml')
|
||||
|
||||
# To parse artice toc
|
||||
def parse_index(self):
|
||||
parse_soup = self.jasn_get_index()
|
||||
|
||||
div = parse_soup.find(id='tocBody')
|
||||
|
||||
current_section = None
|
||||
current_articles = []
|
||||
feeds = []
|
||||
for x in div.findAll(True):
|
||||
if x.name == 'h2':
|
||||
# Section heading found
|
||||
if current_articles and current_section:
|
||||
feeds.append((current_section, current_articles))
|
||||
current_section = self.tag_to_string(x)
|
||||
current_articles = []
|
||||
self.log('\tFound section:', current_section)
|
||||
if current_section is not None and x.name == 'strong':
|
||||
title = self.tag_to_string(x)
|
||||
a = x.parent.parent.find('a', href=lambda x: x and '/full/' in x)
|
||||
if a is None:
|
||||
continue
|
||||
url = a.get('href', False)
|
||||
if not url or not title:
|
||||
continue
|
||||
if url.startswith('/'):
|
||||
url = 'http://jasn.asnjournals.org'+url
|
||||
self.log('\t\tFound article:', title)
|
||||
self.log('\t\t\t', url)
|
||||
current_articles.append({'title': title, 'url':url,
|
||||
'description':'', 'date':''})
|
||||
|
||||
if current_articles and current_section:
|
||||
feeds.append((current_section, current_articles))
|
||||
|
||||
return feeds
|
||||
|
||||
|
||||
|
||||
@ -59,10 +105,18 @@ class JASN(BasicNewsRecipe):
|
||||
if not url:
|
||||
continue
|
||||
if url.startswith('/'):
|
||||
url = 'http://jasn.asnjournals.org/'+url
|
||||
isoup = self.index_to_soup(url)
|
||||
img = isoup.find('img', src=lambda x: x and
|
||||
x.startswith('/content/'))
|
||||
url = 'http://jasn.asnjournals.org'+url
|
||||
img = isoup = None
|
||||
try:
|
||||
isoup = self.index_to_soup(url)
|
||||
except:
|
||||
time.sleep(5)
|
||||
try:
|
||||
isoup = self.index_to_soup(url)
|
||||
except:
|
||||
continue
|
||||
img = isoup.find('img', src=lambda x: x and x.startswith('/content/'))
|
||||
|
||||
if img is not None:
|
||||
img.extract()
|
||||
table = a.findParent('table')
|
||||
@ -71,3 +125,4 @@ class JASN(BasicNewsRecipe):
|
||||
|
||||
|
||||
|
||||
|
||||
|
239
resources/recipes/macleans.recipe
Normal file
239
resources/recipes/macleans.recipe
Normal file
@ -0,0 +1,239 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
|
||||
'''
|
||||
macleans.ca
|
||||
'''
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import Tag
|
||||
from datetime import timedelta, date
|
||||
|
||||
class Macleans(BasicNewsRecipe):
|
||||
title = u'Macleans Magazine'
|
||||
__author__ = 'Nick Redding'
|
||||
language = 'en_CA'
|
||||
description = ('Macleans Magazine')
|
||||
|
||||
no_stylesheets = True
|
||||
timefmt = ' [%b %d]'
|
||||
|
||||
# customization notes: delete sections you are not interested in
|
||||
# set oldest_article to the maximum number of days back from today to include articles
|
||||
sectionlist = [
|
||||
['http://www2.macleans.ca/','Front Page'],
|
||||
['http://www2.macleans.ca/category/canada/','Canada'],
|
||||
['http://www2.macleans.ca/category/world-from-the-magazine/','World'],
|
||||
['http://www2.macleans.ca/category/business','Business'],
|
||||
['http://www2.macleans.ca/category/arts-culture/','Culture'],
|
||||
['http://www2.macleans.ca/category/opinion','Opinion'],
|
||||
['http://www2.macleans.ca/category/health-from-the-magazine/','Health'],
|
||||
['http://www2.macleans.ca/category/environment-from-the-magazine/','Environment'],
|
||||
['http://www2.macleans.ca/category/education/','On Campus'],
|
||||
['http://www2.macleans.ca/category/travel-from-the-magazine/','Travel']
|
||||
]
|
||||
oldest_article = 7
|
||||
|
||||
# formatting for print version of articles
|
||||
extra_css = '''h2{font-family:Times,serif; font-size:large;}
|
||||
small {font-family:Times,serif; font-size:xx-small; list-style-type: none;}
|
||||
'''
|
||||
|
||||
# tag handling for print version of articles
|
||||
keep_only_tags = [dict(id='tw-print')]
|
||||
remove_tags = [dict({'class':'postmetadata'})]
|
||||
|
||||
|
||||
def preprocess_html(self,soup):
|
||||
for img_tag in soup.findAll('img'):
|
||||
parent_tag = img_tag.parent
|
||||
if parent_tag.name == 'a':
|
||||
new_tag = Tag(soup,'p')
|
||||
new_tag.insert(0,img_tag)
|
||||
parent_tag.replaceWith(new_tag)
|
||||
elif parent_tag.name == 'p':
|
||||
if not self.tag_to_string(parent_tag) == '':
|
||||
new_div = Tag(soup,'div')
|
||||
new_tag = Tag(soup,'p')
|
||||
new_tag.insert(0,img_tag)
|
||||
parent_tag.replaceWith(new_div)
|
||||
new_div.insert(0,new_tag)
|
||||
new_div.insert(1,parent_tag)
|
||||
return soup
|
||||
|
||||
def parse_index(self):
|
||||
|
||||
|
||||
|
||||
articles = {}
|
||||
key = None
|
||||
ans = []
|
||||
|
||||
def parse_index_page(page_url,page_title):
|
||||
|
||||
def decode_date(datestr):
|
||||
dmysplit = datestr.strip().lower().split(',')
|
||||
mdsplit = dmysplit[1].split()
|
||||
m = ['january','february','march','april','may','june','july','august','september','october','november','december'].index(mdsplit[0])+1
|
||||
d = int(mdsplit[1])
|
||||
y = int(dmysplit[2].split()[0])
|
||||
return date(y,m,d)
|
||||
|
||||
def article_title(tag):
|
||||
atag = tag.find('a',href=True)
|
||||
if not atag:
|
||||
return ''
|
||||
return self.tag_to_string(atag)
|
||||
|
||||
def article_url(tag):
|
||||
atag = tag.find('a',href=True)
|
||||
if not atag:
|
||||
return ''
|
||||
return atag['href']+'print/'
|
||||
|
||||
def article_description(tag):
|
||||
for p_tag in tag.findAll('p'):
|
||||
d = self.tag_to_string(p_tag,False)
|
||||
if not d == '':
|
||||
return d
|
||||
return ''
|
||||
|
||||
def compound_h4_h3_title(tag):
|
||||
if tag.h4:
|
||||
if tag.h3:
|
||||
return self.tag_to_string(tag.h4,False)+u'\u2014'+self.tag_to_string(tag.h3,False)
|
||||
else:
|
||||
return self.tag_to_string(tag.h4,False)
|
||||
elif tag.h3:
|
||||
return self.tag_to_string(tag.h3,False)
|
||||
else:
|
||||
return ''
|
||||
|
||||
def compound_h2_h4_title(tag):
|
||||
if tag.h2:
|
||||
if tag.h4:
|
||||
return self.tag_to_string(tag.h2,False)+u'\u2014'+self.tag_to_string(tag.h4,False)
|
||||
else:
|
||||
return self.tag_to_string(tag.h2,False)
|
||||
elif tag.h4:
|
||||
return self.tag_to_string(tag.h4,False)
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
||||
def handle_article(header_tag, outer_tag):
|
||||
if header_tag:
|
||||
url = article_url(header_tag)
|
||||
title = article_title(header_tag)
|
||||
author_date_tag = outer_tag.h4
|
||||
if author_date_tag:
|
||||
author_date = self.tag_to_string(author_date_tag,False).split(' - ')
|
||||
author = author_date[0].strip()
|
||||
article_date = decode_date(author_date[1])
|
||||
earliest_date = date.today() - timedelta(days=self.oldest_article)
|
||||
if article_date < earliest_date:
|
||||
self.log("Skipping article dated %s" % author_date[1])
|
||||
else:
|
||||
excerpt_div = outer_tag.find('div','excerpt')
|
||||
if excerpt_div:
|
||||
description = article_description(excerpt_div)
|
||||
else:
|
||||
description = ''
|
||||
if not articles.has_key(page_title):
|
||||
articles[page_title] = []
|
||||
articles[page_title].append(dict(title=title,url=url,date=author_date[1],description=description,author=author,content=''))
|
||||
|
||||
def handle_category_article(cat, header_tag, outer_tag):
|
||||
url = article_url(header_tag)
|
||||
title = article_title(header_tag)
|
||||
if not title == '':
|
||||
title = cat+u'\u2014'+title
|
||||
a_tag = outer_tag.find('span','authorLink')
|
||||
if a_tag:
|
||||
author = self.tag_to_string(a_tag,False)
|
||||
a_tag.parent.extract()
|
||||
else:
|
||||
author = ''
|
||||
description = article_description(outer_tag)
|
||||
if not articles.has_key(page_title):
|
||||
articles[page_title] = []
|
||||
articles[page_title].append(dict(title=title,url=url,date='',description=description,author=author,content=''))
|
||||
|
||||
|
||||
soup = self.index_to_soup(page_url)
|
||||
|
||||
if page_title == 'Front Page':
|
||||
# special processing for the front page
|
||||
top_stories = soup.find('div',{ "id" : "macleansFeatured" })
|
||||
if top_stories:
|
||||
for div_slide in top_stories.findAll('div','slide'):
|
||||
url = article_url(div_slide)
|
||||
div_title = div_slide.find('div','header')
|
||||
if div_title:
|
||||
title = self.tag_to_string(div_title,False)
|
||||
else:
|
||||
title = ''
|
||||
description = article_description(div_slide)
|
||||
if not articles.has_key(page_title):
|
||||
articles[page_title] = []
|
||||
articles[page_title].append(dict(title=title,url=url,date='',description=description,author='',content=''))
|
||||
|
||||
from_macleans = soup.find('div',{ "id" : "fromMacleans" })
|
||||
if from_macleans:
|
||||
for li_tag in from_macleans.findAll('li','fromMacleansArticle'):
|
||||
title = compound_h4_h3_title(li_tag)
|
||||
url = article_url(li_tag)
|
||||
description = article_description(li_tag)
|
||||
if not articles.has_key(page_title):
|
||||
articles[page_title] = []
|
||||
articles[page_title].append(dict(title=title,url=url,date='',description=description,author='',content=''))
|
||||
|
||||
blog_central = soup.find('div',{ "id" : "bloglist" })
|
||||
if blog_central:
|
||||
for li_tag in blog_central.findAll('li'):
|
||||
title = compound_h2_h4_title(li_tag)
|
||||
if li_tag.h4:
|
||||
url = article_url(li_tag.h4)
|
||||
if not articles.has_key(page_title):
|
||||
articles[page_title] = []
|
||||
articles[page_title].append(dict(title=title,url=url,date='',description='',author='',content=''))
|
||||
|
||||
# need_to_know = soup.find('div',{ "id" : "needToKnow" })
|
||||
# if need_to_know:
|
||||
# for div_tag in need_to_know('div',attrs={'class' : re.compile("^needToKnowArticle")}):
|
||||
# title = compound_h4_h3_title(div_tag)
|
||||
# url = article_url(div_tag)
|
||||
# description = article_description(div_tag)
|
||||
# if not articles.has_key(page_title):
|
||||
# articles[page_title] = []
|
||||
# articles[page_title].append(dict(title=title,url=url,date='',description=description,author='',content=''))
|
||||
|
||||
for news_category in soup.findAll('div','newsCategory'):
|
||||
news_cat = self.tag_to_string(news_category.h4,False)
|
||||
handle_category_article(news_cat, news_category.find('h2'), news_category.find('div'))
|
||||
for news_item in news_category.findAll('li'):
|
||||
handle_category_article(news_cat,news_item.h3,news_item)
|
||||
|
||||
return
|
||||
|
||||
# find the div containing the highlight article
|
||||
div_post = soup.find('div','post')
|
||||
if div_post:
|
||||
h1_tag = div_post.h1
|
||||
handle_article(h1_tag,div_post)
|
||||
|
||||
# find the divs containing the rest of the articles
|
||||
div_other = div_post.find('div', { "id" : "categoryOtherPosts" })
|
||||
if div_other:
|
||||
for div_entry in div_other.findAll('div','entry'):
|
||||
h2_tag = div_entry.h2
|
||||
handle_article(h2_tag,div_entry)
|
||||
|
||||
|
||||
|
||||
for page_name,page_title in self.sectionlist:
|
||||
parse_index_page(page_name,page_title)
|
||||
ans.append(page_title)
|
||||
|
||||
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
|
||||
return ans
|
24
resources/recipes/metro_montreal.recipe
Normal file
24
resources/recipes/metro_montreal.recipe
Normal file
@ -0,0 +1,24 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Metro_Montreal(BasicNewsRecipe):
|
||||
|
||||
title = u'M\xe9tro Montr\xe9al'
|
||||
__author__ = 'Jerry Clapperton'
|
||||
description = 'Le quotidien le plus branché sur le monde'
|
||||
language = 'fr'
|
||||
|
||||
oldest_article = 7
|
||||
max_articles_per_feed = 20
|
||||
use_embedded_content = False
|
||||
remove_javascript = True
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
|
||||
extra_css = '.headline {font-size: x-large;} \n .fact {padding-top: 10pt}'
|
||||
|
||||
remove_tags = [dict(attrs={'id':'buttons'}), dict(name=['img', 'style'])]
|
||||
|
||||
feeds = [(u"L'info", u'http://journalmetro.com/linfo/rss'), (u'Monde', u'http://journalmetro.com/monde/rss'), (u'Culture', u'http://journalmetro.com/culture/rss'), (u'Sports', u'http://journalmetro.com/sports/rss'), (u'Paroles', u'http://journalmetro.com/paroles/rss')]
|
||||
|
||||
def print_version(self, url):
|
||||
return url.replace('article', 'ArticlePrint') + '?language=fr'
|
67
resources/recipes/nursingtimes.recipe
Normal file
67
resources/recipes/nursingtimes.recipe
Normal file
@ -0,0 +1,67 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||
'''
|
||||
www.nursingtimes.net
|
||||
'''
|
||||
|
||||
import urllib
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
|
||||
class NursingTimes(BasicNewsRecipe):
|
||||
title = 'Nursing Times'
|
||||
__author__ = 'Darko Miletic'
|
||||
description = 'Nursing practice, NHS and health care news'
|
||||
oldest_article = 8
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
use_embedded_content = False
|
||||
encoding = 'utf-8'
|
||||
publisher = 'emap'
|
||||
category = 'news, health, nursing, UK'
|
||||
language = 'en-UK'
|
||||
needs_subscription = True
|
||||
LOGIN = 'http://www.nursingtimes.net/sign-in'
|
||||
|
||||
conversion_options = {
|
||||
'comments' : description
|
||||
,'tags' : category
|
||||
,'language' : language
|
||||
,'publisher' : publisher
|
||||
}
|
||||
|
||||
def get_browser(self):
|
||||
br = BasicNewsRecipe.get_browser()
|
||||
br.open(self.LOGIN)
|
||||
if self.username is not None and self.password is not None:
|
||||
data = urllib.urlencode({ 'campaigncode' :'0'
|
||||
,'referrer' :''
|
||||
,'security_text':''
|
||||
,'SIemail' :self.username
|
||||
,'passWord' :self.password
|
||||
,'LoginButton.x':'27'
|
||||
,'LoginButton.y':'13'
|
||||
})
|
||||
br.open(self.LOGIN,data)
|
||||
return br
|
||||
|
||||
keep_only_tags = [dict(name='div', attrs={'class':'storytext'})]
|
||||
remove_tags = [
|
||||
dict(name=['object','link','script','iframe'])
|
||||
,dict(name='div',attrs={'id':'comments_form'})
|
||||
]
|
||||
remove_tags_after = dict(name='div',attrs={'id':'comments_form'})
|
||||
|
||||
feeds = [
|
||||
(u'Breaking News', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=1')
|
||||
,(u'Practice', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=512')
|
||||
,(u'Behind the headlines', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=468')
|
||||
,(u'Analysis', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=62')
|
||||
,(u'Acute care news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=5')
|
||||
,(u'Primary vare news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=231')
|
||||
,(u'Mental Health news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=27')
|
||||
,(u'Management news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=32')
|
||||
,(u"Older people's nursing news", u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=181')
|
||||
,(u'Respiratory news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=177')
|
||||
,(u'Wound care news', u'http://www.nursingtimes.net/XmlServers/navsectionRSS.aspx?navsectioncode=182')
|
||||
]
|
||||
|
@ -10,11 +10,18 @@ from calibre import strftime
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
|
||||
def decode(self, src):
|
||||
enc = 'utf-8'
|
||||
if 'iso-8859-1' in src:
|
||||
enc = 'cp1252'
|
||||
return src.decode(enc, 'ignore')
|
||||
|
||||
class NYTimes(BasicNewsRecipe):
|
||||
|
||||
title = 'The New York Times (subscription)'
|
||||
__author__ = 'Kovid Goyal'
|
||||
language = 'en'
|
||||
requires_version = (0, 6, 36)
|
||||
|
||||
description = 'Daily news from the New York Times (subscription version)'
|
||||
timefmt = ' [%a, %b %d, %Y]'
|
||||
@ -27,7 +34,7 @@ class NYTimes(BasicNewsRecipe):
|
||||
'side_tool', 'side_index',
|
||||
'relatedArticles', 'relatedTopics', 'adxSponLink']),
|
||||
dict(name=['script', 'noscript', 'style'])]
|
||||
#encoding = 'cp1252'
|
||||
encoding = decode
|
||||
no_stylesheets = True
|
||||
extra_css = 'h1 {font: sans-serif large;}\n.byline {font:monospace;}'
|
||||
|
||||
@ -48,9 +55,7 @@ class NYTimes(BasicNewsRecipe):
|
||||
return 'NY Times'
|
||||
|
||||
def parse_index(self):
|
||||
self.encoding = 'cp1252'
|
||||
soup = self.index_to_soup('http://www.nytimes.com/pages/todayspaper/index.html')
|
||||
self.encoding = None
|
||||
|
||||
def feed_title(div):
|
||||
return ''.join(div.findAll(text=True, recursive=False)).strip()
|
||||
|
@ -1,31 +1,40 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class NewsandObserver(BasicNewsRecipe):
|
||||
title = u'News and Observer'
|
||||
title = u'Raleigh News & Observer'
|
||||
description = 'News from Raleigh, North Carolina'
|
||||
language = 'en'
|
||||
__author__ = 'Krittika Goyal'
|
||||
oldest_article = 5 #days
|
||||
__author__ = 'Krittika Goyal updated by Walt Anthony'
|
||||
oldest_article = 3 #days
|
||||
max_articles_per_feed = 25
|
||||
summary_length = 150
|
||||
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
|
||||
remove_stylesheets = True
|
||||
remove_tags_before = dict(name='h1', attrs={'id':'story_headline'})
|
||||
remove_tags_after = dict(name='div', attrs={'id':'story_text_remaining'})
|
||||
remove_tags_after = dict(name='div', attrs={'id':'story_text_remaining'})
|
||||
|
||||
|
||||
remove_tags = [
|
||||
dict(name='iframe'),
|
||||
dict(name='div', attrs={'id':['right-rail', 'story_tools']}),
|
||||
dict(name='div', attrs={'id':['right-rail', 'story_tools', 'toolbox', 'toolbar', 'tool', 'shirttail', 'comment_widget', 'story_keywords', 'txtResizeTool']}),
|
||||
dict(name='div', attrs={'class':['Buy-It-Now', 'story_link_share']}),
|
||||
dict(name='ul', attrs={'class':'bold_tabs_nav'}),
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
feeds = [
|
||||
('Cover', 'http://www.newsobserver.com/100/index.rss'),
|
||||
('News', 'http://www.newsobserver.com/102/index.rss'),
|
||||
('Politics', 'http://www.newsobserver.com/105/index.rss'),
|
||||
('Business', 'http://www.newsobserver.com/104/index.rss'),
|
||||
('Sports', 'http://www.newsobserver.com/103/index.rss'),
|
||||
('College Sports', 'http://www.newsobserver.com/119/index.rss'),
|
||||
('Lifestyles', 'http://www.newsobserver.com/106/index.rss'),
|
||||
('Editorials', 'http://www.newsobserver.com/158/index.rss')]
|
||||
('Cover', 'http://www.newsobserver.com/100/index.rss'),
|
||||
('News', 'http://www.newsobserver.com/102/index.rss'),
|
||||
('Politics', 'http://www.newsobserver.com/105/index.rss'),
|
||||
('Business', 'http://www.newsobserver.com/104/index.rss'),
|
||||
('Sports', 'http://www.newsobserver.com/103/index.rss'),
|
||||
('College Sports', 'http://www.newsobserver.com/119/index.rss'),
|
||||
('Lifestyles', 'http://www.newsobserver.com/106/index.rss'),
|
||||
('Editorials', 'http://www.newsobserver.com/158/index.rss')
|
||||
]
|
||||
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||
'''
|
||||
pagina12.com.ar
|
||||
'''
|
||||
|
||||
import time
|
||||
from calibre import strftime
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Pagina12(BasicNewsRecipe):
|
||||
@ -19,6 +21,8 @@ class Pagina12(BasicNewsRecipe):
|
||||
encoding = 'cp1252'
|
||||
use_embedded_content = False
|
||||
language = 'es'
|
||||
remove_empty_feeds = True
|
||||
extra_css = ' body{font-family: sans-serif} '
|
||||
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
@ -47,3 +51,8 @@ class Pagina12(BasicNewsRecipe):
|
||||
def print_version(self, url):
|
||||
return url.replace('http://www.pagina12.com.ar/','http://www.pagina12.com.ar/imprimir/')
|
||||
|
||||
def get_cover_url(self):
|
||||
imgnames = ['tapan.jpg','tapagn.jpg','tapan_gr.jpg','tapagn.jpg','tapagn.jpg','tapan.jpg','tapagn.jpg']
|
||||
weekday = time.localtime().tm_wday
|
||||
return strftime('http://www.pagina12.com.ar/fotos/%Y%m%d/diario/') + imgnames[weekday]
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||
#from random import randint
|
||||
from urllib import quote
|
||||
|
||||
class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||
@ -9,12 +8,11 @@ class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||
__license__ = 'GPL v3'
|
||||
language = 'en'
|
||||
description = 'Sports Illustrated'
|
||||
version = 1
|
||||
version = 3
|
||||
title = u'Sports Illustrated'
|
||||
|
||||
no_stylesheets = True
|
||||
remove_javascript = True
|
||||
#template_css = ''
|
||||
use_embedded_content = False
|
||||
|
||||
INDEX = 'http://sportsillustrated.cnn.com/'
|
||||
@ -22,13 +20,39 @@ class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||
def parse_index(self):
|
||||
answer = []
|
||||
soup = self.index_to_soup(self.INDEX)
|
||||
# Find the link to the current issue on the front page.
|
||||
# Find the link to the current issue on the front page. SI Cover
|
||||
cover = soup.find('img', attrs = {'alt' : 'Read All Articles', 'style' : 'vertical-align:bottom;'})
|
||||
if cover:
|
||||
currentIssue = cover.parent['href']
|
||||
if currentIssue:
|
||||
# Open the index of current issue
|
||||
|
||||
index = self.index_to_soup(currentIssue)
|
||||
self.log('\tLooking for current issue in: ' + currentIssue)
|
||||
# Now let us see if they updated their frontpage
|
||||
nav = index.find('div', attrs = {'class': 'siv_trav_top'})
|
||||
if nav:
|
||||
img = nav.find('img', attrs = {'src': 'http://i.cdn.turner.com/sivault/.element/img/1.0/btn_next_v2.jpg'})
|
||||
if img:
|
||||
parent = img.parent
|
||||
if parent.name == 'a':
|
||||
# They didn't update their frontpage; Load the next issue from here
|
||||
href = self.INDEX + parent['href']
|
||||
index = self.index_to_soup(href)
|
||||
self.log('\tLooking for current issue in: ' + href)
|
||||
|
||||
if index.find('div', 'siv_noArticleMessage'):
|
||||
nav = index.find('div', attrs = {'class': 'siv_trav_top'})
|
||||
if nav:
|
||||
# Their frontpage points to an issue without any articles; Use the previous issue
|
||||
img = nav.find('img', attrs = {'src': 'http://i.cdn.turner.com/sivault/.element/img/1.0/btn_previous_v2.jpg'})
|
||||
if img:
|
||||
parent = img.parent
|
||||
if parent.name == 'a':
|
||||
href = self.INDEX + parent['href']
|
||||
index = self.index_to_soup(href)
|
||||
self.log('\tLooking for current issue in: ' + href)
|
||||
|
||||
|
||||
# Find all articles.
|
||||
list = index.find('div', attrs = {'class' : 'siv_artList'})
|
||||
@ -69,31 +93,26 @@ class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
header = soup.find('div', attrs = {'class' : 'siv_artheader'})
|
||||
if header:
|
||||
# It's an article, prepare a container for the content
|
||||
homeMadeSoup = BeautifulSoup('<html><head></head><body></body></html>')
|
||||
body = homeMadeSoup.find('body')
|
||||
homeMadeSoup = BeautifulSoup('<html><head></head><body></body></html>')
|
||||
body = homeMadeSoup.body
|
||||
|
||||
# Find the date, title and byline
|
||||
temp = header.find('td', attrs = {'class' : 'title'})
|
||||
if temp :
|
||||
date = temp.find('div', attrs = {'class' : 'date'})
|
||||
if date:
|
||||
body.append(date)
|
||||
if temp.h1:
|
||||
body.append(temp.h1)
|
||||
if temp.h2 :
|
||||
body.append(temp.h2)
|
||||
byline = temp.find('div', attrs = {'class' : 'byline'})
|
||||
if byline:
|
||||
body.append(byline)
|
||||
# Find the date, title and byline
|
||||
temp = header.find('td', attrs = {'class' : 'title'})
|
||||
if temp :
|
||||
date = temp.find('div', attrs = {'class' : 'date'})
|
||||
if date:
|
||||
body.append(date)
|
||||
if temp.h1:
|
||||
body.append(temp.h1)
|
||||
if temp.h2 :
|
||||
body.append(temp.h2)
|
||||
byline = temp.find('div', attrs = {'class' : 'byline'})
|
||||
if byline:
|
||||
body.append(byline)
|
||||
|
||||
# Find the content
|
||||
for para in soup.findAll('div', attrs = {'class' : 'siv_artpara'}) :
|
||||
body.append(para)
|
||||
# Find the content
|
||||
for para in soup.findAll('div', attrs = {'class' : 'siv_artpara'}) :
|
||||
body.append(para)
|
||||
|
||||
return homeMadeSoup
|
||||
else :
|
||||
# It's a TOC, just return the whole lot
|
||||
return soup
|
||||
return homeMadeSoup
|
||||
|
||||
|
22
resources/recipes/the_gazette.recipe
Normal file
22
resources/recipes/the_gazette.recipe
Normal file
@ -0,0 +1,22 @@
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class The_Gazette(BasicNewsRecipe):
|
||||
|
||||
cover_url = 'file:///D:/Documents/Pictures/Covers/The_Gazette.jpg'
|
||||
title = u'The Gazette'
|
||||
__author__ = 'Jerry Clapperton'
|
||||
description = 'Montreal news in English'
|
||||
language = 'en_CA'
|
||||
|
||||
oldest_article = 7
|
||||
max_articles_per_feed = 20
|
||||
use_embedded_content = False
|
||||
remove_javascript = True
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
|
||||
keep_only_tags = [dict(name='div', attrs={'id':['storyheader','page1']})]
|
||||
|
||||
extra_css = '.headline {font-size: x-large;} \n .fact {padding-top: 10pt}'
|
||||
|
||||
feeds = [(u'News', u'http://feeds.canada.com/canwest/F297'), (u'Opinion', u'http://feeds.canada.com/canwest/F7383'), (u'Arts', u'http://feeds.canada.com/canwest/F7366'), (u'Life', u'http://rss.canada.com/get/?F6934'), (u'Business', u'http://feeds.canada.com/canwest/F6939'), (u'Travel', u'http://rss.canada.com/get/?F6938'), (u'Health', u'http://feeds.canada.com/canwest/F7397'), (u'Technology', u'http://feeds.canada.com/canwest/F7411')]
|
@ -112,6 +112,9 @@ class LinuxFreeze(Command):
|
||||
|
||||
includes += ['calibre.gui2.convert.'+x.split('/')[-1].rpartition('.')[0] for x in \
|
||||
glob.glob('src/calibre/gui2/convert/*.py')]
|
||||
includes += ['calibre.gui2.catalog.'+x.split('/')[-1].rpartition('.')[0] for x in \
|
||||
glob.glob('src/calibre/gui2/catalog/*.py')]
|
||||
|
||||
|
||||
LOADER = '/tmp/loader.py'
|
||||
open(LOADER, 'wb').write('# This script is never actually used.\nimport sys')
|
||||
|
@ -117,9 +117,12 @@ def prints(*args, **kwargs):
|
||||
try:
|
||||
arg = arg.encode(enc)
|
||||
except UnicodeEncodeError:
|
||||
if not safe_encode:
|
||||
raise
|
||||
arg = repr(arg)
|
||||
try:
|
||||
arg = arg.encode('utf-8')
|
||||
except:
|
||||
if not safe_encode:
|
||||
raise
|
||||
arg = repr(arg)
|
||||
if not isinstance(arg, str):
|
||||
try:
|
||||
arg = str(arg)
|
||||
|
@ -2,7 +2,7 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
__appname__ = 'calibre'
|
||||
__version__ = '0.6.35'
|
||||
__version__ = '0.6.36'
|
||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||
|
||||
import re
|
||||
|
@ -404,7 +404,7 @@ from calibre.devices.hanlin.driver import HANLINV3, HANLINV5, BOOX
|
||||
from calibre.devices.blackberry.driver import BLACKBERRY
|
||||
from calibre.devices.cybook.driver import CYBOOK
|
||||
from calibre.devices.eb600.driver import EB600, COOL_ER, SHINEBOOK, \
|
||||
POCKETBOOK360, GER2, ITALICA, ECLICTO, DBOOK
|
||||
POCKETBOOK360, GER2, ITALICA, ECLICTO, DBOOK, INVESBOOK
|
||||
from calibre.devices.iliad.driver import ILIAD
|
||||
from calibre.devices.irexdr.driver import IREXDR1000
|
||||
from calibre.devices.jetbook.driver import JETBOOK
|
||||
@ -485,6 +485,7 @@ plugins += [
|
||||
ITALICA,
|
||||
ECLICTO,
|
||||
DBOOK,
|
||||
INVESBOOK,
|
||||
BOOX,
|
||||
EB600,
|
||||
README,
|
||||
|
@ -9,23 +9,22 @@ from calibre.devices.usbms.driver import USBMS
|
||||
class BLACKBERRY(USBMS):
|
||||
|
||||
name = 'Blackberry Device Interface'
|
||||
gui_name = 'Blackberry'
|
||||
description = _('Communicate with the Blackberry smart phone.')
|
||||
author = _('Kovid Goyal')
|
||||
supported_platforms = ['windows', 'linux']
|
||||
supported_platforms = ['windows', 'linux', 'osx']
|
||||
|
||||
# Ordered list of supported formats
|
||||
FORMATS = ['mobi', 'prc']
|
||||
|
||||
VENDOR_ID = [0x0fca]
|
||||
PRODUCT_ID = [0x8004, 0x0004]
|
||||
BCD = [0x0200, 0x0107, 0x0201]
|
||||
BCD = [0x0200, 0x0107, 0x0210, 0x0201]
|
||||
|
||||
VENDOR_NAME = 'RIM'
|
||||
WINDOWS_MAIN_MEM = 'BLACKBERRY_SD'
|
||||
|
||||
#OSX_MAIN_MEM = 'Kindle Internal Storage Media'
|
||||
|
||||
MAIN_MEMORY_VOLUME_LABEL = 'Blackberry SD Card'
|
||||
|
||||
EBOOK_DIR_MAIN = 'ebooks'
|
||||
EBOOK_DIR_MAIN = 'eBooks'
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
@ -154,7 +154,7 @@ class ECLICTO(EB600):
|
||||
name = 'eClicto Device Interface'
|
||||
gui_name = 'eClicto'
|
||||
|
||||
FORMATS = ['epub', 'pdf', 'txt']
|
||||
FORMATS = ['epub', 'pdf', 'htm', 'html', 'txt']
|
||||
|
||||
VENDOR_NAME = 'ECLICTO'
|
||||
WINDOWS_MAIN_MEM = 'EBOOK'
|
||||
@ -173,3 +173,14 @@ class DBOOK(EB600):
|
||||
VENDOR_NAME = 'INFINITY'
|
||||
WINDOWS_MAIN_MEM = 'AIRIS_DBOOK'
|
||||
WINDOWS_CARD_A_MEM = 'AIRIS_DBOOK'
|
||||
|
||||
class INVESBOOK(EB600):
|
||||
|
||||
name = 'Inves Book Device Interface'
|
||||
gui_name = 'Inves Book 600'
|
||||
|
||||
FORMATS = ['epub', 'mobi', 'prc', 'fb2', 'html', 'pdf', 'rtf', 'txt']
|
||||
|
||||
VENDOR_NAME = 'INVES_E6'
|
||||
WINDOWS_MAIN_MEM = '00INVES_E600'
|
||||
WINDOWS_CARD_A_MEM = '00INVES_E600'
|
||||
|
@ -23,7 +23,7 @@ class N516(USBMS):
|
||||
|
||||
VENDOR_ID = [0x0525]
|
||||
PRODUCT_ID = [0xa4a5]
|
||||
BCD = [0x323]
|
||||
BCD = [0x323, 0x326]
|
||||
|
||||
VENDOR_NAME = 'INGENIC'
|
||||
WINDOWS_MAIN_MEM = '_FILE-STOR_GADGE'
|
||||
|
@ -71,7 +71,7 @@ int do_mount(const char *dev, const char *mp) {
|
||||
#ifdef __NetBSD__
|
||||
execlp("mount_msdos", "mount_msdos", "-u", uids, "-g", gids, "-o", options, dev, mp, NULL);
|
||||
#else
|
||||
execlp("mount", "mount", "-t", "vfat", "-o", options, dev, mp, NULL);
|
||||
execlp("mount", "mount", "-t", "auto", "-o", options, dev, mp, NULL);
|
||||
#endif
|
||||
errsv = errno;
|
||||
fprintf(stderr, "Failed to mount with error: %s\n", strerror(errsv));
|
||||
|
@ -808,6 +808,8 @@ class Device(DeviceConfig, DevicePlugin):
|
||||
ext = os.path.splitext(fname)[1]
|
||||
|
||||
from calibre.library.save_to_disk import get_components
|
||||
if not isinstance(template, unicode):
|
||||
template = template.decode('utf-8')
|
||||
extra_components = get_components(template, mdata, fname)
|
||||
if not extra_components:
|
||||
extra_components.append(sanitize(self.filename_callback(fname,
|
||||
|
@ -24,7 +24,7 @@ class DRMError(ValueError):
|
||||
|
||||
BOOK_EXTENSIONS = ['lrf', 'rar', 'zip', 'rtf', 'lit', 'txt', 'htm', 'xhtm',
|
||||
'html', 'xhtml', 'pdf', 'pdb', 'prc', 'mobi', 'azw', 'doc',
|
||||
'epub', 'fb2', 'djvu', 'lrx', 'cbr', 'cbz', 'oebzip',
|
||||
'epub', 'fb2', 'djvu', 'lrx', 'cbr', 'cbz', 'cbc', 'oebzip',
|
||||
'rb', 'imp', 'odt', 'chm', 'tpz', 'azw1', 'pml']
|
||||
|
||||
class HTMLRenderer(object):
|
||||
|
@ -340,6 +340,9 @@ class ComicInput(InputFormatPlugin):
|
||||
%stream.name)
|
||||
for line in open('comics.txt',
|
||||
'rb').read().decode('utf-8').splitlines():
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
fname, title = line.partition(':')[0], line.partition(':')[-1]
|
||||
fname = os.path.join(tdir, *fname.split('/'))
|
||||
if not title:
|
||||
|
@ -63,6 +63,7 @@ def get_social_metadata(title, authors, publisher, isbn):
|
||||
mi.tags = []
|
||||
for x in tags:
|
||||
mi.tags.extend([y.strip() for y in x.split('/')])
|
||||
mi.tags = [x.replace(',', ';') for x in mi.tags]
|
||||
comments = root.find('.//%s/%s'%(AWS('EditorialReview'),
|
||||
AWS('Content')))
|
||||
if comments is not None:
|
||||
|
@ -143,7 +143,7 @@ class ResultList(list):
|
||||
except:
|
||||
report(verbose)
|
||||
tags = []
|
||||
return tags
|
||||
return [x.replace(',', ';') for x in tags]
|
||||
|
||||
def get_publisher(self, entry, verbose):
|
||||
try:
|
||||
|
@ -17,6 +17,8 @@ from calibre.ebooks.mobi import MobiError
|
||||
from calibre.ebooks.mobi.writer import rescale_image, MAX_THUMB_DIMEN
|
||||
from calibre.ebooks.mobi.langcodes import iana2mobi
|
||||
|
||||
import struct
|
||||
|
||||
class StreamSlicer(object):
|
||||
|
||||
def __init__(self, stream, start=0, stop=None):
|
||||
@ -72,25 +74,54 @@ class StreamSlicer(object):
|
||||
return stream.write(value)
|
||||
raise TypeError("stream indices must be integers")
|
||||
|
||||
def update(self, data_blocks):
|
||||
# Rewrite the stream
|
||||
stream = self._stream
|
||||
base = self.start
|
||||
stream.seek(base)
|
||||
self._stream.truncate(base)
|
||||
for block in data_blocks:
|
||||
stream.write(block)
|
||||
|
||||
def truncate(self, value):
|
||||
self._stream.truncate(value)
|
||||
|
||||
class MetadataUpdater(object):
|
||||
def __init__(self, stream):
|
||||
self.stream = stream
|
||||
data = self.data = StreamSlicer(stream)
|
||||
type = self.type = data[60:68]
|
||||
self.type = data[60:68]
|
||||
|
||||
if self.type != "BOOKMOBI":
|
||||
return
|
||||
|
||||
self.nrecs, = unpack('>H', data[76:78])
|
||||
record0 = self.record0 = self.record(0)
|
||||
self.encryption_type, = unpack('>H', record0[12:14])
|
||||
codepage, = unpack('>I', record0[28:32])
|
||||
self.codec = 'utf-8' if codepage == 65001 else 'cp1252'
|
||||
image_base, = unpack('>I', record0[108:112])
|
||||
flags, = unpack('>I', record0[128:132])
|
||||
flags, = self.flags, = unpack('>I', record0[128:132])
|
||||
have_exth = self.have_exth = (flags & 0x40) != 0
|
||||
self.cover_record = self.thumbnail_record = None
|
||||
self.timestamp = None
|
||||
|
||||
self.pdbrecords = self.get_pdbrecords()
|
||||
if not have_exth:
|
||||
return
|
||||
self.create_exth()
|
||||
|
||||
# Fetch timestamp, cover_record, thumbnail_record
|
||||
self.fetchEXTHFields()
|
||||
|
||||
def fetchEXTHFields(self):
|
||||
stream = self.stream
|
||||
record0 = self.record0
|
||||
|
||||
# 20:24 = mobiHeaderLength, 16=PDBHeader size
|
||||
exth_off = unpack('>I', record0[20:24])[0] + 16 + record0.start
|
||||
image_base, = unpack('>I', record0[108:112])
|
||||
|
||||
# Fetch EXTH block
|
||||
exth = self.exth = StreamSlicer(stream, exth_off, record0.stop)
|
||||
nitems, = unpack('>I', exth[8:12])
|
||||
pos = 12
|
||||
@ -109,6 +140,130 @@ class MetadataUpdater(object):
|
||||
rindex, = self.thumbnail_rindex, = unpack('>I', content)
|
||||
self.thumbnail_record = self.record(rindex + image_base)
|
||||
|
||||
def patch(self, off, new_record0):
|
||||
# Save the current size of each record
|
||||
record_sizes = [len(new_record0)]
|
||||
for i in range(1,self.nrecs-1):
|
||||
record_sizes.append(self.pdbrecords[i+1][0]-self.pdbrecords[i][0])
|
||||
# And the last one
|
||||
record_sizes.append(self.data.stop - self.pdbrecords[self.nrecs-1][0])
|
||||
|
||||
# pdbrecord[0] is the offset of record0. It will not change
|
||||
# record1 offset will be offset of record0 + len(new_record0)
|
||||
updated_pdbrecords = [self.pdbrecords[0][0]]
|
||||
record0_offset = self.pdbrecords[0][0]
|
||||
updated_offset = record0_offset + len(new_record0)
|
||||
|
||||
for i in range(1,self.nrecs-1):
|
||||
updated_pdbrecords.append(updated_offset)
|
||||
updated_offset += record_sizes[i]
|
||||
# Update the last pdbrecord
|
||||
updated_pdbrecords.append(updated_offset)
|
||||
|
||||
# Read in current records 1 to last
|
||||
data_blocks = [new_record0]
|
||||
for i in range(1,self.nrecs):
|
||||
data_blocks.append(self.data[self.pdbrecords[i][0]:self.pdbrecords[i][0] + record_sizes[i]])
|
||||
|
||||
# Rewrite the stream
|
||||
self.record0.update(data_blocks)
|
||||
|
||||
# Rewrite the pdbrecords
|
||||
self.update_pdbrecords(updated_pdbrecords)
|
||||
|
||||
# Truncate if necessary
|
||||
if (updated_pdbrecords[-1] + record_sizes[-1]) < self.data.stop:
|
||||
self.data.truncate(updated_pdbrecords[-1] + record_sizes[-1])
|
||||
else:
|
||||
self.data.stop = updated_pdbrecords[-1] + record_sizes[-1]
|
||||
|
||||
def patchSection(self, section, new):
|
||||
off = self.pdbrecords[section][0]
|
||||
self.patch(off, new)
|
||||
|
||||
def create_exth(self, exth=None):
|
||||
# Add an EXTH block to record 0, rewrite the stream
|
||||
# self.hexdump(self.record0)
|
||||
|
||||
# Fetch the title
|
||||
title_offset, = struct.unpack('>L', self.record0[0x54:0x58])
|
||||
title_length, = struct.unpack('>L', self.record0[0x58:0x5c])
|
||||
title_in_file, = struct.unpack('%ds' % (title_length), self.record0[title_offset:title_offset + title_length])
|
||||
|
||||
# Adjust length to accommodate PrimaryINDX if necessary
|
||||
mobi_header_length, = unpack('>L', self.record0[0x14:0x18])
|
||||
if mobi_header_length == 0xe4:
|
||||
# Patch mobi_header_length to 0xE8
|
||||
self.record0[0x17] = "\xe8"
|
||||
self.record0[0xf4:0xf8] = pack('>L', 0xFFFFFFFF)
|
||||
mobi_header_length = 0xe8
|
||||
|
||||
# Set EXTH flag (0x40)
|
||||
self.record0[0x80:0x84] = pack('>L', self.flags|0x40)
|
||||
|
||||
if not exth:
|
||||
# Construct an empty EXTH block
|
||||
pad = '\0' * 4
|
||||
exth = ['EXTH', pack('>II', 12, 0), pad]
|
||||
exth = ''.join(exth)
|
||||
|
||||
# Update title_offset
|
||||
self.record0[0x54:0x58] = pack('>L', 0x10 + mobi_header_length + len(exth))
|
||||
|
||||
# Create an updated Record0
|
||||
new_record0 = StringIO()
|
||||
new_record0.write(self.record0[:0x10 + mobi_header_length])
|
||||
new_record0.write(exth)
|
||||
new_record0.write(title_in_file)
|
||||
|
||||
# Pad to a 4-byte boundary
|
||||
trail = len(new_record0.getvalue()) % 4
|
||||
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
||||
new_record0.write(pad)
|
||||
|
||||
#self.hexdump(new_record0.getvalue())
|
||||
|
||||
# Rebuild the stream, update the pdbrecords pointers
|
||||
self.patchSection(0,new_record0.getvalue())
|
||||
|
||||
# Update record0
|
||||
self.record0 = self.record(0)
|
||||
|
||||
def hexdump(self, src, length=16):
|
||||
# Diagnostic
|
||||
FILTER=''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])
|
||||
N=0; result=''
|
||||
while src:
|
||||
s,src = src[:length],src[length:]
|
||||
hexa = ' '.join(["%02X"%ord(x) for x in s])
|
||||
s = s.translate(FILTER)
|
||||
result += "%04X %-*s %s\n" % (N, length*3, hexa, s)
|
||||
N+=length
|
||||
print result
|
||||
|
||||
def get_pdbrecords(self):
|
||||
pdbrecords = []
|
||||
for i in xrange(self.nrecs):
|
||||
offset, a1,a2,a3,a4 = struct.unpack('>LBBBB', self.data[78+i*8:78+i*8+8])
|
||||
flags, val = a1, a2<<16|a3<<8|a4
|
||||
pdbrecords.append( [offset, flags, val] )
|
||||
return pdbrecords
|
||||
|
||||
def update_pdbrecords(self, updated_pdbrecords):
|
||||
for (i, pdbrecord) in enumerate(updated_pdbrecords):
|
||||
self.data[78+i*8:78+i*8 + 4] = pack('>L',pdbrecord)
|
||||
|
||||
# Refresh local copy
|
||||
self.pdbrecords = self.get_pdbrecords()
|
||||
|
||||
def dump_pdbrecords(self):
|
||||
# Diagnostic
|
||||
print "MetadataUpdater.dump_pdbrecords()"
|
||||
print "%10s %10s %10s" % ("offset","flags","val")
|
||||
for i in xrange(len(self.pdbrecords)):
|
||||
pdbrecord = self.pdbrecords[i]
|
||||
print "%10X %10X %10X" % (pdbrecord[0], pdbrecord[1], pdbrecord[2])
|
||||
|
||||
def record(self, n):
|
||||
if n >= self.nrecs:
|
||||
raise ValueError('non-existent record %r' % n)
|
||||
@ -120,6 +275,10 @@ class MetadataUpdater(object):
|
||||
return StreamSlicer(self.stream, start, stop)
|
||||
|
||||
def update(self, mi):
|
||||
if self.type != "BOOKMOBI":
|
||||
raise MobiError("Setting metadata only supported for MOBI files of type 'BOOK'.\n"
|
||||
"\tThis is a '%s' file of type '%s'" % (self.type[0:4], self.type[4:8]))
|
||||
|
||||
recs = []
|
||||
try:
|
||||
from calibre.ebooks.conversion.config import load_defaults
|
||||
@ -142,7 +301,6 @@ class MetadataUpdater(object):
|
||||
if mi.tags:
|
||||
subjects = '; '.join(mi.tags)
|
||||
recs.append((105, subjects.encode(self.codec, 'replace')))
|
||||
|
||||
if mi.pubdate:
|
||||
recs.append((106, str(mi.pubdate).encode(self.codec, 'replace')))
|
||||
elif mi.timestamp:
|
||||
@ -151,15 +309,16 @@ class MetadataUpdater(object):
|
||||
recs.append((106, self.timestamp))
|
||||
else:
|
||||
recs.append((106, str(datetime.now()).encode(self.codec, 'replace')))
|
||||
|
||||
if self.cover_record is not None:
|
||||
recs.append((201, pack('>I', self.cover_rindex)))
|
||||
recs.append((203, pack('>I', 0)))
|
||||
if self.thumbnail_record is not None:
|
||||
recs.append((202, pack('>I', self.thumbnail_rindex)))
|
||||
exth = StringIO()
|
||||
|
||||
if getattr(self, 'encryption_type', -1) != 0:
|
||||
raise MobiError('Setting metadata in DRMed MOBI files is not supported.')
|
||||
|
||||
exth = StringIO()
|
||||
for code, data in recs:
|
||||
exth.write(pack('>II', code, len(data) + 8))
|
||||
exth.write(data)
|
||||
@ -168,17 +327,16 @@ class MetadataUpdater(object):
|
||||
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
||||
exth = ['EXTH', pack('>II', len(exth) + 12, len(recs)), exth, pad]
|
||||
exth = ''.join(exth)
|
||||
title = (mi.title or _('Unknown')).encode(self.codec, 'replace')
|
||||
|
||||
if getattr(self, 'exth', None) is None:
|
||||
raise MobiError('No existing EXTH record. Cannot update metadata.')
|
||||
title_off = (self.exth.start - self.record0.start) + len(exth)
|
||||
title_len = len(title)
|
||||
trail = len(self.exth) - len(exth) - len(title)
|
||||
if trail < 0:
|
||||
raise MobiError("Insufficient space to update metadata")
|
||||
self.exth[:] = ''.join([exth, title, '\0' * trail])
|
||||
self.record0[84:92] = pack('>II', title_off, title_len)
|
||||
|
||||
self.record0[92:96] = iana2mobi(mi.language)
|
||||
self.create_exth(exth)
|
||||
|
||||
# Fetch updated timestamp, cover_record, thumbnail_record
|
||||
self.fetchEXTHFields()
|
||||
|
||||
if mi.cover_data[1] or mi.cover:
|
||||
try:
|
||||
data = mi.cover_data[1] if mi.cover_data[1] else open(mi.cover, 'rb').read()
|
||||
|
@ -164,6 +164,8 @@ class MobiMLizer(object):
|
||||
parent = bstate.nested[-1] if bstate.nested else bstate.body
|
||||
indent = istate.indent
|
||||
left = istate.left
|
||||
if isinstance(indent, basestring):
|
||||
indent = 0
|
||||
if indent < 0 and abs(indent) < left:
|
||||
left += indent
|
||||
indent = 0
|
||||
|
@ -760,6 +760,8 @@ class Manifest(object):
|
||||
|
||||
def _parse_xml(self, data):
|
||||
data = xml_to_unicode(data, strip_encoding_pats=True)[0]
|
||||
if not data:
|
||||
return None
|
||||
parser = etree.XMLParser(recover=True)
|
||||
try:
|
||||
return etree.fromstring(data, parser=parser)
|
||||
|
@ -40,6 +40,8 @@ class Image(Element):
|
||||
map(float, map(img.get, ('top', 'left', 'rwidth', 'rheight', 'iwidth',
|
||||
'iheight')))
|
||||
self.src = img.get('src')
|
||||
self.bottom = self.top + self.height
|
||||
self.right = self.left + self.width
|
||||
|
||||
|
||||
class Text(Element):
|
||||
@ -151,16 +153,17 @@ class Column(object):
|
||||
def collect_stats(self):
|
||||
if len(self.elements) > 1:
|
||||
gaps = [self.elements[i+1].top - self.elements[i].bottom for i in
|
||||
range(len(0, len(self.elements)-1))]
|
||||
range(0, len(self.elements)-1)]
|
||||
self.average_line_separation = sum(gaps)/len(gaps)
|
||||
for i, elem in enumerate(self.elements):
|
||||
left_margin = elem.left - self.left
|
||||
elem.indent_fraction = left_margin/self.width
|
||||
elem.width_fraction = elem.width/self.width
|
||||
if i == 0:
|
||||
elem.top_gap = None
|
||||
elem.top_gap_ratio = None
|
||||
else:
|
||||
elem.top_gap = self.elements[i-1].bottom - elem.top
|
||||
elem.top_gap_ratio = (self.elements[i-1].bottom -
|
||||
elem.top)/self.average_line_separation
|
||||
|
||||
def previous_element(self, idx):
|
||||
if idx == 0:
|
||||
@ -168,7 +171,16 @@ class Column(object):
|
||||
return self.elements[idx-1]
|
||||
|
||||
|
||||
class Box(list):
|
||||
|
||||
def __init__(self, type='p'):
|
||||
self.type = type
|
||||
|
||||
class ImageBox(Box):
|
||||
|
||||
def __init__(self, img):
|
||||
Box.__init__(self, type='img')
|
||||
self.img = img
|
||||
|
||||
class Region(object):
|
||||
|
||||
@ -203,7 +215,7 @@ class Region(object):
|
||||
|
||||
@property
|
||||
def is_empty(self):
|
||||
return len(self.elements) == 0
|
||||
return len(self.columns) == 0
|
||||
|
||||
def collect_stats(self):
|
||||
for column in self.columns:
|
||||
@ -220,6 +232,32 @@ class Region(object):
|
||||
for x in self.columns:
|
||||
self.elements.extend(x)
|
||||
|
||||
self.boxes = [Box()]
|
||||
for i, elem in enumerate(self.elements):
|
||||
if isinstance(elem, Image):
|
||||
self.boxes.append(ImageBox(elem))
|
||||
img = Interval(elem.left, elem.right)
|
||||
for j in range(i+1, len(self.elements)):
|
||||
t = self.elements[j]
|
||||
if not isinstance(t, Text):
|
||||
break
|
||||
ti = Interval(t.left, t.right)
|
||||
if not ti.centered_in(img):
|
||||
break
|
||||
self.boxes[-1].append(t)
|
||||
self.boxes.append(Box())
|
||||
else:
|
||||
is_indented = False
|
||||
if i+1 < len(self.elements):
|
||||
indent_diff = elem.indent_fraction - \
|
||||
self.elements[i+1].indent_fraction
|
||||
if indent_diff > 0.05:
|
||||
is_indented = True
|
||||
if elem.top_gap_ratio > 1.2 or is_indented:
|
||||
self.boxes.append(Box())
|
||||
self.boxes[-1].append(elem)
|
||||
|
||||
|
||||
|
||||
class Page(object):
|
||||
|
||||
@ -311,10 +349,10 @@ class Page(object):
|
||||
columns = self.sort_into_columns(x, elems)
|
||||
processed.update(elems)
|
||||
if not current_region.contains(columns):
|
||||
self.regions.append(self.current_region)
|
||||
self.regions.append(current_region)
|
||||
current_region = Region()
|
||||
current_region.add(columns)
|
||||
if not self.current_region.is_empty():
|
||||
if not current_region.is_empty:
|
||||
self.regions.append(current_region)
|
||||
|
||||
def sort_into_columns(self, elem, neighbors):
|
||||
|
@ -14,12 +14,13 @@ from PyQt4.Qt import QWidget
|
||||
|
||||
class PluginWidget(QWidget,Ui_Form):
|
||||
|
||||
TITLE = _('E-book Options')
|
||||
TITLE = _('E-book options')
|
||||
HELP = _('Options specific to')+' EPUB/MOBI '+_('output')
|
||||
OPTION_FIELDS = [('exclude_genre','\[[\w ]*\]'),
|
||||
('exclude_tags','~,'+_('Catalog')),
|
||||
('read_tag','+'),
|
||||
('note_tag','*')]
|
||||
('note_tag','*'),
|
||||
('numbers_as_text', False),
|
||||
('read_tag','+')]
|
||||
|
||||
# Output synced to the connected device?
|
||||
sync_enabled = True
|
||||
@ -33,21 +34,30 @@ class PluginWidget(QWidget,Ui_Form):
|
||||
|
||||
def initialize(self, name):
|
||||
self.name = name
|
||||
# Restore options from last use here
|
||||
# Update dialog fields from stored options
|
||||
for opt in self.OPTION_FIELDS:
|
||||
opt_value = gprefs.get(self.name + '_' + opt[0], opt[1])
|
||||
getattr(self, opt[0]).setText(opt_value)
|
||||
if opt[0] == 'numbers_as_text':
|
||||
getattr(self, opt[0]).setChecked(opt_value)
|
||||
else:
|
||||
getattr(self, opt[0]).setText(opt_value)
|
||||
|
||||
def options(self):
|
||||
# Save/return the current options
|
||||
# exclude_genre stores literally
|
||||
# numbers_as_text stores as True/False
|
||||
# others store as lists
|
||||
opts_dict = {}
|
||||
for opt in self.OPTION_FIELDS:
|
||||
opt_value = unicode(getattr(self, opt[0]).text())
|
||||
if opt[0] == 'numbers_as_text':
|
||||
opt_value = getattr(self,opt[0]).isChecked()
|
||||
else:
|
||||
opt_value = unicode(getattr(self, opt[0]).text())
|
||||
gprefs.set(self.name + '_' + opt[0], opt_value)
|
||||
if opt[0] != 'exclude_genre':
|
||||
if opt[0] == 'exclude_genre' or 'numbers_as_text':
|
||||
opts_dict[opt[0]] = opt_value
|
||||
else:
|
||||
opt_value = opt_value.split(',')
|
||||
opts_dict[opt[0]] = opt_value
|
||||
|
||||
opts_dict['output_profile'] = [load_defaults('page_setup')['output_profile']]
|
||||
|
||||
|
||||
|
@ -69,6 +69,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="exclude_genre">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip comment here"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
@ -82,10 +89,10 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="exclude_genre">
|
||||
<property name="toolTip">
|
||||
<string extracomment="Tooltip comment here"/>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="numbers_as_text">
|
||||
<property name="text">
|
||||
<string>Sort numbers as text</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -7,7 +7,7 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
|
||||
from calibre.constants import islinux
|
||||
from calibre.constants import islinux, isosx
|
||||
|
||||
class Notifier(object):
|
||||
|
||||
@ -85,8 +85,52 @@ class QtNotifier(Notifier):
|
||||
def __call__(self, body, summary=None, replaces_id=None, timeout=0):
|
||||
timeout, body, summary = self.get_msg_parms(timeout, body, summary)
|
||||
if self.systray is not None:
|
||||
self.systray.showMessage(summary, body, self.systray.Information,
|
||||
timeout)
|
||||
try:
|
||||
hide = False
|
||||
try:
|
||||
if not isinstance(body, unicode):
|
||||
body = body.decode('utf-8')
|
||||
if isosx and not self.systray.isVisible():
|
||||
self.systray.show()
|
||||
hide = True
|
||||
self.systray.showMessage(summary, body, self.systray.Information,
|
||||
timeout)
|
||||
finally:
|
||||
if hide:
|
||||
self.systray.hide()
|
||||
except:
|
||||
pass
|
||||
|
||||
class GrowlNotifier(Notifier):
|
||||
|
||||
notification_type = 'All notifications'
|
||||
|
||||
def __init__(self):
|
||||
try:
|
||||
import Growl
|
||||
self.icon = Growl.Image.imageFromPath(I('notify.png'))
|
||||
self.growl = Growl.GrowlNotifier(applicationName='calibre',
|
||||
applicationIcon=self.icon, notifications=[self.notification_type])
|
||||
self.growl.register()
|
||||
self.ok = True
|
||||
except:
|
||||
self.ok = False
|
||||
|
||||
def encode(self, msg):
|
||||
if isinstance(msg, unicode):
|
||||
msg = msg.encode('utf-8')
|
||||
return msg
|
||||
|
||||
def __call__(self, body, summary=None, replaces_id=None, timeout=0):
|
||||
timeout, body, summary = self.get_msg_parms(timeout, body, summary)
|
||||
if self.ok:
|
||||
try:
|
||||
self.growl.notify(self.notification_type, self.encode(summary),
|
||||
self.encode(body))
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
def get_notifier(systray=None):
|
||||
ans = None
|
||||
@ -96,6 +140,10 @@ def get_notifier(systray=None):
|
||||
ans = FDONotifier()
|
||||
if not ans.ok:
|
||||
ans = None
|
||||
#if isosx:
|
||||
# ans = GrowlNotifier()
|
||||
# if not ans.ok:
|
||||
# ans = None
|
||||
if ans is None:
|
||||
ans = QtNotifier(systray)
|
||||
if not ans.ok:
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -670,8 +670,6 @@ def command_catalog(args, dbpath):
|
||||
print
|
||||
print >>sys.stderr, _('Error: You must specify a catalog output file')
|
||||
return 1
|
||||
if opts.verbose:
|
||||
log("library.cli:command_catalog dispatching to plugin %s" % plugin.name)
|
||||
if opts.ids:
|
||||
opts.ids = [int(id) for id in opts.ids.split(',')]
|
||||
|
||||
|
@ -1415,9 +1415,10 @@ class LibraryDatabase2(LibraryDatabase):
|
||||
if matches:
|
||||
tag_matches = self.data.get_matches('tags', _('Catalog'))
|
||||
matches = matches.intersection(tag_matches)
|
||||
db_id = None
|
||||
db_id, existing = None, False
|
||||
if matches:
|
||||
db_id = list(matches)[0]
|
||||
existing = True
|
||||
if db_id is None:
|
||||
obj = self.conn.execute('INSERT INTO books(title, author_sort) VALUES (?, ?)',
|
||||
(title, 'calibre'))
|
||||
@ -1433,6 +1434,10 @@ class LibraryDatabase2(LibraryDatabase):
|
||||
if not hasattr(path, 'read'):
|
||||
stream.close()
|
||||
self.conn.commit()
|
||||
if existing:
|
||||
t = datetime.utcnow()
|
||||
self.set_timestamp(db_id, t, notify=False)
|
||||
self.set_pubdate(db_id, t, notify=False)
|
||||
self.data.refresh_ids(self, [db_id]) # Needed to update format list and size
|
||||
return db_id
|
||||
|
||||
|
@ -714,6 +714,10 @@ class LibraryServer(object):
|
||||
|
||||
book, books = MarkupTemplate(self.MOBILE_BOOK), []
|
||||
for record in items[(start-1):(start-1)+num]:
|
||||
if record[13] is None:
|
||||
record[13] = ''
|
||||
if record[6] is None:
|
||||
record[6] = 0
|
||||
aus = record[2] if record[2] else __builtin__._('Unknown')
|
||||
authors = '|'.join([i.replace('|', ',') for i in aus.split(',')])
|
||||
record[10] = fmt_sidx(float(record[10]))
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -4,9 +4,9 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.6.35\n"
|
||||
"POT-Creation-Date: 2010-01-22 16:20+MST\n"
|
||||
"PO-Revision-Date: 2010-01-22 16:20+MST\n"
|
||||
"Project-Id-Version: calibre 0.6.36\n"
|
||||
"POT-Creation-Date: 2010-01-25 10:46+MST\n"
|
||||
"PO-Revision-Date: 2010-01-25 10:46+MST\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -28,7 +28,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:417
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
|
||||
@ -125,12 +125,12 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:715
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1143
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1180
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1547
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1552
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1554
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1670
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||
#: /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:111
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||
@ -396,11 +396,11 @@ msgstr ""
|
||||
msgid "Communicate with the Binatone Readme eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
msgid "Communicate with the Blackberry smart phone."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90
|
||||
msgid "Kovid Goyal"
|
||||
@ -589,7 +589,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1068
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1072
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1447
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1452
|
||||
msgid "News"
|
||||
msgstr ""
|
||||
|
||||
@ -704,8 +704,8 @@ msgstr ""
|
||||
msgid "Apply no processing to the image"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:441
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452
|
||||
msgid "Page"
|
||||
msgstr ""
|
||||
|
||||
@ -1389,7 +1389,7 @@ msgstr ""
|
||||
msgid "Rights"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:78
|
||||
msgid "EDITORIAL REVIEW"
|
||||
msgstr ""
|
||||
|
||||
@ -2201,7 +2201,14 @@ msgid "Fields to include in output:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
||||
msgid "E-book Options"
|
||||
msgid "E-book options"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:256
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1430
|
||||
msgid "Catalog"
|
||||
msgstr ""
|
||||
|
||||
#:
|
||||
@ -3115,7 +3122,7 @@ msgid "<p>For example, to match all h2 tags that have class=\"chapter\", set tag
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:132
|
||||
msgid "No details available."
|
||||
msgstr ""
|
||||
|
||||
@ -6584,12 +6591,19 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:244
|
||||
msgid ""
|
||||
"Save the output from different stages of the conversion pipeline to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring.\n"
|
||||
"Default: '%default'None\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:253
|
||||
msgid ""
|
||||
"Regex describing tags to exclude as genres.\n"
|
||||
"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:249
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:258
|
||||
msgid ""
|
||||
"Comma-separated list of tag words indicating book should be excluded from output. Case-insensitive.\n"
|
||||
"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n"
|
||||
@ -6597,21 +6611,21 @@ msgid ""
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:256
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:265
|
||||
msgid ""
|
||||
"Tag indicating book has been read.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:270
|
||||
msgid ""
|
||||
"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:276
|
||||
msgid ""
|
||||
"Specifies the output profile. In some cases, an output profile is required to optimize the catalog for the device. For example, 'kindle' or 'kindle_dx' creates a structured Table of Contents with Sections and Articles.\n"
|
||||
"Default: '%default'\n"
|
||||
@ -6826,7 +6840,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:658
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:482
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:484
|
||||
msgid "Show detailed output information. Useful for debugging"
|
||||
msgstr ""
|
||||
|
||||
@ -6846,32 +6860,27 @@ msgid ""
|
||||
"For help on an individual command: %%prog command --help\n"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1429
|
||||
msgid "Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1691
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1696
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1725
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1737
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742
|
||||
msgid "Compacting database"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1830
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1835
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1872
|
||||
msgid "Checking for missing files."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1894
|
||||
msgid "Checked id"
|
||||
msgstr ""
|
||||
|
||||
@ -6967,7 +6976,7 @@ msgstr ""
|
||||
msgid "Replace whitespace with underscores."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:255
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:256
|
||||
msgid "Requested formats not available"
|
||||
msgstr ""
|
||||
|
||||
@ -6975,14 +6984,14 @@ msgstr ""
|
||||
msgid "Password to access your calibre library. Username is "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:856
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:860
|
||||
msgid ""
|
||||
"[options]\n"
|
||||
"\n"
|
||||
"Start the calibre content server."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:858
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:862
|
||||
msgid "Path to the library folder to serve with the content server"
|
||||
msgstr ""
|
||||
|
||||
@ -7055,7 +7064,7 @@ msgstr ""
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:72
|
||||
msgid "Working..."
|
||||
msgstr ""
|
||||
|
||||
@ -7185,75 +7194,75 @@ msgstr ""
|
||||
msgid "Unknown News Source"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:528
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:533
|
||||
msgid "The \"%s\" recipe needs a username and password."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:614
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:619
|
||||
msgid "Download finished"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:616
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:621
|
||||
msgid "Failed to download the following articles:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:622
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:627
|
||||
msgid "Failed to download parts of the following articles:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:624
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:629
|
||||
msgid " from "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:626
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:631
|
||||
msgid "\tFailed links:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
|
||||
msgid "Could not fetch article. Run with -vv to see the reason"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:728
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:733
|
||||
msgid "Fetching feeds..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:733
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:738
|
||||
msgid "Got feeds from index page"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:739
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744
|
||||
msgid "Trying to download cover..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:797
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802
|
||||
msgid "Starting download [%d thread(s)]..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:813
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:818
|
||||
msgid "Feeds downloaded to %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:823
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:828
|
||||
msgid "Could not download cover: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:835
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:840
|
||||
msgid "Downloading cover from %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:978
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:983
|
||||
msgid "Untitled Article"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1049
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1054
|
||||
msgid "Article downloaded: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1060
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1065
|
||||
msgid "Article download failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1077
|
||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1082
|
||||
msgid "Fetching feed"
|
||||
msgstr ""
|
||||
|
||||
@ -7272,46 +7281,46 @@ msgstr ""
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:459
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:461
|
||||
msgid ""
|
||||
"%prog URL\n"
|
||||
"\n"
|
||||
"Where URL is for example http://google.com"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:462
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:464
|
||||
msgid "Base directory into which URL is saved. Default is %default"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:465
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:467
|
||||
msgid "Timeout in seconds to wait for a response from the server. Default: %default s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:468
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:470
|
||||
msgid "Maximum number of levels to recurse i.e. depth of links to follow. Default %default"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:471
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:473
|
||||
msgid "The maximum number of files to download. This only applies to files from <a href> tags. Default is %default"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:473
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:475
|
||||
msgid "Minimum interval in seconds between consecutive fetches. Default is %default s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:475
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:477
|
||||
msgid "The character encoding for the websites you are trying to download. The default is to try and guess the encoding."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:477
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:479
|
||||
msgid "Only links that match this regular expression will be followed. This option can be specified multiple times, in which case as long as a link matches any one regexp, it will be followed. By default all links are followed."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:479
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:481
|
||||
msgid "Any link that matches this regular expression will be ignored. This option can be specified multiple times, in which case as long as any regexp matches a link, it will be ignored.By default, no links are ignored. If both --filter-regexp and --match-regexp are specified, then --filter-regexp is applied first."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:481
|
||||
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483
|
||||
msgid "Do not download CSS stylesheets."
|
||||
msgstr ""
|
||||
|
||||
|
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
@ -6,14 +6,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.4.22\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-01-22 03:18+0000\n"
|
||||
"PO-Revision-Date: 2010-01-21 01:41+0000\n"
|
||||
"Last-Translator: Vincent C. <Unknown>\n"
|
||||
"POT-Creation-Date: 2010-01-25 00:45+0000\n"
|
||||
"PO-Revision-Date: 2010-01-25 02:45+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||
"Language-Team: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-01-22 04:33+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-01-25 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
"Generated-By: pygettext.py 1.5\n"
|
||||
|
||||
@ -30,7 +30,7 @@ msgstr "Ne fait strictement rien"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:417
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
|
||||
@ -127,12 +127,12 @@ msgstr "Ne fait strictement rien"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:715
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1143
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1180
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1547
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1552
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1554
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1670
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||
#: /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:111
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||
@ -234,11 +234,11 @@ msgstr "Définir les métadonnées des fichiers %s"
|
||||
msgid "Set metadata from %s files"
|
||||
msgstr "Indiquer les métadonnées pour les fichiers %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||
msgid "Conversion Input"
|
||||
msgstr "Conversion (entrée)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:122
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125
|
||||
msgid ""
|
||||
"Specify the character encoding of the input document. If set this option "
|
||||
"will override any encoding declared by the document itself. Particularly "
|
||||
@ -250,11 +250,11 @@ msgstr ""
|
||||
"document. Particulièrement utile pour les documents ne déclarant pas "
|
||||
"d'encodage ou ayant des déclarations d'encodage incorrectes."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:225
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:228
|
||||
msgid "Conversion Output"
|
||||
msgstr "Conversion (sortie)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:239
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:242
|
||||
msgid ""
|
||||
"If specified, the output plugin will try to create output that is as human "
|
||||
"readable as possible. May not have any effect for some output plugins."
|
||||
@ -457,11 +457,11 @@ msgstr ""
|
||||
msgid "Communicate with the Binatone Readme eBook reader."
|
||||
msgstr "Communiquer avec le lecteur eBook Binatone Readme"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
msgid "Communicate with the Blackberry smart phone."
|
||||
msgstr "Communique avec le smartphone Blackberry."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90
|
||||
msgid "Kovid Goyal"
|
||||
@ -660,7 +660,7 @@ msgstr "Espace insuffisant sur la carte mémoire"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1068
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1072
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1447
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1452
|
||||
msgid "News"
|
||||
msgstr "Informations"
|
||||
|
||||
@ -818,8 +818,8 @@ msgstr ""
|
||||
msgid "Apply no processing to the image"
|
||||
msgstr "N'applique aucun traitement sur l'image"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:441
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452
|
||||
msgid "Page"
|
||||
msgstr "Page"
|
||||
|
||||
@ -2818,9 +2818,10 @@ msgstr "Sauvegardé"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16
|
||||
msgid "CSV/XML Options"
|
||||
msgstr ""
|
||||
msgstr "Options CSV/XML"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13
|
||||
@ -2838,6 +2839,7 @@ msgid "Options specific to"
|
||||
msgstr "Options spécifiques à"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20
|
||||
@ -2849,7 +2851,8 @@ msgstr "Options spécifiques à"
|
||||
msgid "output"
|
||||
msgstr "sortie"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:34
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:84
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49
|
||||
@ -2880,8 +2883,35 @@ msgstr "sortie"
|
||||
msgid "Form"
|
||||
msgstr "Formulaire"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37
|
||||
msgid "Fields to include in output:"
|
||||
msgstr "Champs à inclure en sortie:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
||||
msgid "E-book Options"
|
||||
msgstr "Options E-book"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:259
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1430
|
||||
msgid "Catalog"
|
||||
msgstr "Catalogue"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:52
|
||||
msgid "Tags to exclude as genres (regex):"
|
||||
msgstr "Etiquettes pour exclure les genres (regex):"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:53
|
||||
msgid "'Don't include this book' tag:"
|
||||
msgstr "Etiquette 'Ne pas inclure ce livre':"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:54
|
||||
msgid "'Mark this book as read' tag:"
|
||||
msgstr "Etiquette 'Marquer ce livre comme lu':"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:55
|
||||
msgid "Additional note tag prefix:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28
|
||||
@ -3547,7 +3577,7 @@ msgid "RB Output"
|
||||
msgstr "Sortie RB"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1633
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1637
|
||||
msgid "Choose the format to view"
|
||||
msgstr "Choisir le format à afficher"
|
||||
|
||||
@ -3855,7 +3885,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:132
|
||||
msgid "No details available."
|
||||
msgstr "Pas de détail disponible."
|
||||
|
||||
@ -4111,7 +4141,7 @@ msgstr "&Précédent"
|
||||
msgid "&Next"
|
||||
msgstr "Suiva&nt"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:37
|
||||
msgid "My Books"
|
||||
msgstr "Mes Livres"
|
||||
|
||||
@ -4251,7 +4281,7 @@ msgstr "Nouvelle adresse email"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:477
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1246
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
@ -6443,7 +6473,7 @@ msgid "Save to disk in a single directory"
|
||||
msgstr "Sauvegarder sur le disque dans un seul répertoire"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1741
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1745
|
||||
msgid "Save only %s format to disk"
|
||||
msgstr "Sauvegarder seulement le format %s vers le disque"
|
||||
|
||||
@ -6478,7 +6508,7 @@ msgstr "Convertir par lot"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360
|
||||
msgid "Create catalog of books in your calibre library"
|
||||
msgstr ""
|
||||
msgstr "Créer le catalogue des livres dans votre librairie calibre"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:376
|
||||
msgid "Run welcome wizard"
|
||||
@ -6499,13 +6529,13 @@ msgid "Calibre Library"
|
||||
msgstr "Librairie calibre"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:485
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1897
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1901
|
||||
msgid "Choose a location for your ebook library."
|
||||
msgstr "Choisir un emplacement pour votre librairie d'ebook"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:523
|
||||
msgid "Calibre Quick Start Guide"
|
||||
msgstr ""
|
||||
msgstr "Guide De Démarrage Rapide Calibre"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:703
|
||||
msgid "Browse by covers"
|
||||
@ -6622,8 +6652,8 @@ msgid "Cannot delete"
|
||||
msgstr "Impossible de supprimer"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650
|
||||
msgid "No book selected"
|
||||
msgstr "Aucun livre sélectionné"
|
||||
|
||||
@ -6631,11 +6661,11 @@ msgstr "Aucun livre sélectionné"
|
||||
msgid "Choose formats to be deleted"
|
||||
msgstr "Choisir les formats à supprimer"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1103
|
||||
msgid "Choose formats <b>not</b> to be deleted"
|
||||
msgstr "Choisir les formats à <b>ne pas</b> supprimer"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1141
|
||||
msgid ""
|
||||
"The selected books will be <b>permanently deleted</b> and the files removed "
|
||||
"from your computer. Are you sure?"
|
||||
@ -6643,123 +6673,131 @@ msgstr ""
|
||||
"Les livres sélectionnés vont être <b>supprimés définitivement</b> et les "
|
||||
"fichiers seront supprimés de votre ordinateur. Etes-vous sûr ?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1168
|
||||
msgid "Deleting books from device."
|
||||
msgstr "Suppression des livres dans l'appareil"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1195
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1199
|
||||
msgid "Cannot download metadata"
|
||||
msgstr "Impossible de télécharger les métadonnées"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1196
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1311
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1483
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1257
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1290
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1315
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1374
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1487
|
||||
msgid "No books selected"
|
||||
msgstr "Aucun livre sélectionné"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
msgid "social metadata"
|
||||
msgstr "Métadonnées sociales"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "covers"
|
||||
msgstr "couvertures"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "metadata"
|
||||
msgstr "métadonnées"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1219
|
||||
msgid "Downloading %s for %d book(s)"
|
||||
msgstr "Télécharge les livres %s sur %d"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1237
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
msgid "Failed to download some metadata"
|
||||
msgstr "Le téléchargement d'une partie des métadonnées a échoué"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1238
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
msgid "Failed to download metadata for the following:"
|
||||
msgstr "Le téléchargement des métadonnées a échoué pour :"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
|
||||
msgid "Failed to download metadata:"
|
||||
msgstr "Le téléchargement des métadonnées a échoué:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1256
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289
|
||||
msgid "Cannot edit metadata"
|
||||
msgstr "Impossible d'éditer les métadonnées"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1310
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1314
|
||||
msgid "Cannot save to disk"
|
||||
msgstr "Impossible de sauvegarder sur le disque"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1317
|
||||
msgid "Choose destination directory"
|
||||
msgstr "Choisir le répertoire de destination"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1340
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344
|
||||
msgid "Error while saving"
|
||||
msgstr "Erreur pendant la sauvegarde"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1341
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1345
|
||||
msgid "There was an error while saving."
|
||||
msgstr "Il y a eu une erreur lors de la sauvegarde."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1348
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1349
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1352
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1353
|
||||
msgid "Could not save some books"
|
||||
msgstr "Impossible de sauvegarder certains livres"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1354
|
||||
msgid "Click the show details button to see which ones."
|
||||
msgstr "Cliquer le bouton afficher les détails pour voir lesquels."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1371
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1375
|
||||
msgid "No books selected to generate catalog for"
|
||||
msgstr "Aucun livre sélectionné pour générer le catalogue pour"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392
|
||||
msgid "Generating %s catalog..."
|
||||
msgstr "Génère le catalogue %s..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1403
|
||||
msgid "Catalog generated."
|
||||
msgstr "Catalogue généré."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1417
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1406
|
||||
msgid "Export Catalog Directory"
|
||||
msgstr "Répertoire d'export du catalogue"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1407
|
||||
msgid "Select destination for %s.%s"
|
||||
msgstr "Sélectionner la destination pour %s.%s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1421
|
||||
msgid "Fetching news from "
|
||||
msgstr "Récupération des News de "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1435
|
||||
msgid " fetched."
|
||||
msgstr " récupéré."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1486
|
||||
msgid "Cannot convert"
|
||||
msgstr "Conversion impossible"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1515
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr "Démarrer la conversion de %d livre(s)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1687
|
||||
msgid "Cannot view"
|
||||
msgstr "Impossible de visualiser"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649
|
||||
msgid "Cannot open folder"
|
||||
msgstr "Impossible d'ouvrir le répertoire"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1667
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1671
|
||||
msgid "Multiple Books Selected"
|
||||
msgstr "Plusieurs livres sélectionnés"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1672
|
||||
msgid ""
|
||||
"You are attempting to open %d books. Opening too many books at once can be "
|
||||
"slow and have a negative effect on the responsiveness of your computer. Once "
|
||||
@ -6771,32 +6809,32 @@ msgstr ""
|
||||
"réponses de l'ordinateur. Une fois démarré le processus ne peut pas être "
|
||||
"arrêté avant la fin. Voulez-vous continuer ?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1684
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1688
|
||||
msgid "%s has no available formats."
|
||||
msgstr "%s n'a pas de format disponible."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1725
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1729
|
||||
msgid "Cannot configure"
|
||||
msgstr "Configuration impossible"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1726
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1730
|
||||
msgid "Cannot configure while there are running jobs."
|
||||
msgstr "Impossible de configurer pendant que des travaux sont en cours."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1773
|
||||
msgid "No detailed info available"
|
||||
msgstr "Pas d'information détaillée disponible"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1774
|
||||
msgid "No detailed information is available for books on the device."
|
||||
msgstr ""
|
||||
"Pas d'information détaillée disponible pour les livres dans l'appareil."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1825
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1829
|
||||
msgid "Error talking to device"
|
||||
msgstr "Erreur pendant la communication avec le lecteur électronique"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1826
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1830
|
||||
msgid ""
|
||||
"There was a temporary error talking to the device. Please unplug and "
|
||||
"reconnect the device and or reboot."
|
||||
@ -6805,12 +6843,12 @@ msgstr ""
|
||||
"lecteur électronique. Veuillez déconnecter et reconnecter le lecteur "
|
||||
"électronique et redémarrer."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1853
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1881
|
||||
msgid "Conversion Error"
|
||||
msgstr "Erreur lors de la conversion"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1854
|
||||
msgid ""
|
||||
"<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must "
|
||||
"first remove the DRM using third party tools."
|
||||
@ -6819,23 +6857,23 @@ msgstr ""
|
||||
"href=\"%s\">DRM</a>. Vous devez d'abord enlever les DRM avec des outils "
|
||||
"tiers."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1863
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1867
|
||||
msgid "Recipe Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1878
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1882
|
||||
msgid "<b>Failed</b>"
|
||||
msgstr "<b>Échoué</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1910
|
||||
msgid "Invalid library location"
|
||||
msgstr "Emplacement de la librairie invalide"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1911
|
||||
msgid "Could not access %s. Using %s as the library."
|
||||
msgstr "Impossible d'accéder à %s. Utilise %s comme librairie."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1961
|
||||
msgid ""
|
||||
"is the result of the efforts of many volunteers from all over the world. If "
|
||||
"you find it useful, please consider donating to support its development."
|
||||
@ -6844,11 +6882,11 @@ msgstr ""
|
||||
"Si vous le trouvez utile, pensez à donner afin de supporter son "
|
||||
"développement."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1982
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1986
|
||||
msgid "There are active jobs. Are you sure you want to quit?"
|
||||
msgstr "Il y a des travaux actifs. Voulez-vous vraiment finir ?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1985
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
msgid ""
|
||||
" is communicating with the device!<br>\n"
|
||||
" Quitting may cause corruption on the device.<br>\n"
|
||||
@ -6859,11 +6897,11 @@ msgstr ""
|
||||
"l'appareil.<br>\n"
|
||||
" Êtes-vous sûr de vouloir quitter ?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1993
|
||||
msgid "WARNING: Active jobs"
|
||||
msgstr "ATTENTION: Travaux actifs"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2041
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2045
|
||||
msgid ""
|
||||
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
||||
"context menu of the system tray."
|
||||
@ -6871,7 +6909,7 @@ msgstr ""
|
||||
"continuera à tourner dans la zone de notification. Pour le fermer, choisir "
|
||||
"<b>Quitter</b> dans le menu contextuel de la zone de notification."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2060
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2064
|
||||
msgid ""
|
||||
"<span style=\"color:red; font-weight:bold\">Latest version: <a "
|
||||
"href=\"%s\">%s</a></span>"
|
||||
@ -6879,11 +6917,11 @@ msgstr ""
|
||||
"<span style=\"color:red; font-weight:bold\">Dernière version: <a "
|
||||
"href=\"%s\">%s</a></span>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2068
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2072
|
||||
msgid "Update available"
|
||||
msgstr "Mise à jour disponible"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2069
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2073
|
||||
msgid ""
|
||||
"%s has been updated to version %s. See the <a href=\"http://calibre-"
|
||||
"ebook.com/whats-new\">new features</a>. Visit the download page?"
|
||||
@ -7108,7 +7146,7 @@ msgstr "La taille de police monospace en px"
|
||||
msgid "The standard font type"
|
||||
msgstr "Le type de police standard"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:407
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:408
|
||||
msgid "&Lookup in dictionary"
|
||||
msgstr "Rechercher dans le dictionnaire"
|
||||
|
||||
@ -7758,7 +7796,7 @@ msgstr ""
|
||||
"Le nombre maximum de correspondances retournées par une requête OPDS. Ceci "
|
||||
"affecte l'intégration dans Stanza, Wordplayer,etc..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:34
|
||||
msgid ""
|
||||
"The fields to output when cataloging books in the database. Should be a "
|
||||
"comma-separated list of fields.\n"
|
||||
@ -7767,7 +7805,7 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:43
|
||||
msgid ""
|
||||
"Output field to sort on.\n"
|
||||
"Available fields: author_sort, id, rating, size, timestamp, title.\n"
|
||||
@ -7775,6 +7813,62 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:241
|
||||
msgid ""
|
||||
"Title of generated catalog used as title in metadata.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247
|
||||
msgid ""
|
||||
"Save the output from different stages of the conversion pipeline to the "
|
||||
"specified directory. Useful if you are unsure at which stage of the "
|
||||
"conversion process a bug is occurring.\n"
|
||||
"Default: '%default'None\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:256
|
||||
msgid ""
|
||||
"Regex describing tags to exclude as genres.\n"
|
||||
"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261
|
||||
msgid ""
|
||||
"Comma-separated list of tag words indicating book should be excluded from "
|
||||
"output. Case-insensitive.\n"
|
||||
"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268
|
||||
msgid ""
|
||||
"Tag indicating book has been read.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:273
|
||||
msgid ""
|
||||
"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:279
|
||||
msgid ""
|
||||
"Specifies the output profile. In some cases, an output profile is required "
|
||||
"to optimize the catalog for the device. For example, 'kindle' or "
|
||||
"'kindle_dx' creates a structured Table of Contents with Sections and "
|
||||
"Articles.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:121
|
||||
msgid ""
|
||||
"Path to the calibre library. Default is to use the path stored in the "
|
||||
@ -8126,32 +8220,27 @@ msgstr ""
|
||||
"\n"
|
||||
"Pour une aide sur commande précise: %%prog commande --help\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1429
|
||||
msgid "Catalog"
|
||||
msgstr "Catalogue"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1691
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1696
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr "<p>Migre l'ancienne base vers la librairie dans %s<br><center>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1725
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "Copie <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1737
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742
|
||||
msgid "Compacting database"
|
||||
msgstr "Compacte la base"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1830
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1835
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr "Vérifie l'intégrité SQL..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1872
|
||||
msgid "Checking for missing files."
|
||||
msgstr "Vérifie si des fichiers sont manquants."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1894
|
||||
msgid "Checked id"
|
||||
msgstr "Id vérifié"
|
||||
|
||||
@ -8299,7 +8388,7 @@ msgstr "Convertir les chemins en minuscule."
|
||||
msgid "Replace whitespace with underscores."
|
||||
msgstr "Remplacer les espaces par des underscores."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:255
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:256
|
||||
msgid "Requested formats not available"
|
||||
msgstr "Formats demandés non disponible"
|
||||
|
||||
@ -8308,7 +8397,7 @@ msgid "Password to access your calibre library. Username is "
|
||||
msgstr ""
|
||||
"Mot de passe pour accéder à la librairie calibre. Le nom d'utilisateur est "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:856
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:860
|
||||
msgid ""
|
||||
"[options]\n"
|
||||
"\n"
|
||||
@ -8318,7 +8407,7 @@ msgstr ""
|
||||
"\n"
|
||||
"Démarre le serveur de contenu calibre"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:858
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:862
|
||||
msgid "Path to the library folder to serve with the content server"
|
||||
msgstr ""
|
||||
|
||||
@ -8396,7 +8485,7 @@ msgstr "Arrêté"
|
||||
msgid "Finished"
|
||||
msgstr "Terminé"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:72
|
||||
msgid "Working..."
|
||||
msgstr "Traitement en cours..."
|
||||
|
||||
|
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
File diff suppressed because it is too large
Load Diff
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-01-22 03:18+0000\n"
|
||||
"PO-Revision-Date: 2010-01-21 23:19+0000\n"
|
||||
"Last-Translator: Marty <Unknown>\n"
|
||||
"POT-Creation-Date: 2010-01-25 00:45+0000\n"
|
||||
"PO-Revision-Date: 2010-01-25 02:46+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\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: 2010-01-22 04:33+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-01-25 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -30,7 +30,7 @@ msgstr "Ta opcja nic nie zmienia"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:417
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
|
||||
@ -127,12 +127,12 @@ msgstr "Ta opcja nic nie zmienia"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:715
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1143
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1180
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1547
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1552
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1554
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1670
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||
#: /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:111
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||
@ -234,11 +234,11 @@ msgstr "Ustaw metadane w %s plikach"
|
||||
msgid "Set metadata from %s files"
|
||||
msgstr "Pobierz metadane z %s plików"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||
msgid "Conversion Input"
|
||||
msgstr "Źródłowy format do konwersji"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:122
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125
|
||||
msgid ""
|
||||
"Specify the character encoding of the input document. If set this option "
|
||||
"will override any encoding declared by the document itself. Particularly "
|
||||
@ -246,11 +246,11 @@ msgid ""
|
||||
"encoding declarations."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:225
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:228
|
||||
msgid "Conversion Output"
|
||||
msgstr "Docelowy format po konwersji"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:239
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:242
|
||||
msgid ""
|
||||
"If specified, the output plugin will try to create output that is as human "
|
||||
"readable as possible. May not have any effect for some output plugins."
|
||||
@ -451,11 +451,11 @@ msgstr ""
|
||||
msgid "Communicate with the Binatone Readme eBook reader."
|
||||
msgstr "Komunikować się z Binatone Readme czytnik e-booków"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
msgid "Communicate with the Blackberry smart phone."
|
||||
msgstr "Komunikować się z telefonu Blackberry."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90
|
||||
msgid "Kovid Goyal"
|
||||
@ -650,7 +650,7 @@ msgstr "Na karcie pamięci jest niewystarczająca ilość wolnego miejsca"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1068
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1072
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1447
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1452
|
||||
msgid "News"
|
||||
msgstr "Aktualności"
|
||||
|
||||
@ -802,8 +802,8 @@ msgstr ""
|
||||
msgid "Apply no processing to the image"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:441
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452
|
||||
msgid "Page"
|
||||
msgstr "Strona"
|
||||
|
||||
@ -2506,6 +2506,7 @@ msgid "CSV/XML Options"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13
|
||||
@ -2523,6 +2524,7 @@ msgid "Options specific to"
|
||||
msgstr "Opcje specyficzne dla"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20
|
||||
@ -2534,7 +2536,8 @@ msgstr "Opcje specyficzne dla"
|
||||
msgid "output"
|
||||
msgstr "wyjście"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:34
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:84
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49
|
||||
@ -2565,10 +2568,37 @@ msgstr "wyjście"
|
||||
msgid "Form"
|
||||
msgstr "Formularz"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37
|
||||
msgid "Fields to include in output:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
||||
msgid "E-book Options"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:259
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1430
|
||||
msgid "Catalog"
|
||||
msgstr "Katalog"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:52
|
||||
msgid "Tags to exclude as genres (regex):"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:53
|
||||
msgid "'Don't include this book' tag:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:54
|
||||
msgid "'Mark this book as read' tag:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:55
|
||||
msgid "Additional note tag prefix:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28
|
||||
msgid "Tab template for catalog.ui"
|
||||
msgstr ""
|
||||
@ -3198,7 +3228,7 @@ msgid "RB Output"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1633
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1637
|
||||
msgid "Choose the format to view"
|
||||
msgstr "Wybierz format do wyświetlenia"
|
||||
|
||||
@ -3495,7 +3525,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:132
|
||||
msgid "No details available."
|
||||
msgstr "Brak szczegółów."
|
||||
|
||||
@ -3740,7 +3770,7 @@ msgstr "&Poprzedni"
|
||||
msgid "&Next"
|
||||
msgstr "&Następny"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:37
|
||||
msgid "My Books"
|
||||
msgstr ""
|
||||
|
||||
@ -3873,7 +3903,7 @@ msgstr "nowy adres email"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:477
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1246
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
||||
@ -5954,7 +5984,7 @@ msgid "Save to disk in a single directory"
|
||||
msgstr "Zapisz na dysku w pojedyńczym folderze"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1741
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1745
|
||||
msgid "Save only %s format to disk"
|
||||
msgstr "Zapisz na dysku jedynie pliki w formacie %s"
|
||||
|
||||
@ -6009,7 +6039,7 @@ msgid "Calibre Library"
|
||||
msgstr "Biblioteka calibre"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:485
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1897
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1901
|
||||
msgid "Choose a location for your ebook library."
|
||||
msgstr "Wybierz lokalizację dla twojej biblioteki książek."
|
||||
|
||||
@ -6119,8 +6149,8 @@ msgid "Cannot delete"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650
|
||||
msgid "No book selected"
|
||||
msgstr "Nie wybrano ksiązki"
|
||||
|
||||
@ -6128,11 +6158,11 @@ msgstr "Nie wybrano ksiązki"
|
||||
msgid "Choose formats to be deleted"
|
||||
msgstr "Wybierz formaty do usunięcia"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1103
|
||||
msgid "Choose formats <b>not</b> to be deleted"
|
||||
msgstr "Wybierz formaty, które <b>nie</b> zostaną usunięte"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1141
|
||||
msgid ""
|
||||
"The selected books will be <b>permanently deleted</b> and the files removed "
|
||||
"from your computer. Are you sure?"
|
||||
@ -6140,123 +6170,131 @@ msgstr ""
|
||||
"Wybrane książki będą <b>permanentnie usunięte</b> i ich pliki zostaną "
|
||||
"usunięte z twojego komputera. Jesteś pewny?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1168
|
||||
msgid "Deleting books from device."
|
||||
msgstr "Usuwanie książek z urządzenia."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1195
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1199
|
||||
msgid "Cannot download metadata"
|
||||
msgstr "Nie można obrac metadanych"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1196
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1311
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1483
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1257
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1290
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1315
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1374
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1487
|
||||
msgid "No books selected"
|
||||
msgstr "Nie wybrano ksiązek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
msgid "social metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "covers"
|
||||
msgstr "okładki"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "metadata"
|
||||
msgstr "metadane"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1219
|
||||
msgid "Downloading %s for %d book(s)"
|
||||
msgstr "Pobieram %s dla %d książki(ek)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1237
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
msgid "Failed to download some metadata"
|
||||
msgstr "Nie udało się pobrac niektórych metadanych"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1238
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
msgid "Failed to download metadata for the following:"
|
||||
msgstr "Nie udało się pobrać metadanych dla następujących e-ksiązek:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
|
||||
msgid "Failed to download metadata:"
|
||||
msgstr "Nie udało się pobrać metadanych:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1256
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289
|
||||
msgid "Cannot edit metadata"
|
||||
msgstr "Nie można edytować metadanych"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1310
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1314
|
||||
msgid "Cannot save to disk"
|
||||
msgstr "Nie można zapisać na dysku"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1317
|
||||
msgid "Choose destination directory"
|
||||
msgstr "Wyberz folder docelowy"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1340
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344
|
||||
msgid "Error while saving"
|
||||
msgstr "Błąd podczas zapisywania"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1341
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1345
|
||||
msgid "There was an error while saving."
|
||||
msgstr "Wysapił błąd podczas zapisywania."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1348
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1349
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1352
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1353
|
||||
msgid "Could not save some books"
|
||||
msgstr "Nie można była zapisać niektórych książek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1354
|
||||
msgid "Click the show details button to see which ones."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1371
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1375
|
||||
msgid "No books selected to generate catalog for"
|
||||
msgstr "Brak książek do wygenerowania katalogu"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392
|
||||
msgid "Generating %s catalog..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1403
|
||||
msgid "Catalog generated."
|
||||
msgstr "Katalog wygenerowany"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1417
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1406
|
||||
msgid "Export Catalog Directory"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1407
|
||||
msgid "Select destination for %s.%s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1421
|
||||
msgid "Fetching news from "
|
||||
msgstr "Pobieranie aktualności z "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1435
|
||||
msgid " fetched."
|
||||
msgstr " - pobrano."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1486
|
||||
msgid "Cannot convert"
|
||||
msgstr "Nie można przekonwertować"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1515
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr "Rozpoczynam konwersję %d książki(ek)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1687
|
||||
msgid "Cannot view"
|
||||
msgstr "Nie można wyświetlić"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649
|
||||
msgid "Cannot open folder"
|
||||
msgstr "Nie można otworzyć folderu"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1667
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1671
|
||||
msgid "Multiple Books Selected"
|
||||
msgstr "Wybrano wiele książek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1672
|
||||
msgid ""
|
||||
"You are attempting to open %d books. Opening too many books at once can be "
|
||||
"slow and have a negative effect on the responsiveness of your computer. Once "
|
||||
@ -6264,31 +6302,31 @@ msgid ""
|
||||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1684
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1688
|
||||
msgid "%s has no available formats."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1725
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1729
|
||||
msgid "Cannot configure"
|
||||
msgstr "Nie można skonfigurować"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1726
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1730
|
||||
msgid "Cannot configure while there are running jobs."
|
||||
msgstr "Nie można skonfigurować, gdy są aktywne jakieś zadania."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1773
|
||||
msgid "No detailed info available"
|
||||
msgstr "Brak szczegółowych informacji"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1774
|
||||
msgid "No detailed information is available for books on the device."
|
||||
msgstr "Brak szczegółowych informacji dla książek na urządzeniu."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1825
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1829
|
||||
msgid "Error talking to device"
|
||||
msgstr "Błąd komunikacji z urządzeniem"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1826
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1830
|
||||
msgid ""
|
||||
"There was a temporary error talking to the device. Please unplug and "
|
||||
"reconnect the device and or reboot."
|
||||
@ -6296,12 +6334,12 @@ msgstr ""
|
||||
"Wystąpił chwilowy błąd komunikacji z urządzeniem. Odłącz i podłącz je "
|
||||
"ponownie lub uruchom komputer ponownie."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1853
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1881
|
||||
msgid "Conversion Error"
|
||||
msgstr "Błąd podczas konwersji"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1854
|
||||
msgid ""
|
||||
"<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must "
|
||||
"first remove the DRM using third party tools."
|
||||
@ -6309,61 +6347,61 @@ msgstr ""
|
||||
"<p>Nie można skonwertować: %s<p>Książka posiada <a href=\"%s\">DRM</a>. "
|
||||
"Musisz najpierw usunąć DRM korzystając z innych programów."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1863
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1867
|
||||
msgid "Recipe Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1878
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1882
|
||||
msgid "<b>Failed</b>"
|
||||
msgstr "<b>Nie powiodło się</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1910
|
||||
msgid "Invalid library location"
|
||||
msgstr "Niewłaściwa lokalizacja biblioteki"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1911
|
||||
msgid "Could not access %s. Using %s as the library."
|
||||
msgstr "Nie można uzyskać dostępu %s. Używam %s jako biblioteki."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1961
|
||||
msgid ""
|
||||
"is the result of the efforts of many volunteers from all over the world. If "
|
||||
"you find it useful, please consider donating to support its development."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1982
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1986
|
||||
msgid "There are active jobs. Are you sure you want to quit?"
|
||||
msgstr ""
|
||||
"Niektóre zadania są aktywne. Jesteś pewnien, że chcesz zamknąć program?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1985
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
msgid ""
|
||||
" is communicating with the device!<br>\n"
|
||||
" Quitting may cause corruption on the device.<br>\n"
|
||||
" Are you sure you want to quit?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1993
|
||||
msgid "WARNING: Active jobs"
|
||||
msgstr "OSTRZEŻENIE: Aktywne zadania"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2041
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2045
|
||||
msgid ""
|
||||
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
||||
"context menu of the system tray."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2060
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2064
|
||||
msgid ""
|
||||
"<span style=\"color:red; font-weight:bold\">Latest version: <a "
|
||||
"href=\"%s\">%s</a></span>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2068
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2072
|
||||
msgid "Update available"
|
||||
msgstr "Uaktualnienia dostępne"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2069
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2073
|
||||
msgid ""
|
||||
"%s has been updated to version %s. See the <a href=\"http://calibre-"
|
||||
"ebook.com/whats-new\">new features</a>. Visit the download page?"
|
||||
@ -6583,7 +6621,7 @@ msgstr ""
|
||||
msgid "The standard font type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:407
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:408
|
||||
msgid "&Lookup in dictionary"
|
||||
msgstr "Sprawdź w słowniku"
|
||||
|
||||
@ -7184,7 +7222,7 @@ msgid ""
|
||||
"WordPlayer, etc. integration."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:34
|
||||
msgid ""
|
||||
"The fields to output when cataloging books in the database. Should be a "
|
||||
"comma-separated list of fields.\n"
|
||||
@ -7193,7 +7231,7 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:43
|
||||
msgid ""
|
||||
"Output field to sort on.\n"
|
||||
"Available fields: author_sort, id, rating, size, timestamp, title.\n"
|
||||
@ -7201,6 +7239,62 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:241
|
||||
msgid ""
|
||||
"Title of generated catalog used as title in metadata.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247
|
||||
msgid ""
|
||||
"Save the output from different stages of the conversion pipeline to the "
|
||||
"specified directory. Useful if you are unsure at which stage of the "
|
||||
"conversion process a bug is occurring.\n"
|
||||
"Default: '%default'None\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:256
|
||||
msgid ""
|
||||
"Regex describing tags to exclude as genres.\n"
|
||||
"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261
|
||||
msgid ""
|
||||
"Comma-separated list of tag words indicating book should be excluded from "
|
||||
"output. Case-insensitive.\n"
|
||||
"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268
|
||||
msgid ""
|
||||
"Tag indicating book has been read.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:273
|
||||
msgid ""
|
||||
"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:279
|
||||
msgid ""
|
||||
"Specifies the output profile. In some cases, an output profile is required "
|
||||
"to optimize the catalog for the device. For example, 'kindle' or "
|
||||
"'kindle_dx' creates a structured Table of Contents with Sections and "
|
||||
"Articles.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:121
|
||||
msgid ""
|
||||
"Path to the calibre library. Default is to use the path stored in the "
|
||||
@ -7465,32 +7559,27 @@ msgid ""
|
||||
"For help on an individual command: %%prog command --help\n"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1429
|
||||
msgid "Catalog"
|
||||
msgstr "Katalog"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1691
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1696
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1725
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "Kopiowanie <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1737
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742
|
||||
msgid "Compacting database"
|
||||
msgstr "Kompaktowanie bazy danych"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1830
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1835
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr "Sprawdzam integralność SQL..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1872
|
||||
msgid "Checking for missing files."
|
||||
msgstr "Sprawdzam czy brakuje jakichś plików."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1894
|
||||
msgid "Checked id"
|
||||
msgstr ""
|
||||
|
||||
@ -7622,7 +7711,7 @@ msgstr "Przekształć scieżki na małe znaki."
|
||||
msgid "Replace whitespace with underscores."
|
||||
msgstr "Zastąp spacje podkreśleniami."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:255
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:256
|
||||
msgid "Requested formats not available"
|
||||
msgstr "Żądane formaty nie dostępne"
|
||||
|
||||
@ -7630,7 +7719,7 @@ msgstr "Żądane formaty nie dostępne"
|
||||
msgid "Password to access your calibre library. Username is "
|
||||
msgstr "Hasło do biblioteki calibre. Nazwa użytkownika to "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:856
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:860
|
||||
msgid ""
|
||||
"[options]\n"
|
||||
"\n"
|
||||
@ -7640,7 +7729,7 @@ msgstr ""
|
||||
"\n"
|
||||
"Włącz serwer zawartości calibre."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:858
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:862
|
||||
msgid "Path to the library folder to serve with the content server"
|
||||
msgstr ""
|
||||
|
||||
@ -7714,7 +7803,7 @@ msgstr "Zatrzymano"
|
||||
msgid "Finished"
|
||||
msgstr "Zakończone"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:72
|
||||
msgid "Working..."
|
||||
msgstr "Pracuję.."
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -6,14 +6,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.4.55\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-01-22 03:18+0000\n"
|
||||
"PO-Revision-Date: 2010-01-21 14:27+0000\n"
|
||||
"Last-Translator: DisSkorpion <Unknown>\n"
|
||||
"POT-Creation-Date: 2010-01-25 00:45+0000\n"
|
||||
"PO-Revision-Date: 2010-01-25 02:30+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: 2010-01-22 04:33+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-01-25 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
||||
"X-Poedit-Language: Russian\n"
|
||||
@ -34,7 +34,7 @@ msgstr "Ничего не делает"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:417
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
|
||||
@ -131,12 +131,12 @@ msgstr "Ничего не делает"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:715
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1143
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1180
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1547
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1552
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1554
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1670
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:645
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:717
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:764
|
||||
#: /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:111
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||
@ -238,11 +238,11 @@ msgstr "Внести метаданные в файлы %s"
|
||||
msgid "Set metadata from %s files"
|
||||
msgstr "Внести метаданные из файлов %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||
msgid "Conversion Input"
|
||||
msgstr "Вход конвертера"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:122
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125
|
||||
msgid ""
|
||||
"Specify the character encoding of the input document. If set this option "
|
||||
"will override any encoding declared by the document itself. Particularly "
|
||||
@ -254,11 +254,11 @@ msgstr ""
|
||||
"Данная опция может быть полезна для документа, не имеющего информации о "
|
||||
"кодировке, или для документа, в котором указаны неверные параметры кодировки."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:225
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:228
|
||||
msgid "Conversion Output"
|
||||
msgstr "Выход конвертера"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:239
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:242
|
||||
msgid ""
|
||||
"If specified, the output plugin will try to create output that is as human "
|
||||
"readable as possible. May not have any effect for some output plugins."
|
||||
@ -458,11 +458,11 @@ msgstr ""
|
||||
msgid "Communicate with the Binatone Readme eBook reader."
|
||||
msgstr "Соединяться с Binatone Readme eBook."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
msgid "Communicate with the Blackberry smart phone."
|
||||
msgstr "Соединяться со смартфонами Blackberry."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90
|
||||
msgid "Kovid Goyal"
|
||||
@ -657,7 +657,7 @@ msgstr "Не хватает свободного места на карте па
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1068
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1072
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1447
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1452
|
||||
msgid "News"
|
||||
msgstr "Новости"
|
||||
|
||||
@ -810,8 +810,8 @@ msgstr ""
|
||||
msgid "Apply no processing to the image"
|
||||
msgstr "Не обрабатывать изображения"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:441
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452
|
||||
msgid "Page"
|
||||
msgstr "Страница"
|
||||
|
||||
@ -2648,6 +2648,7 @@ msgid "CSV/XML Options"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13
|
||||
@ -2665,6 +2666,7 @@ msgid "Options specific to"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20
|
||||
@ -2676,7 +2678,8 @@ msgstr ""
|
||||
msgid "output"
|
||||
msgstr "вывод"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:34
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:36
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:51
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:84
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49
|
||||
@ -2707,10 +2710,37 @@ msgstr "вывод"
|
||||
msgid "Form"
|
||||
msgstr "Форма"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37
|
||||
msgid "Fields to include in output:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
||||
msgid "E-book Options"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:259
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1430
|
||||
msgid "Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:52
|
||||
msgid "Tags to exclude as genres (regex):"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:53
|
||||
msgid "'Don't include this book' tag:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:54
|
||||
msgid "'Mark this book as read' tag:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:55
|
||||
msgid "Additional note tag prefix:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28
|
||||
msgid "Tab template for catalog.ui"
|
||||
msgstr ""
|
||||
@ -3343,7 +3373,7 @@ msgid "RB Output"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1633
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1637
|
||||
msgid "Choose the format to view"
|
||||
msgstr "Выберете для просмотра формат"
|
||||
|
||||
@ -3636,7 +3666,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:132
|
||||
msgid "No details available."
|
||||
msgstr ""
|
||||
|
||||
@ -3881,7 +3911,7 @@ msgstr "&Предыдущий"
|
||||
msgid "&Next"
|
||||
msgstr "&Следующий"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:37
|
||||
msgid "My Books"
|
||||
msgstr ""
|
||||
|
||||
@ -4017,7 +4047,7 @@ msgstr "новый email адрес"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:477
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1246
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
@ -6113,7 +6143,7 @@ msgid "Save to disk in a single directory"
|
||||
msgstr "Сохранить на диск в одну директорию"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1741
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1745
|
||||
msgid "Save only %s format to disk"
|
||||
msgstr "Сохранять на диск только формат %s"
|
||||
|
||||
@ -6168,7 +6198,7 @@ msgid "Calibre Library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:485
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1897
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1901
|
||||
msgid "Choose a location for your ebook library."
|
||||
msgstr "Выбрите расположение Вашей библиотеки электронных книг."
|
||||
|
||||
@ -6292,8 +6322,8 @@ msgid "Cannot delete"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650
|
||||
msgid "No book selected"
|
||||
msgstr "Нет выбранных книг"
|
||||
|
||||
@ -6301,11 +6331,11 @@ msgstr "Нет выбранных книг"
|
||||
msgid "Choose formats to be deleted"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1103
|
||||
msgid "Choose formats <b>not</b> to be deleted"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1141
|
||||
msgid ""
|
||||
"The selected books will be <b>permanently deleted</b> and the files removed "
|
||||
"from your computer. Are you sure?"
|
||||
@ -6313,123 +6343,131 @@ msgstr ""
|
||||
"Выбранные книги будут <b>навсегда удалены</b> вместе с файлами с Вашего "
|
||||
"компьютера. Вы уверены?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1168
|
||||
msgid "Deleting books from device."
|
||||
msgstr "Удаляются книги из устройства."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1195
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1199
|
||||
msgid "Cannot download metadata"
|
||||
msgstr "Не удалось загрузить метаданные"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1196
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1311
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1483
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1257
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1290
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1315
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1374
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1487
|
||||
msgid "No books selected"
|
||||
msgstr "Нет Выбранных книг"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
msgid "social metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "covers"
|
||||
msgstr "обложек"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217
|
||||
msgid "metadata"
|
||||
msgstr "метаданных"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1219
|
||||
msgid "Downloading %s for %d book(s)"
|
||||
msgstr "Загрузка %s для %d книг(и)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1237
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
msgid "Failed to download some metadata"
|
||||
msgstr "Не удалось загрузить некоторые метаданные"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1238
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||
msgid "Failed to download metadata for the following:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
|
||||
msgid "Failed to download metadata:"
|
||||
msgstr "Не удалось загрузить метаданные:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1256
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289
|
||||
msgid "Cannot edit metadata"
|
||||
msgstr "Невозможно редактировать метаданные"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1310
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1314
|
||||
msgid "Cannot save to disk"
|
||||
msgstr "Невозможно сохранить на диск"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1317
|
||||
msgid "Choose destination directory"
|
||||
msgstr "Выберете директорию получателя"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1340
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344
|
||||
msgid "Error while saving"
|
||||
msgstr "Ошибка при сохранении"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1341
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1345
|
||||
msgid "There was an error while saving."
|
||||
msgstr "Произошла ошибка при сохранении."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1348
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1349
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1352
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1353
|
||||
msgid "Could not save some books"
|
||||
msgstr "Не удалось сохранить некоторые книги"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1354
|
||||
msgid "Click the show details button to see which ones."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1371
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1375
|
||||
msgid "No books selected to generate catalog for"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392
|
||||
msgid "Generating %s catalog..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1403
|
||||
msgid "Catalog generated."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1417
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1406
|
||||
msgid "Export Catalog Directory"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1407
|
||||
msgid "Select destination for %s.%s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1421
|
||||
msgid "Fetching news from "
|
||||
msgstr "Вызвать новость из "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1435
|
||||
msgid " fetched."
|
||||
msgstr " загружено."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1486
|
||||
msgid "Cannot convert"
|
||||
msgstr "Не преобразуется"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1515
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1687
|
||||
msgid "Cannot view"
|
||||
msgstr "Невозможно просмотреть"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649
|
||||
msgid "Cannot open folder"
|
||||
msgstr "Не могу открыть папку"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1667
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1671
|
||||
msgid "Multiple Books Selected"
|
||||
msgstr "Выбраны несколько книг"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1672
|
||||
msgid ""
|
||||
"You are attempting to open %d books. Opening too many books at once can be "
|
||||
"slow and have a negative effect on the responsiveness of your computer. Once "
|
||||
@ -6437,31 +6475,31 @@ msgid ""
|
||||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1684
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1688
|
||||
msgid "%s has no available formats."
|
||||
msgstr "%s неизвестный формат."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1725
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1729
|
||||
msgid "Cannot configure"
|
||||
msgstr "Невозможно настроить"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1726
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1730
|
||||
msgid "Cannot configure while there are running jobs."
|
||||
msgstr "Пока запущено задание, не могу настроить"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1773
|
||||
msgid "No detailed info available"
|
||||
msgstr "Нет доступной подробной информации"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1774
|
||||
msgid "No detailed information is available for books on the device."
|
||||
msgstr "Не доступна подробная информация книг на устройстве"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1825
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1829
|
||||
msgid "Error talking to device"
|
||||
msgstr "Ошибка согласования устройства"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1826
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1830
|
||||
msgid ""
|
||||
"There was a temporary error talking to the device. Please unplug and "
|
||||
"reconnect the device and or reboot."
|
||||
@ -6469,34 +6507,34 @@ msgstr ""
|
||||
"Была временная ошибка общения с устройством. Пожалуста, переподключите "
|
||||
"устройство или перегрузите его."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1853
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1881
|
||||
msgid "Conversion Error"
|
||||
msgstr "Ошибка преобразования"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1854
|
||||
msgid ""
|
||||
"<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must "
|
||||
"first remove the DRM using third party tools."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1863
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1867
|
||||
msgid "Recipe Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1878
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1882
|
||||
msgid "<b>Failed</b>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1910
|
||||
msgid "Invalid library location"
|
||||
msgstr "Неверное расположение библиотеки"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1911
|
||||
msgid "Could not access %s. Using %s as the library."
|
||||
msgstr "Нет доступа к %s. Использование %s в качестве библиотеки."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1961
|
||||
msgid ""
|
||||
"is the result of the efforts of many volunteers from all over the world. If "
|
||||
"you find it useful, please consider donating to support its development."
|
||||
@ -6504,22 +6542,22 @@ msgstr ""
|
||||
"является результато труда многих добровольцев по всему миру. Если Вы сочли "
|
||||
"его полезным, будьте добры пожертвовать на его развитие."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1982
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1986
|
||||
msgid "There are active jobs. Are you sure you want to quit?"
|
||||
msgstr "Имеется активное задание. Вы все равно хотите выйти?"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1985
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
msgid ""
|
||||
" is communicating with the device!<br>\n"
|
||||
" Quitting may cause corruption on the device.<br>\n"
|
||||
" Are you sure you want to quit?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1993
|
||||
msgid "WARNING: Active jobs"
|
||||
msgstr "ПРЕДУПРЕЖДЕНИЕ: Активные задания"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2041
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2045
|
||||
msgid ""
|
||||
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
||||
"context menu of the system tray."
|
||||
@ -6527,7 +6565,7 @@ msgstr ""
|
||||
"продолжит работать в трее. Для завершения работы выберите<b>Quit</b> в "
|
||||
"контекстном меню трея."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2060
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2064
|
||||
msgid ""
|
||||
"<span style=\"color:red; font-weight:bold\">Latest version: <a "
|
||||
"href=\"%s\">%s</a></span>"
|
||||
@ -6535,11 +6573,11 @@ msgstr ""
|
||||
"<span style=\"color:red; font-weight:bold\">Последняя версия: <a "
|
||||
"href=\"%s\">%s</a></span>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2068
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2072
|
||||
msgid "Update available"
|
||||
msgstr "Доступно обновление"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2069
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2073
|
||||
msgid ""
|
||||
"%s has been updated to version %s. See the <a href=\"http://calibre-"
|
||||
"ebook.com/whats-new\">new features</a>. Visit the download page?"
|
||||
@ -6760,7 +6798,7 @@ msgstr "Размер Моноширного шрифта в px"
|
||||
msgid "The standard font type"
|
||||
msgstr "Стандартный шрифт"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:407
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:408
|
||||
msgid "&Lookup in dictionary"
|
||||
msgstr ""
|
||||
|
||||
@ -7356,7 +7394,7 @@ msgid ""
|
||||
"WordPlayer, etc. integration."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:34
|
||||
msgid ""
|
||||
"The fields to output when cataloging books in the database. Should be a "
|
||||
"comma-separated list of fields.\n"
|
||||
@ -7365,7 +7403,7 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:37
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:43
|
||||
msgid ""
|
||||
"Output field to sort on.\n"
|
||||
"Available fields: author_sort, id, rating, size, timestamp, title.\n"
|
||||
@ -7373,6 +7411,62 @@ msgid ""
|
||||
"Applies to: CSV, XML output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:241
|
||||
msgid ""
|
||||
"Title of generated catalog used as title in metadata.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247
|
||||
msgid ""
|
||||
"Save the output from different stages of the conversion pipeline to the "
|
||||
"specified directory. Useful if you are unsure at which stage of the "
|
||||
"conversion process a bug is occurring.\n"
|
||||
"Default: '%default'None\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:256
|
||||
msgid ""
|
||||
"Regex describing tags to exclude as genres.\n"
|
||||
"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261
|
||||
msgid ""
|
||||
"Comma-separated list of tag words indicating book should be excluded from "
|
||||
"output. Case-insensitive.\n"
|
||||
"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268
|
||||
msgid ""
|
||||
"Tag indicating book has been read.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:273
|
||||
msgid ""
|
||||
"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:279
|
||||
msgid ""
|
||||
"Specifies the output profile. In some cases, an output profile is required "
|
||||
"to optimize the catalog for the device. For example, 'kindle' or "
|
||||
"'kindle_dx' creates a structured Table of Contents with Sections and "
|
||||
"Articles.\n"
|
||||
"Default: '%default'\n"
|
||||
"Applies to: ePub, MOBI output formats"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:121
|
||||
msgid ""
|
||||
"Path to the calibre library. Default is to use the path stored in the "
|
||||
@ -7704,32 +7798,27 @@ msgstr ""
|
||||
"\n"
|
||||
"Для справки: %%prog команда --help\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1416
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1429
|
||||
msgid "Catalog"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1691
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1696
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr "<p>Миграция старой базы данных в %s<br><center>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1725
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "Копирование <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1737
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742
|
||||
msgid "Compacting database"
|
||||
msgstr "Сжатие базы данных"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1830
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1835
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1872
|
||||
msgid "Checking for missing files."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1894
|
||||
msgid "Checked id"
|
||||
msgstr ""
|
||||
|
||||
@ -7849,7 +7938,7 @@ msgstr ""
|
||||
msgid "Replace whitespace with underscores."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:255
|
||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:256
|
||||
msgid "Requested formats not available"
|
||||
msgstr ""
|
||||
|
||||
@ -7857,7 +7946,7 @@ msgstr ""
|
||||
msgid "Password to access your calibre library. Username is "
|
||||
msgstr "Пароль для доступа в библиотеку. Имя пользователя "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:856
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:860
|
||||
msgid ""
|
||||
"[options]\n"
|
||||
"\n"
|
||||
@ -7867,7 +7956,7 @@ msgstr ""
|
||||
"\n"
|
||||
"Запуск calibre content server."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:858
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:862
|
||||
msgid "Path to the library folder to serve with the content server"
|
||||
msgstr ""
|
||||
|
||||
@ -7941,7 +8030,7 @@ msgstr ""
|
||||
msgid "Finished"
|
||||
msgstr "Закончил"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:72
|
||||
msgid "Working..."
|
||||
msgstr ""
|
||||
|
||||
|
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
@ -52,8 +52,10 @@ class BaseJob(object):
|
||||
else:
|
||||
self._status_text = _('Error') if self.failed else _('Finished')
|
||||
if DEBUG:
|
||||
prints('Job:', self.id, self.description, 'finished')
|
||||
prints('\t'.join(self.details.splitlines(True)))
|
||||
prints('Job:', self.id, self.description, 'finished',
|
||||
safe_encode=True)
|
||||
prints('\t'.join(self.details.splitlines(True)),
|
||||
safe_encode=True)
|
||||
if not self._done_called:
|
||||
self._done_called = True
|
||||
try:
|
||||
|
@ -66,7 +66,7 @@ class RecipeInput(InputFormatPlugin):
|
||||
if recipe.requires_version > numeric_version:
|
||||
log.warn(
|
||||
'Downloaded recipe needs calibre version at least: %s' % \
|
||||
recipe.requires_version)
|
||||
('.'.join(recipe.requires_version)))
|
||||
builtin = True
|
||||
except:
|
||||
log.exception('Failed to compile downloaded recipe. Falling '
|
||||
|
@ -111,7 +111,9 @@ class BasicNewsRecipe(Recipe):
|
||||
|
||||
#: Specify an override encoding for sites that have an incorrect
|
||||
#: charset specification. The most common being specifying ``latin1`` and
|
||||
#: using ``cp1252``. If None, try to detect the encoding.
|
||||
#: using ``cp1252``. If None, try to detect the encoding. If it is a
|
||||
#: callable, the callable is called with two arguments: The recipe object
|
||||
#: and the source to be decoded. It must return the decoded source.
|
||||
encoding = None
|
||||
|
||||
#: Normally we try to guess if a feed has full articles embedded in it
|
||||
@ -421,7 +423,10 @@ class BasicNewsRecipe(Recipe):
|
||||
if raw:
|
||||
return _raw
|
||||
if not isinstance(_raw, unicode) and self.encoding:
|
||||
_raw = _raw.decode(self.encoding, 'replace')
|
||||
if callable(self.encoding):
|
||||
_raw = self.encoding(_raw)
|
||||
else:
|
||||
_raw = _raw.decode(self.encoding, 'replace')
|
||||
massage = list(BeautifulSoup.MARKUP_MASSAGE)
|
||||
massage.append((re.compile(r'&(\S+?);'), lambda match: entity_to_unicode(match, encoding=self.encoding)))
|
||||
return BeautifulSoup(_raw, markupMassage=massage)
|
||||
|
@ -403,7 +403,9 @@ class RecursiveFetcher(object):
|
||||
if len(dsrc) == 0 or \
|
||||
len(re.compile('<!--.*?-->', re.DOTALL).sub('', dsrc).strip()) == 0:
|
||||
raise ValueError('No content at URL %s'%iurl)
|
||||
if self.encoding is not None:
|
||||
if callable(self.encoding):
|
||||
dsrc = self.encoding(dsrc)
|
||||
elif self.encoding is not None:
|
||||
dsrc = dsrc.decode(self.encoding, 'replace')
|
||||
else:
|
||||
dsrc = xml_to_unicode(dsrc, self.verbose)[0]
|
||||
|
Loading…
x
Reference in New Issue
Block a user