mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Sync to trunk.
This commit is contained in:
commit
eb2b11e9dc
100
Changelog.yaml
100
Changelog.yaml
@ -4,6 +4,106 @@
|
|||||||
# for important features/bug fixes.
|
# for important features/bug fixes.
|
||||||
# Also, each release can have new and improved recipes.
|
# Also, each release can have new and improved recipes.
|
||||||
|
|
||||||
|
- version: 0.6.46
|
||||||
|
date: 2010-03-31
|
||||||
|
|
||||||
|
new features:
|
||||||
|
- title: "EPUB Output: Use SVG for covers, to ensure cover image is correctly resized to fit available screen space"
|
||||||
|
|
||||||
|
- title: "Support for the Motorola Cliq and Milestone"
|
||||||
|
|
||||||
|
- title: "Fetch My Clippings from the Kindle"
|
||||||
|
|
||||||
|
- title: "Comic Input: Add option to disable conversion to grayscale (black and white)"
|
||||||
|
|
||||||
|
- title: "MOBI Output: Mark single section news downloads as newspapers so that they are automatically archived by the Kindle"
|
||||||
|
|
||||||
|
- title: "MOBI Output: Add option to control setting of document type to Personal Document"
|
||||||
|
|
||||||
|
- title: "SONY driver: Tags within [] do not translate into a category when sending books to device"
|
||||||
|
|
||||||
|
- title: "ebook-device: Add a test_file command"
|
||||||
|
|
||||||
|
- title: "Location support for PDF when fetching annotations from a Kindle"
|
||||||
|
|
||||||
|
bug fixes:
|
||||||
|
- title: "CHM Input: Various fixes"
|
||||||
|
tickets: [5132, 5141]
|
||||||
|
|
||||||
|
- title: "Linux installer: Add mimetypes to .desktop files"
|
||||||
|
tickets: [5156]
|
||||||
|
|
||||||
|
- title: "Fix function naming in bash completion script"
|
||||||
|
tickets: [5146]
|
||||||
|
|
||||||
|
- title: "Fix the author of the metadata download plugins goes wrong after downloaded metadata for a book"
|
||||||
|
tickets: [5129]
|
||||||
|
|
||||||
|
- title: "Popup an error message if a news download is aborted because of no active internet connection"
|
||||||
|
|
||||||
|
- title: "Add test button to regex builder to improve performance"
|
||||||
|
|
||||||
|
- title: "Fix loading of custom device interface plugins"
|
||||||
|
|
||||||
|
- title: "Fix extra spaces in MOBI author field with multiple authors"
|
||||||
|
tickets: [2279, 4652, 5162]
|
||||||
|
|
||||||
|
- title: "Fix Kindle Topaz files with edited metadata won't index"
|
||||||
|
tickets: [5154]
|
||||||
|
|
||||||
|
- title: "PDB output: Fix problem with links continuing through story"
|
||||||
|
tickets: [5149]
|
||||||
|
|
||||||
|
- title: "Don't choke if the user provides an invalid remove header/footer regexp"
|
||||||
|
|
||||||
|
new recipes:
|
||||||
|
- title: MiDDay
|
||||||
|
author: calibre Periodicals
|
||||||
|
|
||||||
|
- title: Business Line
|
||||||
|
author: Dhiru
|
||||||
|
|
||||||
|
- title: New York Post
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: Tulsa World
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: Oil Price
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: nrc.nl
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: "Peter Schiff's Economic Commentary"
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: IEEE Spectrum
|
||||||
|
author: Franco Venturi
|
||||||
|
|
||||||
|
- title: Washington Post
|
||||||
|
author: Kos Semonski
|
||||||
|
|
||||||
|
- title: The Sun
|
||||||
|
author: Chaz Ralph
|
||||||
|
|
||||||
|
- title: Fronda
|
||||||
|
author: Tomasz Dugosz
|
||||||
|
|
||||||
|
- title: Runa
|
||||||
|
author: Mori
|
||||||
|
|
||||||
|
- title: Times of India
|
||||||
|
author: Krittika Goyal
|
||||||
|
|
||||||
|
improved recipes:
|
||||||
|
- Various Serian and Polish newspapers
|
||||||
|
- New York Times Top Stories
|
||||||
|
- USA Today
|
||||||
|
- Daily Telegraph
|
||||||
|
- New York Times
|
||||||
|
- SFBG
|
||||||
|
|
||||||
- version: 0.6.45
|
- version: 0.6.45
|
||||||
date: 2010-03-11
|
date: 2010-03-11
|
||||||
|
|
||||||
|
BIN
resources/images/news/nypost.png
Normal file
BIN
resources/images/news/nypost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 400 B |
3544
resources/images/search_add_saved.svg
Normal file
3544
resources/images/search_add_saved.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 134 KiB |
3547
resources/images/search_copy_saved.svg
Normal file
3547
resources/images/search_copy_saved.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 151 KiB |
3544
resources/images/search_delete_saved.svg
Normal file
3544
resources/images/search_delete_saved.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 134 KiB |
@ -21,6 +21,7 @@ class Ser24Sata(BasicNewsRecipe):
|
|||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif}'
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif}'
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
|
@ -10,7 +10,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
class B92(BasicNewsRecipe):
|
class B92(BasicNewsRecipe):
|
||||||
title = 'B92'
|
title = 'B92'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'Dnevne vesti iz Srbije i sveta'
|
description = 'B92 info, najnovije vesti iz Srbije, regiona i sveta'
|
||||||
publisher = 'B92'
|
publisher = 'B92'
|
||||||
category = 'news, politics, Serbia'
|
category = 'news, politics, Serbia'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
@ -19,6 +19,7 @@ class B92(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'cp1250'
|
encoding = 'cp1250'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newsportal'
|
||||||
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} '
|
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
|
@ -18,6 +18,7 @@ class Danas(BasicNewsRecipe):
|
|||||||
no_stylesheets = False
|
no_stylesheets = False
|
||||||
use_embedded_content = True
|
use_embedded_content = True
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newsportal'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} '
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
|
@ -20,7 +20,8 @@ class Blic(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
masthead_url = 'http://www.blic.rs/resources/images/header/header_back.png'
|
masthead_url = 'http://www.blic.rs/resources/images/header/header_back.png'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Georgia, serif1, serif} .article_description{font-family: Arial, sans1, sans-serif} .img_full{float: none} img{margin-bottom: 0.8em} '
|
publication_type = 'newspaper'
|
||||||
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Georgia, serif1, serif} .article_description{font-family: Arial, sans1, sans-serif} .img_full{float: none} img{margin-bottom: 0.8em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -41,4 +42,6 @@ class Blic(BasicNewsRecipe):
|
|||||||
return url + '/print'
|
return url + '/print'
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
return self.adeify_images(soup)
|
return self.adeify_images(soup)
|
||||||
|
@ -15,6 +15,7 @@ class Chetnixploitation(BasicNewsRecipe):
|
|||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'blog'
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = True
|
use_embedded_content = True
|
||||||
@ -32,5 +33,3 @@ class Chetnixploitation(BasicNewsRecipe):
|
|||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
return self.adeify_images(soup)
|
return self.adeify_images(soup)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
@ -20,7 +21,9 @@ class Danas(BasicNewsRecipe):
|
|||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
masthead_url = 'http://www.danas.rs/images/basic/danas.gif'
|
masthead_url = 'http://www.danas.rs/images/basic/danas.gif'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body,.lokacija{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} .nadNaslov,h1,.preamble{font-family: Georgia,"Times New Roman",Times,serif1,serif} .antrfileText{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; margin-bottom: 0; margin-top: 0} h2,.datum,.lokacija,.autor{font-size: small} .antrfileNaslov{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; font-weight:bold; margin-bottom: 0; margin-top: 0} img{margin-bottom: 0.8em} '
|
publication_type = 'newspaper'
|
||||||
|
remove_empty_feeds = True
|
||||||
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body,.lokacija{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} .nadNaslov,h1,.preamble{font-family: Georgia,"Times New Roman",Times,serif1,serif} .antrfileText{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; margin-bottom: 0; margin-top: 0} h2,.datum,.lokacija,.autor{font-size: small} .antrfileNaslov{border-left: 2px solid #999999; margin-left: 0.8em; padding-left: 1.2em; font-weight:bold; margin-bottom: 0; margin-top: 0} img{margin-bottom: 0.8em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -38,10 +41,10 @@ class Danas(BasicNewsRecipe):
|
|||||||
,dict(name=['object','link','iframe'])
|
,dict(name=['object','link','iframe'])
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Politika' , u'http://www.danas.rs/rss/rss.asp?column_id=27')
|
(u'Politika' , u'http://www.danas.rs/rss/rss.asp?column_id=27')
|
||||||
,(u'Hronika' , u'http://www.danas.rs/rss/rss.asp?column_id=2' )
|
,(u'Hronika' , u'http://www.danas.rs/rss/rss.asp?column_id=2' )
|
||||||
,(u'Drustvo' , u'http://www.danas.rs/rss/rss.asp?column_id=24')
|
,(u'Dru\xc5\xa1tvo', u'http://www.danas.rs/rss/rss.asp?column_id=24')
|
||||||
,(u'Dijalog' , u'http://www.danas.rs/rss/rss.asp?column_id=1' )
|
,(u'Dijalog' , u'http://www.danas.rs/rss/rss.asp?column_id=1' )
|
||||||
,(u'Ekonomija', u'http://www.danas.rs/rss/rss.asp?column_id=6' )
|
,(u'Ekonomija', u'http://www.danas.rs/rss/rss.asp?column_id=6' )
|
||||||
,(u'Svet' , u'http://www.danas.rs/rss/rss.asp?column_id=25')
|
,(u'Svet' , u'http://www.danas.rs/rss/rss.asp?column_id=25')
|
||||||
@ -51,13 +54,14 @@ class Danas(BasicNewsRecipe):
|
|||||||
,(u'Scena' , u'http://www.danas.rs/rss/rss.asp?column_id=42')
|
,(u'Scena' , u'http://www.danas.rs/rss/rss.asp?column_id=42')
|
||||||
,(u'Feljton' , u'http://www.danas.rs/rss/rss.asp?column_id=19')
|
,(u'Feljton' , u'http://www.danas.rs/rss/rss.asp?column_id=19')
|
||||||
,(u'Periskop' , u'http://www.danas.rs/rss/rss.asp?column_id=4' )
|
,(u'Periskop' , u'http://www.danas.rs/rss/rss.asp?column_id=4' )
|
||||||
|
,(u'Famozno' , u'http://www.danas.rs/rss/rss.asp?column_id=47')
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
del item['style']
|
del item['style']
|
||||||
return soup
|
return self.adeify_images(soup)
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
return url + '&action=print'
|
return url + '&action=print'
|
||||||
|
|
||||||
|
@ -25,7 +25,12 @@ class DNAIndia(BasicNewsRecipe):
|
|||||||
('After Hours', 'http://www.dnaindia.com/syndication/rss,catid-7.xml'),
|
('After Hours', 'http://www.dnaindia.com/syndication/rss,catid-7.xml'),
|
||||||
('Digital Life', 'http://www.dnaindia.com/syndication/rss,catid-1089741.xml'),
|
('Digital Life', 'http://www.dnaindia.com/syndication/rss,catid-1089741.xml'),
|
||||||
]
|
]
|
||||||
remove_tags = [{'id':'footer'}, {'class':['bottom', 'categoryHead']}]
|
remove_tags = [{'id':['footer', 'lhs-col']}, {'class':['bottom', 'categoryHead',
|
||||||
|
'article_tools']}]
|
||||||
|
keep_only_tags = dict(id='middle-col')
|
||||||
|
remove_tags_after=[dict(attrs={'id':'story'})]
|
||||||
|
remove_attributes=['style']
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
match = re.search(r'newsid=(\d+)', url)
|
match = re.search(r'newsid=(\d+)', url)
|
||||||
|
@ -20,6 +20,7 @@ class E_novine(BasicNewsRecipe):
|
|||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newsportal'
|
||||||
masthead_url = 'http://www.e-novine.com/themes/e_novine/img/logo.gif'
|
masthead_url = 'http://www.e-novine.com/themes/e_novine/img/logo.gif'
|
||||||
extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Arial,Helvetica,sans1,sans-serif} img{float: none; margin-bottom: 0.8em} '
|
extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Arial,Helvetica,sans1,sans-serif} img{float: none; margin-bottom: 0.8em} '
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ class GlasSrpske(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
masthead_url = 'http://www.glassrpske.com/var/slike/glassrpske-logo.png'
|
masthead_url = 'http://www.glassrpske.com/var/slike/glassrpske-logo.png'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
INDEX = 'http://www.glassrpske.com'
|
INDEX = 'http://www.glassrpske.com'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} img{margin-bottom: 0.8em} '
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} img{margin-bottom: 0.8em} '
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ class GlasJavnosti(BasicNewsRecipe):
|
|||||||
no_stylesheets = False
|
no_stylesheets = False
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} '
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
harpers.org - paid subscription/ printed issue articles
|
harpers.org - paid subscription/ printed issue articles
|
||||||
This recipe only get's article's published in text format
|
This recipe only get's article's published in text format
|
||||||
@ -10,39 +8,40 @@ images and pdf's are ignored
|
|||||||
|
|
||||||
from calibre import strftime
|
from calibre import strftime
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Harpers_full(BasicNewsRecipe):
|
class Harpers_full(BasicNewsRecipe):
|
||||||
title = u"Harper's Magazine - articles from printed edition"
|
title = "Harper's Magazine - articles from printed edition"
|
||||||
__author__ = u'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = u"Harper's Magazine: Founded June 1850."
|
description = "Harper's Magazine: Founded June 1850."
|
||||||
publisher = "Harpers's"
|
publisher = "Harpers's"
|
||||||
category = 'news, politics, USA'
|
category = 'news, politics, USA'
|
||||||
oldest_article = 30
|
oldest_article = 30
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
delay = 1
|
delay = 1
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
needs_subscription = True
|
||||||
|
masthead_url = 'http://www.harpers.org/media/image/Harpers_305x100.gif'
|
||||||
|
publication_type = 'magazine'
|
||||||
|
INDEX = strftime('http://www.harpers.org/archive/%Y/%m')
|
||||||
|
LOGIN = 'http://www.harpers.org'
|
||||||
|
cover_url = strftime('http://www.harpers.org/media/pages/%Y/%m/gif/0001.gif')
|
||||||
|
extra_css = ' body{font-family: "Georgia",serif} '
|
||||||
|
|
||||||
needs_subscription = True
|
conversion_options = {
|
||||||
INDEX = strftime('http://www.harpers.org/archive/%Y/%m')
|
'comment' : description
|
||||||
LOGIN = 'http://www.harpers.org'
|
, 'tags' : category
|
||||||
cover_url = strftime('http://www.harpers.org/media/pages/%Y/%m/gif/0001.gif')
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
html2lrf_options = [
|
}
|
||||||
'--comment', description
|
|
||||||
, '--category', category
|
|
||||||
, '--publisher', publisher
|
|
||||||
]
|
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"\noverride_css=" p {text-indent: 0em; margin-top: 0em; margin-bottom: 0.5em} img {margin-top: 0em; margin-bottom: 0.4em}"'
|
|
||||||
|
|
||||||
keep_only_tags = [ dict(name='div', attrs={'id':'cached'}) ]
|
keep_only_tags = [ dict(name='div', attrs={'id':'cached'}) ]
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='table', attrs={'class':['rcnt','rcnt topline']})
|
dict(name='table', attrs={'class':['rcnt','rcnt topline']})
|
||||||
,dict(name='link')
|
,dict(name='link')
|
||||||
]
|
]
|
||||||
|
remove_attributes=['xmlns']
|
||||||
|
|
||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
br = BasicNewsRecipe.get_browser()
|
br = BasicNewsRecipe.get_browser()
|
||||||
@ -71,12 +70,3 @@ class Harpers_full(BasicNewsRecipe):
|
|||||||
,'description':''
|
,'description':''
|
||||||
})
|
})
|
||||||
return [(soup.head.title.string, articles)]
|
return [(soup.head.title.string, articles)]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
|
||||||
mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=utf-8")])
|
|
||||||
soup.head.insert(1,mcharset)
|
|
||||||
for item in soup.findAll(style=True):
|
|
||||||
del item['style']
|
|
||||||
for item in soup.findAll(xmlns=True):
|
|
||||||
del item['xmlns']
|
|
||||||
return soup
|
|
||||||
|
@ -9,15 +9,16 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
|
|
||||||
|
|
||||||
class heiseDe(BasicNewsRecipe):
|
class heiseDe(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'heise'
|
title = 'heise'
|
||||||
description = 'Computernews from Germany'
|
description = 'Computernews from Germany'
|
||||||
__author__ = 'Oliver Niesner'
|
__author__ = 'Oliver Niesner'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
|
language = 'de'
|
||||||
timefmt = ' [%d %b %Y]'
|
timefmt = ' [%d %b %Y]'
|
||||||
max_articles_per_feed = 40
|
max_articles_per_feed = 40
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
|
||||||
remove_tags = [dict(id='navi_top'),
|
remove_tags = [dict(id='navi_top'),
|
||||||
dict(id='navi_bottom'),
|
dict(id='navi_bottom'),
|
||||||
dict(id='logo'),
|
dict(id='logo'),
|
||||||
@ -35,8 +36,8 @@ class heiseDe(BasicNewsRecipe):
|
|||||||
dict(name='p', attrs={'class':'news_navi'}),
|
dict(name='p', attrs={'class':'news_navi'}),
|
||||||
dict(name='div', attrs={'class':'news_foren'})]
|
dict(name='div', attrs={'class':'news_foren'})]
|
||||||
remove_tags_after = [dict(name='div', attrs={'class':'news_foren'})]
|
remove_tags_after = [dict(name='div', attrs={'class':'news_foren'})]
|
||||||
|
|
||||||
feeds = [ ('heise', 'http://www.heise.de/newsticker/heise.rdf') ]
|
feeds = [ ('heise', 'http://www.heise.de/newsticker/heise.rdf') ]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
53
resources/recipes/hindu_business_line.recipe
Normal file
53
resources/recipes/hindu_business_line.recipe
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
from __future__ import with_statement
|
||||||
|
__license__ = 'GPL 3'
|
||||||
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
|
|
||||||
|
import re
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class TheHindu(BasicNewsRecipe):
|
||||||
|
title = u'The Business Line'
|
||||||
|
language = 'en_IN'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
__author__ = 'Dhiru'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
remove_tags_before = {'name':'font', 'class':'storyhead'}
|
||||||
|
preprocess_regexps = [
|
||||||
|
(re.compile(r'<!-- story ends -->.*', re.DOTALL),
|
||||||
|
lambda match: '</body></html>'),
|
||||||
|
]
|
||||||
|
extra_css = '''
|
||||||
|
.storyhead{font-family:Arial,Helvetica,sans-serif; font-size:large; color:#000099;}
|
||||||
|
body{font-family:Verdana,Arial,Helvetica,sans-serif; font-size:x-small; text-align:left;}
|
||||||
|
'''
|
||||||
|
feeds = [
|
||||||
|
(u'Main - Latest News', u'http://www.thehindubusinessline.com/rss/blnus.xml'),
|
||||||
|
(u'Main - Front Page', u'http://www.thehindubusinessline.com/rss/14hdline.xml'),
|
||||||
|
(u'Main - Corporate', u'http://www.thehindubusinessline.com/rss/02hdline.xml'),
|
||||||
|
(u'Main - Market', u'http://www.thehindubusinessline.com/rss/05hdline.xml'),
|
||||||
|
(u'Main - Opinion', u'http://www.thehindubusinessline.com/rss/04hdline.xml'),
|
||||||
|
(u'Main - Infotech', u'http://www.thehindubusinessline.com/rss/15hdline.xml'),
|
||||||
|
(u'Main - Marketing', u'http://www.thehindubusinessline.com/rss/19hdline.xml'),
|
||||||
|
(u'Main - Money & banking',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/06hdline.xml'),
|
||||||
|
(u'Main - Agri & Commodities', u'http://www.thehindubusinessline.com/rss/07hdline.xml'),
|
||||||
|
(u'Industry',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/03hdline.xml'),
|
||||||
|
(u'Logistic',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/09hdline.xml'),
|
||||||
|
(u'Result', u'http://www.thehindubusinessline.com/rss/26hdline.xml'),
|
||||||
|
(u'Government',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/27hdline.xml'),
|
||||||
|
(u'Investment World',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/iw20hdline.xml'),
|
||||||
|
(u'Supplement - Life',
|
||||||
|
u'http://www.thehindubusinessline.com/rss/lf10hdline.xml')
|
||||||
|
]
|
||||||
|
|
||||||
|
def postprocess_html(self, soup, first_fetch):
|
||||||
|
for t in soup.findAll(['table', 'tr', 'td','center']):
|
||||||
|
t.name = 'div'
|
||||||
|
return soup
|
@ -4,7 +4,7 @@ import re
|
|||||||
class SmeRecipe(BasicNewsRecipe):
|
class SmeRecipe(BasicNewsRecipe):
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__author__ = 'Abelturd'
|
__author__ = 'Abelturd'
|
||||||
language = 'cz'
|
language = 'cs'
|
||||||
version = 1
|
version = 1
|
||||||
|
|
||||||
title = u'iLiteratura.cz'
|
title = u'iLiteratura.cz'
|
||||||
|
@ -10,7 +10,7 @@ class IrishIndependent(BasicNewsRecipe):
|
|||||||
title = u'Irish Independent'
|
title = u'Irish Independent'
|
||||||
description = 'Irish and World news from Irelands Bestselling Daily Broadsheet'
|
description = 'Irish and World news from Irelands Bestselling Daily Broadsheet'
|
||||||
__author__ = 'Neil Grogan'
|
__author__ = 'Neil Grogan'
|
||||||
language = 'en_GB'
|
language = 'en_IE'
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
remove_tags_before = dict(id='article')
|
remove_tags_before = dict(id='article')
|
||||||
|
@ -10,7 +10,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
class IrishTimes(BasicNewsRecipe):
|
class IrishTimes(BasicNewsRecipe):
|
||||||
title = u'The Irish Times'
|
title = u'The Irish Times'
|
||||||
__author__ = "Derry FitzGerald, Ray Kinsella and David O'Callaghan"
|
__author__ = "Derry FitzGerald, Ray Kinsella and David O'Callaghan"
|
||||||
language = 'en'
|
language = 'en_IE'
|
||||||
timefmt = ' (%A, %B %d, %Y)'
|
timefmt = ' (%A, %B %d, %Y)'
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ class JournalofHospitalMedicine(BasicNewsRecipe):
|
|||||||
description = 'Medical news'
|
description = 'Medical news'
|
||||||
timefmt = ' [%d %b, %Y]'
|
timefmt = ' [%d %b, %Y]'
|
||||||
needs_subscription = True
|
needs_subscription = True
|
||||||
|
language = 'en'
|
||||||
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
#remove_tags_before = dict(name='div', attrs={'align':'center'})
|
#remove_tags_before = dict(name='div', attrs={'align':'center'})
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
mondediplo.com
|
mondediplo.com
|
||||||
'''
|
'''
|
||||||
@ -21,11 +19,14 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe):
|
|||||||
delay = 1
|
delay = 1
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
needs_subscription = True
|
needs_subscription = True
|
||||||
|
masthead_url = 'http://mondediplo.com/squelettes/pics/logo-30.gif'
|
||||||
|
publication_type = 'magazine'
|
||||||
PREFIX = 'http://mondediplo.com/'
|
PREFIX = 'http://mondediplo.com/'
|
||||||
LOGIN = PREFIX + '2009/09/02congo'
|
LOGIN = PREFIX + '2009/09/02congo'
|
||||||
INDEX = PREFIX + strftime('%Y/%m/')
|
INDEX = PREFIX + strftime('%Y/%m/')
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
extra_css = ' body{font-family: "Luxi sans","Lucida sans","Lucida Grande",Lucida,"Lucida Sans Unicode",sans-serif} .surtitre{font-size: 1.2em; font-variant: small-caps; margin-bottom: 0.5em} .chapo{font-size: 1.2em; font-weight: bold; margin: 1em 0 0.5em} .texte{font-family: Georgia,"Times New Roman",serif} h1{color: #990000} .notes{border-top: 1px solid #CCCCCC; font-size: 0.9em; line-height: 1.4em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -45,7 +46,10 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe):
|
|||||||
br.open(self.LOGIN,data)
|
br.open(self.LOGIN,data)
|
||||||
return br
|
return br
|
||||||
|
|
||||||
keep_only_tags =[dict(name='div', attrs={'id':'contenu'})]
|
keep_only_tags =[
|
||||||
|
dict(name='div', attrs={'id':'contenu'})
|
||||||
|
, dict(name='div',attrs={'class':'notes surlignable'})
|
||||||
|
]
|
||||||
remove_tags = [dict(name=['object','link','script','iframe','base'])]
|
remove_tags = [dict(name=['object','link','script','iframe','base'])]
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
|
13
resources/recipes/midday.recipe
Normal file
13
resources/recipes/midday.recipe
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from calibre.web.feeds.news import CalibrePeriodical
|
||||||
|
|
||||||
|
class MiDDay(CalibrePeriodical):
|
||||||
|
|
||||||
|
title = 'MiDDay'
|
||||||
|
calibre_periodicals_slug = 'midday'
|
||||||
|
|
||||||
|
description = '''Get your dose of the latest news, views and fun - from the
|
||||||
|
world of politics, sports and Bollywood to the cartoons, comics and games of
|
||||||
|
the entertainment section - India’s leading tabloid has it all. To subscribe
|
||||||
|
visit <a href="http://news.calibre-ebook.com/periodical/midday">calibre
|
||||||
|
Periodicals</a>.'''
|
||||||
|
language = 'en_IN'
|
@ -25,7 +25,8 @@ class Nin(BasicNewsRecipe):
|
|||||||
LOGIN = PREFIX + '/?logout=true'
|
LOGIN = PREFIX + '/?logout=true'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana, Lucida, sans1, sans-serif} .article_description{font-family: Verdana, Lucida, sans1, sans-serif} .artTitle{font-size: x-large; font-weight: bold; color: #900} .izjava{font-size: x-large; font-weight: bold} .columnhead{font-size: small; font-weight: bold;} img{margin-top:0.5em; margin-bottom: 0.7em} b{margin-top: 1em} '
|
publication_type = 'magazine'
|
||||||
|
extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana, Lucida, sans1, sans-serif} .article_description{font-family: Verdana, Lucida, sans1, sans-serif} .artTitle{font-size: x-large; font-weight: bold; color: #900} .izjava{font-size: x-large; font-weight: bold} .columnhead{font-size: small; font-weight: bold;} img{margin-top:0.5em; margin-bottom: 0.7em} b{margin-top: 1em} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
novosti.rs
|
novosti.rs
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Novosti(BasicNewsRecipe):
|
class Novosti(BasicNewsRecipe):
|
||||||
title = 'Vecernje Novosti'
|
title = 'Vecernje Novosti'
|
||||||
@ -21,17 +19,16 @@ class Novosti(BasicNewsRecipe):
|
|||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
lang = 'sr-Latn-RS'
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Tahoma,Arial,Helvetica,sans1,sans-serif} '
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}'
|
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
, 'publisher' : publisher
|
, 'publisher' : publisher
|
||||||
, 'language' : lang
|
, 'language' : language
|
||||||
, 'pretty_print' : True
|
, 'linearize_tables' : True
|
||||||
}
|
}
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
||||||
@ -42,17 +39,6 @@ class Novosti(BasicNewsRecipe):
|
|||||||
feeds = [(u'Vesti', u'http://www.novosti.rs/php/vesti/rss.php')]
|
feeds = [(u'Vesti', u'http://www.novosti.rs/php/vesti/rss.php')]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)])
|
for item in soup.findAll(style=True):
|
||||||
soup.head.insert(0,mlang)
|
del item['style']
|
||||||
attribs = [ 'style','font','valign'
|
return self.adeify_images(soup)
|
||||||
,'colspan','width','height'
|
|
||||||
,'rowspan','summary','align'
|
|
||||||
,'cellspacing','cellpadding'
|
|
||||||
,'frames','rules','border'
|
|
||||||
]
|
|
||||||
for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']):
|
|
||||||
item.name = 'div'
|
|
||||||
for attrib in attribs:
|
|
||||||
if item.has_key(attrib):
|
|
||||||
del item[attrib]
|
|
||||||
return soup
|
|
||||||
|
@ -20,6 +20,7 @@ class Nspm(BasicNewsRecipe):
|
|||||||
INDEX = 'http://www.nspm.rs/?alphabet=l'
|
INDEX = 'http://www.nspm.rs/?alphabet=l'
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'magazine'
|
||||||
masthead_url = 'http://www.nspm.rs/templates/jsn_epic_pro/images/logol.jpg'
|
masthead_url = 'http://www.nspm.rs/templates/jsn_epic_pro/images/logol.jpg'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{text-align: justify; font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}'
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{text-align: justify; font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}'
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ class NursingTimes(BasicNewsRecipe):
|
|||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
publisher = 'emap'
|
publisher = 'emap'
|
||||||
category = 'news, health, nursing, UK'
|
category = 'news, health, nursing, UK'
|
||||||
language = 'en-UK'
|
language = 'en_GB'
|
||||||
needs_subscription = True
|
needs_subscription = True
|
||||||
LOGIN = 'http://www.nursingtimes.net/sign-in'
|
LOGIN = 'http://www.nursingtimes.net/sign-in'
|
||||||
|
|
||||||
|
36
resources/recipes/nypost.recipe
Normal file
36
resources/recipes/nypost.recipe
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
nypost.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class NYPost(BasicNewsRecipe):
|
||||||
|
title = 'New York Post'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'Daily newspaper'
|
||||||
|
publisher = 'NYP Holdings, Inc.'
|
||||||
|
category = 'news, politics, USA'
|
||||||
|
oldest_article = 2
|
||||||
|
max_articles_per_feed = 200
|
||||||
|
no_stylesheets = True
|
||||||
|
encoding = 'utf8'
|
||||||
|
use_embedded_content = False
|
||||||
|
language = 'en'
|
||||||
|
masthead_url = 'http://www.nypost.com/rw/SysConfig/WebPortal/nypost/images/nyp_logo_230x32.gif'
|
||||||
|
extra_css = ' body{font-family: Arial,Helvetica,sans-serif } img{margin-bottom: 0.4em} '
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_only_tags=[dict(name='div', attrs={'id':'story'})]
|
||||||
|
|
||||||
|
feeds = [(u'Articles', u'http://www.nypost.com/rss/all_section.xml')]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url.replace('nypost.com/p/','nypost.com/f/print/')
|
@ -5,16 +5,18 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
|||||||
'''
|
'''
|
||||||
nytimes.com
|
nytimes.com
|
||||||
'''
|
'''
|
||||||
import re, time
|
import re
|
||||||
|
import time
|
||||||
from calibre import entity_to_unicode
|
from calibre import entity_to_unicode
|
||||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString, Comment
|
from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString, \
|
||||||
|
Comment, BeautifulStoneSoup
|
||||||
|
|
||||||
class NYTimes(BasicNewsRecipe):
|
class NYTimes(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'New York Times Top Stories'
|
title = 'New York Times Top Stories'
|
||||||
__author__ = 'GRiker'
|
__author__ = 'GRiker'
|
||||||
language = 'en'
|
language = _('English')
|
||||||
description = 'Top Stories from the New York Times'
|
description = 'Top Stories from the New York Times'
|
||||||
|
|
||||||
# List of sections typically included in Top Stories. Use a keyword from the
|
# List of sections typically included in Top Stories. Use a keyword from the
|
||||||
@ -39,9 +41,6 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
'world' : 'World'
|
'world' : 'World'
|
||||||
}
|
}
|
||||||
|
|
||||||
# By default, no sections are skipped.
|
|
||||||
excludeSectionKeywords = []
|
|
||||||
|
|
||||||
# Add section keywords from the right column above to skip that section
|
# Add section keywords from the right column above to skip that section
|
||||||
# For example, to skip sections containing the word 'Sports' or 'Dining', use:
|
# For example, to skip sections containing the word 'Sports' or 'Dining', use:
|
||||||
# excludeSectionKeywords = ['Sports', 'Dining']
|
# excludeSectionKeywords = ['Sports', 'Dining']
|
||||||
@ -49,36 +48,138 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
# excludeSectionKeywords = ['Arts','Dining','Editorials','Health','Magazine','Media','Region','Op-Ed','Politics','Science','Sports','Top Stories','Travel','U.S.','World']
|
# excludeSectionKeywords = ['Arts','Dining','Editorials','Health','Magazine','Media','Region','Op-Ed','Politics','Science','Sports','Top Stories','Travel','U.S.','World']
|
||||||
# Fetch only Top Stories
|
# Fetch only Top Stories
|
||||||
# excludeSectionKeywords = ['Arts','Business','Dining','Editorials','Health','Magazine','Media','Region','Op-Ed','Politics','Science','Sports','Technology','Travel','U.S.','World']
|
# excludeSectionKeywords = ['Arts','Business','Dining','Editorials','Health','Magazine','Media','Region','Op-Ed','Politics','Science','Sports','Technology','Travel','U.S.','World']
|
||||||
|
# By default, no sections are skipped.
|
||||||
|
excludeSectionKeywords = []
|
||||||
|
|
||||||
|
# one_picture_per_article specifies that calibre should only use the first image
|
||||||
|
# from an article (if one exists). If one_picture_per_article = True, the image
|
||||||
|
# will be moved to a location between the headline and the byline.
|
||||||
|
# If one_picture_per_article = False, all images from the article will be included
|
||||||
|
# and shown in their original location.
|
||||||
|
one_picture_per_article = True
|
||||||
|
|
||||||
# The maximum number of articles that will be downloaded
|
# The maximum number of articles that will be downloaded
|
||||||
max_articles_per_feed = 40
|
max_articles_per_feed = 40
|
||||||
|
|
||||||
timefmt = ''
|
timefmt = ''
|
||||||
needs_subscription = True
|
needs_subscription = True
|
||||||
keep_only_tags = [ dict(attrs={ 'id':['article']}),
|
masthead_url = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif'
|
||||||
dict(attrs={'class':['blog wrap']}) ]
|
|
||||||
|
|
||||||
remove_tags = [ dict(attrs={'class':['nextArticleLink clearfix', 'clearfix',
|
remove_tags_before = dict(id='article')
|
||||||
'inlineVideo left brightcove', 'entry-meta']}),
|
remove_tags_after = dict(id='article')
|
||||||
dict(attrs={ 'id':['toolsRight','inlineBox','sidebarArticles',
|
remove_tags = [dict(attrs={'class':[
|
||||||
'portfolioInline','articleInline','readerscomment',
|
'articleFooter',
|
||||||
'nytRating']}) ]
|
'articleTools',
|
||||||
|
'columnGroup doubleRule',
|
||||||
|
'columnGroup singleRule',
|
||||||
|
'columnGroup last',
|
||||||
|
'columnGroup last',
|
||||||
|
'doubleRule',
|
||||||
|
'dottedLine',
|
||||||
|
'entry-meta',
|
||||||
|
'icon enlargeThis',
|
||||||
|
'leftNavTabs',
|
||||||
|
'module box nav',
|
||||||
|
'nextArticleLink',
|
||||||
|
'nextArticleLink clearfix',
|
||||||
|
'post-tools',
|
||||||
|
'relatedSearchesModule',
|
||||||
|
'side_tool',
|
||||||
|
'singleAd',
|
||||||
|
'subNavigation tabContent active clearfix',
|
||||||
|
]}),
|
||||||
|
dict(id=[
|
||||||
|
'adxLeaderboard',
|
||||||
|
'archive',
|
||||||
|
'articleExtras',
|
||||||
|
'articleInline',
|
||||||
|
'blog_sidebar',
|
||||||
|
'cCol',
|
||||||
|
'entertainmentSearchBar',
|
||||||
|
'footer',
|
||||||
|
'header',
|
||||||
|
'header_search',
|
||||||
|
'login',
|
||||||
|
'masthead',
|
||||||
|
'memberTools',
|
||||||
|
'navigation',
|
||||||
|
'portfolioInline',
|
||||||
|
'relatedArticles',
|
||||||
|
'side_search',
|
||||||
|
'side_index',
|
||||||
|
'side_tool',
|
||||||
|
'toolsRight',
|
||||||
|
]),
|
||||||
|
dict(name=['script', 'noscript', 'style'])]
|
||||||
|
|
||||||
encoding = 'cp1252'
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
extra_css = '.headline {text-align: left;}\n \
|
extra_css = '.headline {text-align: left;}\n \
|
||||||
.byline {font-family: monospace; \
|
.byline {font-family: monospace; \
|
||||||
text-align: left; \
|
text-align: left; \
|
||||||
|
margin-top: 0px; \
|
||||||
|
margin-bottom: 0px;}\n \
|
||||||
|
.dateline {font-size: small; \
|
||||||
|
margin-top: 0px; \
|
||||||
|
margin-bottom: 0px;}\n \
|
||||||
|
.timestamp {font-size: small; \
|
||||||
|
margin-top: 0px; \
|
||||||
margin-bottom: 0px;}\n \
|
margin-bottom: 0px;}\n \
|
||||||
.timestamp {font-size: smaller;}\n \
|
|
||||||
.source {text-align: left;}\n \
|
.source {text-align: left;}\n \
|
||||||
.image {text-align: center;}\n \
|
.image {text-align: center;}\n \
|
||||||
.credit {text-align: right; \
|
.credit {text-align: right; \
|
||||||
font-size: smaller;}\n \
|
font-size: small; \
|
||||||
|
margin-top: 0px; \
|
||||||
|
margin-bottom: 0px;}\n \
|
||||||
.articleBody {text-align: left;}\n \
|
.articleBody {text-align: left;}\n \
|
||||||
.authorId {text-align: left; \
|
.authorId {text-align: left; \
|
||||||
font-style: italic;}\n '
|
font-style: italic;}\n '
|
||||||
|
|
||||||
|
def dump_ans(self, ans) :
|
||||||
|
total_article_count = 0
|
||||||
|
for section in ans :
|
||||||
|
if self.verbose:
|
||||||
|
self.log("section %s: %d articles" % (section[0], len(section[1])) )
|
||||||
|
for article in section[1]:
|
||||||
|
total_article_count += 1
|
||||||
|
if self.verbose:
|
||||||
|
self.log("\t%-40.40s... \t%-60.60s..." % (article['title'].encode('cp1252','replace'),
|
||||||
|
article['url'].encode('cp1252','replace')))
|
||||||
|
self.log( "Queued %d articles" % total_article_count )
|
||||||
|
|
||||||
|
def fixChars(self,string):
|
||||||
|
# Replace lsquo (\x91)
|
||||||
|
fixed = re.sub("\x91","‘",string)
|
||||||
|
|
||||||
|
# Replace rsquo (\x92)
|
||||||
|
fixed = re.sub("\x92","’",fixed)
|
||||||
|
|
||||||
|
# Replace ldquo (\x93)
|
||||||
|
fixed = re.sub("\x93","“",fixed)
|
||||||
|
|
||||||
|
# Replace rdquo (\x94)
|
||||||
|
fixed = re.sub("\x94","”",fixed)
|
||||||
|
|
||||||
|
# Replace ndash (\x96)
|
||||||
|
fixed = re.sub("\x96","–",fixed)
|
||||||
|
|
||||||
|
# Replace mdash (\x97)
|
||||||
|
fixed = re.sub("\x97","—",fixed)
|
||||||
|
|
||||||
|
return fixed
|
||||||
|
|
||||||
|
def get_browser(self):
|
||||||
|
br = BasicNewsRecipe.get_browser()
|
||||||
|
if self.username is not None and self.password is not None:
|
||||||
|
try:
|
||||||
|
br.open('http://www.nytimes.com/auth/login')
|
||||||
|
br.select_form(name='login')
|
||||||
|
br['USERID'] = self.username
|
||||||
|
br['PASSWORD'] = self.password
|
||||||
|
br.submit()
|
||||||
|
except:
|
||||||
|
self.log("\nFailed to login")
|
||||||
|
return br
|
||||||
|
|
||||||
def get_cover_url(self):
|
def get_cover_url(self):
|
||||||
cover = None
|
cover = None
|
||||||
st = time.localtime()
|
st = time.localtime()
|
||||||
@ -94,26 +195,6 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
cover = None
|
cover = None
|
||||||
return cover
|
return cover
|
||||||
|
|
||||||
def get_masthead_url(self):
|
|
||||||
masthead = 'http://graphics8.nytimes.com/images/misc/nytlogo379x64.gif'
|
|
||||||
br = BasicNewsRecipe.get_browser()
|
|
||||||
try:
|
|
||||||
br.open(masthead)
|
|
||||||
except:
|
|
||||||
self.log("\nCover unavailable")
|
|
||||||
masthead = None
|
|
||||||
return masthead
|
|
||||||
|
|
||||||
def get_browser(self):
|
|
||||||
br = BasicNewsRecipe.get_browser()
|
|
||||||
if self.username is not None and self.password is not None:
|
|
||||||
br.open('http://www.nytimes.com/auth/login')
|
|
||||||
br.select_form(name='login')
|
|
||||||
br['USERID'] = self.username
|
|
||||||
br['PASSWORD'] = self.password
|
|
||||||
br.submit()
|
|
||||||
return br
|
|
||||||
|
|
||||||
def index_to_soup(self, url_or_raw, raw=False):
|
def index_to_soup(self, url_or_raw, raw=False):
|
||||||
'''
|
'''
|
||||||
OVERRIDE of class method
|
OVERRIDE of class method
|
||||||
@ -138,6 +219,7 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
return BeautifulSoup(_raw, markupMassage=massage)
|
return BeautifulSoup(_raw, markupMassage=massage)
|
||||||
|
|
||||||
# Entry point
|
# Entry point
|
||||||
|
print "index_to_soup()"
|
||||||
soup = get_the_soup( self.encoding, url_or_raw )
|
soup = get_the_soup( self.encoding, url_or_raw )
|
||||||
contentType = soup.find(True,attrs={'http-equiv':'Content-Type'})
|
contentType = soup.find(True,attrs={'http-equiv':'Content-Type'})
|
||||||
docEncoding = str(contentType)[str(contentType).find('charset=') + len('charset='):str(contentType).rfind('"')]
|
docEncoding = str(contentType)[str(contentType).find('charset=') + len('charset='):str(contentType).rfind('"')]
|
||||||
@ -151,6 +233,16 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
|
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
def massageNCXText(self, description):
|
||||||
|
# Kindle TOC descriptions won't render certain characters
|
||||||
|
if description:
|
||||||
|
massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
|
||||||
|
# Replace '&' with '&'
|
||||||
|
massaged = re.sub("&","&", massaged)
|
||||||
|
return self.fixChars(massaged)
|
||||||
|
else:
|
||||||
|
return description
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
articles = {}
|
articles = {}
|
||||||
ans = []
|
ans = []
|
||||||
@ -158,6 +250,7 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
feed = key = 'All Top Stories'
|
feed = key = 'All Top Stories'
|
||||||
articles[key] = []
|
articles[key] = []
|
||||||
ans.append(key)
|
ans.append(key)
|
||||||
|
self.log("Scanning 1 section ...")
|
||||||
|
|
||||||
soup = self.index_to_soup('http://www.nytimes.com/pages/todaysheadlines/')
|
soup = self.index_to_soup('http://www.nytimes.com/pages/todaysheadlines/')
|
||||||
|
|
||||||
@ -191,8 +284,9 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
skipThisSection = False
|
skipThisSection = False
|
||||||
|
todays_article_count = 0
|
||||||
# Within this table are <font face="times new roman, times, san serif"> entries
|
# Within this table are <font face="times new roman, times, san serif"> entries
|
||||||
|
self.log("Fetching feed Top Stories")
|
||||||
for tr in storyblock.findAllNext('tr'):
|
for tr in storyblock.findAllNext('tr'):
|
||||||
if tr.find('span') is not None :
|
if tr.find('span') is not None :
|
||||||
|
|
||||||
@ -244,6 +338,7 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
|
|
||||||
# Fetch the article titles and URLs
|
# Fetch the article titles and URLs
|
||||||
articleCount = len(sectionblock.findAll('span'))
|
articleCount = len(sectionblock.findAll('span'))
|
||||||
|
todays_article_count += articleCount
|
||||||
for (i,span) in enumerate(sectionblock.findAll(attrs={'class':'headlineWrapper'})) :
|
for (i,span) in enumerate(sectionblock.findAll(attrs={'class':'headlineWrapper'})) :
|
||||||
a = span.find('a', href=True)
|
a = span.find('a', href=True)
|
||||||
url = re.sub(r'\?.*', '', a['href'])
|
url = re.sub(r'\?.*', '', a['href'])
|
||||||
@ -277,6 +372,7 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
|
|
||||||
if duplicateFound:
|
if duplicateFound:
|
||||||
# Continue fetching, don't add this article
|
# Continue fetching, don't add this article
|
||||||
|
todays_article_count -= 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not articles.has_key(feed):
|
if not articles.has_key(feed):
|
||||||
@ -284,11 +380,138 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
articles[feed].append(
|
articles[feed].append(
|
||||||
dict(title=title, url=url, date=pubdate,
|
dict(title=title, url=url, date=pubdate,
|
||||||
description=description, author=author, content=''))
|
description=description, author=author, content=''))
|
||||||
|
# self.log("Queuing %d articles from %s" % (todays_article_count, "Top Stories"))
|
||||||
|
|
||||||
ans = self.sort_index_by(ans, {'Top Stories':-1})
|
ans = self.sort_index_by(ans, {'Top Stories':-1})
|
||||||
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
|
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
|
||||||
|
self.dump_ans(ans)
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.strip_anchors(soup)
|
||||||
|
|
||||||
|
def postprocess_html(self,soup, True):
|
||||||
|
|
||||||
|
if self.one_picture_per_article:
|
||||||
|
# Remove all images after first
|
||||||
|
largeImg = soup.find(True, {'class':'articleSpanImage'})
|
||||||
|
inlineImgs = soup.findAll(True, {'class':'inlineImage module'})
|
||||||
|
if largeImg:
|
||||||
|
for inlineImg in inlineImgs:
|
||||||
|
inlineImg.extract()
|
||||||
|
else:
|
||||||
|
if inlineImgs:
|
||||||
|
firstImg = inlineImgs[0]
|
||||||
|
for inlineImg in inlineImgs[1:]:
|
||||||
|
inlineImg.extract()
|
||||||
|
# Move firstImg after headline
|
||||||
|
cgFirst = soup.find(True, {'class':'columnGroup first'})
|
||||||
|
if cgFirst:
|
||||||
|
# Strip all sibling NavigableStrings: noise
|
||||||
|
navstrings = cgFirst.findAll(text=True, recursive=False)
|
||||||
|
[ns.extract() for ns in navstrings]
|
||||||
|
headline_found = False
|
||||||
|
tag = cgFirst.find(True)
|
||||||
|
insertLoc = 0
|
||||||
|
while True:
|
||||||
|
insertLoc += 1
|
||||||
|
if hasattr(tag,'class') and tag['class'] == 'articleHeadline':
|
||||||
|
headline_found = True
|
||||||
|
break
|
||||||
|
tag = tag.nextSibling
|
||||||
|
if not tag:
|
||||||
|
headline_found = False
|
||||||
|
break
|
||||||
|
if headline_found:
|
||||||
|
cgFirst.insert(insertLoc,firstImg)
|
||||||
|
else:
|
||||||
|
self.log(">>> No class:'columnGroup first' found <<<")
|
||||||
|
# Change class="kicker" to <h3>
|
||||||
|
kicker = soup.find(True, {'class':'kicker'})
|
||||||
|
if kicker and kicker.contents[0]:
|
||||||
|
h3Tag = Tag(soup, "h3")
|
||||||
|
h3Tag.insert(0, self.fixChars(self.tag_to_string(kicker,
|
||||||
|
use_alt=False)))
|
||||||
|
kicker.replaceWith(h3Tag)
|
||||||
|
|
||||||
|
# Change captions to italic -1
|
||||||
|
for caption in soup.findAll(True, {'class':'caption'}) :
|
||||||
|
if caption and caption.contents[0]:
|
||||||
|
emTag = Tag(soup, "em")
|
||||||
|
c = self.fixChars(self.tag_to_string(caption,use_alt=False)).strip()
|
||||||
|
mp_off = c.find("More Photos")
|
||||||
|
if mp_off >= 0:
|
||||||
|
c = c[:mp_off]
|
||||||
|
emTag.insert(0, c)
|
||||||
|
hrTag = Tag(soup, 'hr')
|
||||||
|
#hrTag['style'] = "margin-top:0em;margin-bottom:0em"
|
||||||
|
emTag.insert(1, hrTag)
|
||||||
|
caption.replaceWith(emTag)
|
||||||
|
|
||||||
|
# Change <nyt_headline> to <h2>
|
||||||
|
h1 = soup.find('h1')
|
||||||
|
if h1:
|
||||||
|
headline = h1.find("nyt_headline")
|
||||||
|
if headline:
|
||||||
|
tag = Tag(soup, "h2")
|
||||||
|
tag['class'] = "headline"
|
||||||
|
tag.insert(0, self.fixChars(headline.contents[0]))
|
||||||
|
h1.replaceWith(tag)
|
||||||
|
else:
|
||||||
|
# Blog entry - replace headline, remove <hr> tags
|
||||||
|
headline = soup.find('title')
|
||||||
|
if headline:
|
||||||
|
tag = Tag(soup, "h2")
|
||||||
|
tag['class'] = "headline"
|
||||||
|
tag.insert(0, self.fixChars(headline.contents[0]))
|
||||||
|
soup.insert(0, tag)
|
||||||
|
hrs = soup.findAll('hr')
|
||||||
|
for hr in hrs:
|
||||||
|
hr.extract()
|
||||||
|
|
||||||
|
# Change <h1> to <h3> - used in editorial blogs
|
||||||
|
masthead = soup.find("h1")
|
||||||
|
if masthead:
|
||||||
|
# Nuke the href
|
||||||
|
if masthead.a:
|
||||||
|
del(masthead.a['href'])
|
||||||
|
tag = Tag(soup, "h3")
|
||||||
|
tag.insert(0, self.fixChars(masthead.contents[0]))
|
||||||
|
masthead.replaceWith(tag)
|
||||||
|
|
||||||
|
# Change <span class="bold"> to <b>
|
||||||
|
for subhead in soup.findAll(True, {'class':'bold'}) :
|
||||||
|
if subhead.contents:
|
||||||
|
bTag = Tag(soup, "b")
|
||||||
|
bTag.insert(0, subhead.contents[0])
|
||||||
|
subhead.replaceWith(bTag)
|
||||||
|
|
||||||
|
# Synthesize a section header
|
||||||
|
dsk = soup.find('meta', attrs={'name':'dsk'})
|
||||||
|
if dsk and dsk.has_key('content'):
|
||||||
|
hTag = Tag(soup,'h3')
|
||||||
|
hTag['class'] = 'section'
|
||||||
|
hTag.insert(0,NavigableString(dsk['content']))
|
||||||
|
articleTag = soup.find(True, attrs={'id':'article'})
|
||||||
|
if articleTag:
|
||||||
|
articleTag.insert(0,hTag)
|
||||||
|
|
||||||
|
# Add class="articleBody" to <div> so we can format with CSS
|
||||||
|
divTag = soup.find('div',attrs={'id':'articleBody'})
|
||||||
|
if divTag:
|
||||||
|
divTag['class'] = divTag['id']
|
||||||
|
|
||||||
|
# Add class="authorId" to <div> so we can format with CSS
|
||||||
|
divTag = soup.find('div',attrs={'id':'authorId'})
|
||||||
|
if divTag and divTag.contents[0]:
|
||||||
|
tag = Tag(soup, "p")
|
||||||
|
tag['class'] = "authorId"
|
||||||
|
tag.insert(0, self.fixChars(self.tag_to_string(divTag.contents[0],
|
||||||
|
use_alt=False)))
|
||||||
|
divTag.replaceWith(tag)
|
||||||
|
|
||||||
|
return soup
|
||||||
|
|
||||||
def strip_anchors(self,soup):
|
def strip_anchors(self,soup):
|
||||||
paras = soup.findAll(True)
|
paras = soup.findAll(True)
|
||||||
for para in paras:
|
for para in paras:
|
||||||
@ -297,94 +520,3 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
if a.img is None:
|
if a.img is None:
|
||||||
a.replaceWith(a.renderContents().decode('cp1252','replace'))
|
a.replaceWith(a.renderContents().decode('cp1252','replace'))
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
|
||||||
# refresh = soup.find('meta', {'http-equiv':'refresh'})
|
|
||||||
# if refresh is None:
|
|
||||||
# return self.strip_anchors(soup)
|
|
||||||
#
|
|
||||||
# content = refresh.get('content').partition('=')[2]
|
|
||||||
# raw = self.browser.open('http://www.nytimes.com'+content).read()
|
|
||||||
# soup = BeautifulSoup(raw.decode('cp1252', 'replace'))
|
|
||||||
return self.strip_anchors(soup)
|
|
||||||
refresh = soup.find('meta', {'http-equiv':'refresh'})
|
|
||||||
if refresh is not None:
|
|
||||||
content = refresh.get('content').partition('=')[2]
|
|
||||||
raw = self.browser.open('http://www.nytimes.com'+content).read()
|
|
||||||
soup = BeautifulSoup(raw.decode('cp1252', 'replace'))
|
|
||||||
|
|
||||||
soup = self.strip_anchors(soup)
|
|
||||||
|
|
||||||
# Test for empty content
|
|
||||||
body = soup.find('body')
|
|
||||||
tagCount = len(body.findAll(True))
|
|
||||||
if tagCount:
|
|
||||||
# print "%d tags in article" % tagCount
|
|
||||||
return soup
|
|
||||||
else:
|
|
||||||
print "no allowed content found, removing article"
|
|
||||||
raise Exception
|
|
||||||
|
|
||||||
def postprocess_html(self,soup, True):
|
|
||||||
|
|
||||||
# Change class="kicker" to <h3>
|
|
||||||
kicker = soup.find(True, {'class':'kicker'})
|
|
||||||
if kicker is not None :
|
|
||||||
h3Tag = Tag(soup, "h3")
|
|
||||||
h3Tag.insert(0, kicker.contents[0])
|
|
||||||
kicker.replaceWith(h3Tag)
|
|
||||||
|
|
||||||
# Change captions to italic -1
|
|
||||||
for caption in soup.findAll(True, {'class':'caption'}) :
|
|
||||||
if caption is not None:
|
|
||||||
emTag = Tag(soup, "em")
|
|
||||||
emTag.insert(0, caption.contents[0])
|
|
||||||
hrTag = Tag(soup, 'hr')
|
|
||||||
emTag.insert(1, hrTag)
|
|
||||||
caption.replaceWith(emTag)
|
|
||||||
|
|
||||||
# Change <nyt_headline> to <h2>
|
|
||||||
headline = soup.find("nyt_headline")
|
|
||||||
if headline is not None :
|
|
||||||
tag = Tag(soup, "h2")
|
|
||||||
tag['class'] = "headline"
|
|
||||||
tag.insert(0, headline.contents[0])
|
|
||||||
soup.h1.replaceWith(tag)
|
|
||||||
|
|
||||||
# Change <h1> to <h3> - used in editorial blogs
|
|
||||||
masthead = soup.find("h1")
|
|
||||||
if masthead is not None :
|
|
||||||
# Nuke the href
|
|
||||||
if masthead.a is not None :
|
|
||||||
del(masthead.a['href'])
|
|
||||||
tag = Tag(soup, "h3")
|
|
||||||
tag.insert(0, masthead.contents[0])
|
|
||||||
soup.h1.replaceWith(tag)
|
|
||||||
|
|
||||||
# Change <span class="bold"> to <b>
|
|
||||||
for subhead in soup.findAll(True, {'class':'bold'}) :
|
|
||||||
bTag = Tag(soup, "b")
|
|
||||||
bTag.insert(0, subhead.contents[0])
|
|
||||||
subhead.replaceWith(bTag)
|
|
||||||
|
|
||||||
# Synthesize a section header
|
|
||||||
dsk = soup.find('meta', attrs={'name':'dsk'})
|
|
||||||
if dsk is not None and dsk.has_key('content'):
|
|
||||||
hTag = Tag(soup,'h3')
|
|
||||||
hTag['class'] = 'section'
|
|
||||||
hTag.insert(0,NavigableString(dsk['content']))
|
|
||||||
articleTag = soup.find(True, attrs={'id':'article'})
|
|
||||||
articleTag.insert(0,hTag)
|
|
||||||
|
|
||||||
# Add class="articleBody" to <div> so we can format with CSS
|
|
||||||
divTag = soup.find('div',attrs={'id':'articleBody'})
|
|
||||||
if divTag is not None :
|
|
||||||
divTag['class'] = divTag['id']
|
|
||||||
|
|
||||||
# Add class="authorId" to <div> so we can format with CSS
|
|
||||||
divTag = soup.find('div',attrs={'id':'authorId'})
|
|
||||||
if divTag is not None :
|
|
||||||
divTag['class'] = divTag['id']
|
|
||||||
|
|
||||||
return soup
|
|
||||||
|
|
||||||
|
@ -89,6 +89,7 @@ class NYTimes(BasicNewsRecipe):
|
|||||||
'header_search',
|
'header_search',
|
||||||
'login',
|
'login',
|
||||||
'masthead',
|
'masthead',
|
||||||
|
'masthead-nav',
|
||||||
'memberTools',
|
'memberTools',
|
||||||
'navigation',
|
'navigation',
|
||||||
'portfolioInline',
|
'portfolioInline',
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
pescanik.net
|
pescanik.net
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import re
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Pescanik(BasicNewsRecipe):
|
class Pescanik(BasicNewsRecipe):
|
||||||
title = 'Pescanik'
|
title = 'Pescanik'
|
||||||
@ -21,17 +18,16 @@ class Pescanik(BasicNewsRecipe):
|
|||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newsportal'
|
||||||
lang = 'sr-Latn-RS'
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .article_description,body{font-family: Arial,"Lucida Grande",Tahoma,Verdana,sans1,sans-serif} .contentheading{font-size: x-large; font-weight: bold} .small{font-size: small} .createdate{font-size: x-small; font-weight: bold}'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif} .contentheading{font-size: x-large; font-weight: bold} .small{font-size: small} .createdate{font-size: x-small; font-weight: bold}'
|
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
, 'publisher' : publisher
|
, 'publisher' : publisher
|
||||||
, 'language' : lang
|
, 'language' : language
|
||||||
, 'pretty_print' : True
|
, 'linearize_tables' : True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -50,17 +46,4 @@ class Pescanik(BasicNewsRecipe):
|
|||||||
return nurl + '&pop=1&page=0'
|
return nurl + '&pop=1&page=0'
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)])
|
|
||||||
soup.head.insert(0,mlang)
|
|
||||||
attribs = [ 'style','font','valign'
|
|
||||||
,'colspan','width','height'
|
|
||||||
,'rowspan','summary','align'
|
|
||||||
,'cellspacing','cellpadding'
|
|
||||||
,'frames','rules','border'
|
|
||||||
]
|
|
||||||
for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']):
|
|
||||||
item.name = 'div'
|
|
||||||
for attrib in attribs:
|
|
||||||
if item.has_key(attrib):
|
|
||||||
del item[attrib]
|
|
||||||
return self.adeify_images(soup)
|
return self.adeify_images(soup)
|
||||||
|
@ -5,7 +5,7 @@ class RTE(BasicNewsRecipe):
|
|||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
__author__ = u'Robin Phillips'
|
__author__ = u'Robin Phillips'
|
||||||
language = 'en_GB'
|
language = 'en_IE'
|
||||||
|
|
||||||
remove_tags = [dict(attrs={'class':['topAd','botad','previousNextItem','headline','footerLinks','footernav']})]
|
remove_tags = [dict(attrs={'class':['topAd','botad','previousNextItem','headline','footerLinks','footernav']})]
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ class TaNea(BasicNewsRecipe):
|
|||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
language = 'el'
|
||||||
|
|
||||||
remove_tags_before = dict(name='div',attrs={'id':'print-body'})
|
remove_tags_before = dict(name='div',attrs={'id':'print-body'})
|
||||||
remove_tags_after = dict(name='div',attrs={'id':'text'})
|
remove_tags_after = dict(name='div',attrs={'id':'text'})
|
||||||
|
@ -8,43 +8,44 @@ import re
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class TelepolisNews(BasicNewsRecipe):
|
class TelepolisNews(BasicNewsRecipe):
|
||||||
title = u'Telepolis (News)'
|
title = u'Telepolis (News)'
|
||||||
__author__ = 'Gerhard Aigner'
|
__author__ = 'Gerhard Aigner'
|
||||||
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
||||||
description = 'News from telepolis'
|
description = 'News from telepolis'
|
||||||
category = 'news'
|
category = 'news'
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
recursion = 0
|
recursion = 0
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
encoding = "utf-8"
|
encoding = "utf-8"
|
||||||
|
language = 'de_AT'
|
||||||
|
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(r'<a[^>]*>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
preprocess_regexps = [(re.compile(r'<a[^>]*>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
||||||
(re.compile(r'</a>', re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
(re.compile(r'</a>', re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
||||||
|
|
||||||
keep_only_tags = [dict(name = 'table',attrs={'class':'blogtable'})]
|
keep_only_tags = [dict(name = 'table',attrs={'class':'blogtable'})]
|
||||||
remove_tags = [dict(name='img'), dict(name='td',attrs={'class':'blogbottom'})]
|
remove_tags = [dict(name='img'), dict(name='td',attrs={'class':'blogbottom'})]
|
||||||
|
|
||||||
feeds = [(u'News', u'http://www.heise.de/tp/news.rdf')]
|
feeds = [(u'News', u'http://www.heise.de/tp/news.rdf')]
|
||||||
|
|
||||||
html2lrf_options = [
|
html2lrf_options = [
|
||||||
'--comment' , description
|
'--comment' , description
|
||||||
, '--category' , category
|
, '--category' , category
|
||||||
, '--publisher', publisher
|
, '--publisher', publisher
|
||||||
]
|
]
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
def get_article_url(self, article):
|
def get_article_url(self, article):
|
||||||
'''if the linked article is of kind artikel don't take it'''
|
'''if the linked article is of kind artikel don't take it'''
|
||||||
if (article.link.count('artikel') > 0) :
|
if (article.link.count('artikel') > 0) :
|
||||||
return None
|
return None
|
||||||
return article.link
|
return article.link
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
mtag = '<meta http-equiv="Content-Type" content="text/html; charset=' + self.encoding + '">'
|
mtag = '<meta http-equiv="Content-Type" content="text/html; charset=' + self.encoding + '">'
|
||||||
soup.head.insert(0,mtag)
|
soup.head.insert(0,mtag)
|
||||||
return soup
|
return soup
|
||||||
|
@ -8,36 +8,37 @@ import re
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class TelepolisArtikel(BasicNewsRecipe):
|
class TelepolisArtikel(BasicNewsRecipe):
|
||||||
title = u'Telepolis (Artikel)'
|
title = u'Telepolis (Artikel)'
|
||||||
__author__ = 'Gerhard Aigner'
|
__author__ = 'Gerhard Aigner'
|
||||||
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
publisher = 'Heise Zeitschriften Verlag GmbH & Co KG'
|
||||||
category = 'news'
|
category = 'news'
|
||||||
description = 'Telepolis Artikel'
|
description = 'Telepolis Artikel'
|
||||||
oldest_article = 7
|
language = 'de_AT'
|
||||||
max_articles_per_feed = 100
|
oldest_article = 7
|
||||||
recursion = 0
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
recursion = 0
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
|
|
||||||
remove_tags_before = dict(name='h1')
|
remove_tags_before = dict(name='h1')
|
||||||
remove_tags = [dict(name='img')]
|
remove_tags = [dict(name='img')]
|
||||||
|
|
||||||
feeds = [(u'Artikel', u'http://www.heise.de/tp/rss/news-a.rdf')]
|
feeds = [(u'Artikel', u'http://www.heise.de/tp/rss/news-a.rdf')]
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(r'<a[^>]*>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
preprocess_regexps = [(re.compile(r'<a[^>]*>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
||||||
(re.compile(r'</a>', re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
(re.compile(r'</a>', re.DOTALL|re.IGNORECASE), lambda match: ''),]
|
||||||
|
|
||||||
html2lrf_options = [
|
html2lrf_options = [
|
||||||
'--comment' , description
|
'--comment' , description
|
||||||
, '--category' , category
|
, '--category' , category
|
||||||
, '--publisher', publisher]
|
, '--publisher', publisher]
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
p = re.compile(r'\d{5}', re.DOTALL|re.IGNORECASE)
|
p = re.compile(r'\d{5}', re.DOTALL|re.IGNORECASE)
|
||||||
m = p.search(url)
|
m = p.search(url)
|
||||||
return "http://www.heise.de/bin/tp/issue/r4/dl-artikel2.cgi?artikelnr="+ m.group() +"&mode=print"
|
return "http://www.heise.de/bin/tp/issue/r4/dl-artikel2.cgi?artikelnr="+ m.group() +"&mode=print"
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ class TheCultOfGhoul(BasicNewsRecipe):
|
|||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = True
|
use_embedded_content = True
|
||||||
|
publication_type = 'blog'
|
||||||
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: "Trebuchet MS",Trebuchet,Verdana,sans1,sans-serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em; border: 1px solid #333333; padding: 4px } '
|
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: "Trebuchet MS",Trebuchet,Verdana,sans1,sans-serif} .article_description{font-family: sans1, sans-serif} img{margin-bottom: 0.8em; border: 1px solid #333333; padding: 4px } '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
|
@ -128,7 +128,6 @@ class USAToday(BasicNewsRecipe):
|
|||||||
def parse_feeds(self, *args, **kwargs):
|
def parse_feeds(self, *args, **kwargs):
|
||||||
parsed_feeds = BasicNewsRecipe.parse_feeds(self, *args, **kwargs)
|
parsed_feeds = BasicNewsRecipe.parse_feeds(self, *args, **kwargs)
|
||||||
# Count articles for progress dialog
|
# Count articles for progress dialog
|
||||||
content_feeds = []
|
|
||||||
article_count = 0
|
article_count = 0
|
||||||
for feed in parsed_feeds:
|
for feed in parsed_feeds:
|
||||||
article_count += len(feed)
|
article_count += len(feed)
|
||||||
@ -297,7 +296,6 @@ class USAToday(BasicNewsRecipe):
|
|||||||
|
|
||||||
if not headline_found:
|
if not headline_found:
|
||||||
# Monolithic <div> - restructure
|
# Monolithic <div> - restructure
|
||||||
insert_loc = 0
|
|
||||||
tag = body.find(True)
|
tag = body.find(True)
|
||||||
while True:
|
while True:
|
||||||
insertLoc += 1
|
insertLoc += 1
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009-2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
|
||||||
'''
|
'''
|
||||||
vijesti.me
|
vijesti.me
|
||||||
@ -9,7 +8,6 @@ vijesti.me
|
|||||||
|
|
||||||
import re
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Vijesti(BasicNewsRecipe):
|
class Vijesti(BasicNewsRecipe):
|
||||||
title = 'Vijesti'
|
title = 'Vijesti'
|
||||||
@ -22,17 +20,16 @@ class Vijesti(BasicNewsRecipe):
|
|||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
encoding = 'cp1250'
|
encoding = 'cp1250'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
lang ='sr-Latn-Me'
|
masthead_url = 'http://www.vijesti.me/img/logo.gif'
|
||||||
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}'
|
extra_css = '@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: sans1, sans-serif}'
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
, 'publisher' : publisher
|
, 'publisher' : publisher
|
||||||
, 'language' : lang
|
, 'language' : language
|
||||||
, 'pretty_print' : True
|
|
||||||
}
|
}
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
||||||
@ -44,15 +41,5 @@ class Vijesti(BasicNewsRecipe):
|
|||||||
feeds = [(u'Sve vijesti', u'http://www.vijesti.me/rss.php' )]
|
feeds = [(u'Sve vijesti', u'http://www.vijesti.me/rss.php' )]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
soup.html['xml:lang'] = self.lang
|
|
||||||
soup.html['lang'] = self.lang
|
|
||||||
mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)])
|
|
||||||
mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=UTF-8")])
|
|
||||||
soup.head.insert(0,mlang)
|
|
||||||
soup.head.insert(1,mcharset)
|
|
||||||
return self.adeify_images(soup)
|
return self.adeify_images(soup)
|
||||||
|
|
||||||
def get_article_url(self, article):
|
|
||||||
raw = article.get('link', None)
|
|
||||||
return raw.replace('.cg.yu','.me')
|
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
@ -9,7 +7,6 @@ vreme.com
|
|||||||
import re
|
import re
|
||||||
from calibre import strftime
|
from calibre import strftime
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Vreme(BasicNewsRecipe):
|
class Vreme(BasicNewsRecipe):
|
||||||
title = 'Vreme'
|
title = 'Vreme'
|
||||||
@ -24,22 +21,23 @@ class Vreme(BasicNewsRecipe):
|
|||||||
LOGIN = 'http://www.vreme.com/account/login.php?url=%2F'
|
LOGIN = 'http://www.vreme.com/account/login.php?url=%2F'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
|
publication_type = 'magazine'
|
||||||
lang = 'sr-Latn-RS'
|
masthead_url = 'http://www.vreme.com/g/vreme-logo.gif'
|
||||||
direction = 'ltr'
|
|
||||||
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .heading1{font-family: sans1, sans-serif; font-size: x-large; font-weight: bold} .heading2{font-family: sans1, sans-serif; font-size: large; font-weight: bold} .toc-heading{font-family: sans1, sans-serif; font-size: small} .column-heading2{font-family: sans1, sans-serif; font-size: large} .column-heading1{font-family: sans1, sans-serif; font-size: x-large} .column-normal{font-family: sans1, sans-serif; font-size: medium} .large{font-family: sans1, sans-serif; font-size: large} '
|
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} .heading1{font-family: sans1, sans-serif; font-size: x-large; font-weight: bold} .heading2{font-family: sans1, sans-serif; font-size: large; font-weight: bold} .toc-heading{font-family: sans1, sans-serif; font-size: small} .column-heading2{font-family: sans1, sans-serif; font-size: large} .column-heading1{font-family: sans1, sans-serif; font-size: x-large} .column-normal{font-family: sans1, sans-serif; font-size: medium} .large{font-family: sans1, sans-serif; font-size: large} '
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
, 'publisher' : publisher
|
, 'publisher' : publisher
|
||||||
, 'language' : lang
|
, 'language' : language
|
||||||
, 'pretty_print' : True
|
, 'linearize_tables' : True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
||||||
|
remove_tags_before = dict(attrs={'class':'toc-heading'})
|
||||||
|
remove_tags_after = dict(attrs={'class':'footer' })
|
||||||
|
|
||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
br = BasicNewsRecipe.get_browser()
|
br = BasicNewsRecipe.get_browser()
|
||||||
@ -79,31 +77,6 @@ class Vreme(BasicNewsRecipe):
|
|||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
return url + '&print=yes'
|
return url + '&print=yes'
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
|
||||||
del soup.body['text' ]
|
|
||||||
del soup.body['bgcolor']
|
|
||||||
del soup.body['onload' ]
|
|
||||||
soup.html['lang'] = self.lang
|
|
||||||
soup.html['dir' ] = self.direction
|
|
||||||
|
|
||||||
attribs = [ 'style','font','valign'
|
|
||||||
,'colspan','width','height'
|
|
||||||
,'rowspan','summary','align'
|
|
||||||
,'cellspacing','cellpadding'
|
|
||||||
,'frames','rules','border'
|
|
||||||
]
|
|
||||||
for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']):
|
|
||||||
item.name = 'div'
|
|
||||||
for attrib in attribs:
|
|
||||||
if item.has_key(attrib):
|
|
||||||
del item[attrib]
|
|
||||||
|
|
||||||
mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)])
|
|
||||||
mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=UTF-8")])
|
|
||||||
soup.head.insert(0,mlang)
|
|
||||||
soup.head.insert(1,mcharset)
|
|
||||||
return soup
|
|
||||||
|
|
||||||
def get_cover_url(self):
|
def get_cover_url(self):
|
||||||
cover_url = None
|
cover_url = None
|
||||||
soup = self.index_to_soup(self.INDEX)
|
soup = self.index_to_soup(self.INDEX)
|
||||||
|
@ -35,7 +35,7 @@ mimetypes.add_type('application/adobe-page-template+xml', '.xpgt')
|
|||||||
mimetypes.add_type('application/x-font-opentype', '.otf')
|
mimetypes.add_type('application/x-font-opentype', '.otf')
|
||||||
mimetypes.add_type('application/x-font-truetype', '.ttf')
|
mimetypes.add_type('application/x-font-truetype', '.ttf')
|
||||||
mimetypes.add_type('application/oebps-package+xml', '.opf')
|
mimetypes.add_type('application/oebps-package+xml', '.opf')
|
||||||
mimetypes.add_type('application/ereader', '.pdb')
|
mimetypes.add_type('application/vnd.palm', '.pdb')
|
||||||
mimetypes.add_type('application/x-mobipocket-ebook', '.mobi')
|
mimetypes.add_type('application/x-mobipocket-ebook', '.mobi')
|
||||||
mimetypes.add_type('application/x-mobipocket-ebook', '.prc')
|
mimetypes.add_type('application/x-mobipocket-ebook', '.prc')
|
||||||
mimetypes.add_type('application/x-mobipocket-ebook', '.azw')
|
mimetypes.add_type('application/x-mobipocket-ebook', '.azw')
|
||||||
|
@ -2,7 +2,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
__appname__ = 'calibre'
|
__appname__ = 'calibre'
|
||||||
__version__ = '0.6.45'
|
__version__ = '0.6.46'
|
||||||
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
@ -19,8 +19,12 @@ class ANDROID(USBMS):
|
|||||||
|
|
||||||
VENDOR_ID = {
|
VENDOR_ID = {
|
||||||
0x0bb4 : { 0x0c02 : [0x100], 0x0c01 : [0x100]},
|
0x0bb4 : { 0x0c02 : [0x100], 0x0c01 : [0x100]},
|
||||||
0x22b8 : { 0x41d9 : [0x216]},
|
|
||||||
0x18d1 : { 0x4e11 : [0x0100], 0x4e12: [0x0100]},
|
# Motorola
|
||||||
|
0x22b8 : { 0x41d9 : [0x216], 0x2d67 : [0x100]},
|
||||||
|
|
||||||
|
0x18d1 : { 0x4e11 : [0x0100, 0x226], 0x4e12: [0x0100, 0x226]},
|
||||||
|
|
||||||
0x04e8 : { 0x681d : [0x0222]},
|
0x04e8 : { 0x681d : [0x0222]},
|
||||||
}
|
}
|
||||||
EBOOK_DIR_MAIN = ['wordplayer/calibretransfer', 'eBooks/import', 'Books']
|
EBOOK_DIR_MAIN = ['wordplayer/calibretransfer', 'eBooks/import', 'Books']
|
||||||
@ -30,8 +34,8 @@ class ANDROID(USBMS):
|
|||||||
EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN)
|
EXTRA_CUSTOMIZATION_DEFAULT = ', '.join(EBOOK_DIR_MAIN)
|
||||||
|
|
||||||
VENDOR_NAME = ['HTC', 'MOTOROLA', 'GOOGLE_', 'ANDROID']
|
VENDOR_NAME = ['HTC', 'MOTOROLA', 'GOOGLE_', 'ANDROID']
|
||||||
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'INC.NEXUS_ONE',
|
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE',
|
||||||
'___UMS_COMPOSITE',]
|
'___UMS_COMPOSITE', '_MB200']
|
||||||
|
|
||||||
OSX_MAIN_MEM = 'HTC Android Phone Media'
|
OSX_MAIN_MEM = 'HTC Android Phone Media'
|
||||||
|
|
||||||
|
0
src/calibre/devices/edge/__init__.py
Normal file
0
src/calibre/devices/edge/__init__.py
Normal file
49
src/calibre/devices/edge/driver.py
Normal file
49
src/calibre/devices/edge/driver.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2009, John Schember <john at nachtimwald.com>'
|
||||||
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
'''
|
||||||
|
Device driver for Barns and Nobel's Nook
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
from calibre.devices.usbms.driver import USBMS
|
||||||
|
|
||||||
|
class EDGE(USBMS):
|
||||||
|
|
||||||
|
name = 'Edge Device Interface'
|
||||||
|
gui_name = _('Entourage Edge')
|
||||||
|
description = _('Communicate with the Entourage Edge.')
|
||||||
|
author = 'Kovid Goyal'
|
||||||
|
supported_platforms = ['windows', 'linux', 'osx']
|
||||||
|
|
||||||
|
# Ordered list of supported formats
|
||||||
|
FORMATS = ['epub', 'pdf']
|
||||||
|
|
||||||
|
VENDOR_ID = [0x2080]
|
||||||
|
PRODUCT_ID = [0x001]
|
||||||
|
BCD = [0x322]
|
||||||
|
|
||||||
|
VENDOR_NAME = 'ANDROID'
|
||||||
|
WINDOWS_MAIN_MEM = '__FILE-STOR_GADG'
|
||||||
|
WINDOWS_CARD_A_MEM = '__FILE-STOR_GADG'
|
||||||
|
|
||||||
|
MAIN_MEMORY_VOLUME_LABEL = 'Edge Main Memory'
|
||||||
|
STORAGE_CARD_VOLUME_LABEL = 'Edge Storage Card'
|
||||||
|
|
||||||
|
EBOOK_DIR_MAIN = 'download'
|
||||||
|
SUPPORTS_SUB_DIRS = True
|
||||||
|
|
||||||
|
def windows_sort_drives(self, drives):
|
||||||
|
main = drives.get('main', None)
|
||||||
|
card = drives.get('carda', None)
|
||||||
|
if card and main and card < main:
|
||||||
|
drives['main'] = card
|
||||||
|
drives['carda'] = main
|
||||||
|
|
||||||
|
return drives
|
||||||
|
|
||||||
|
def sanitize_path_components(self, components):
|
||||||
|
return [x.replace('#', '_') for x in components]
|
@ -25,7 +25,6 @@ from calibre.devices.mime import mime_type_ext
|
|||||||
# are inherited from the device interface in Device.
|
# are inherited from the device interface in Device.
|
||||||
class USBMS(CLI, Device):
|
class USBMS(CLI, Device):
|
||||||
|
|
||||||
name = 'USBMS Base Device Interface'
|
|
||||||
description = _('Communicate with an eBook reader.')
|
description = _('Communicate with an eBook reader.')
|
||||||
author = _('John Schember')
|
author = _('John Schember')
|
||||||
supported_platforms = ['windows', 'osx', 'linux']
|
supported_platforms = ['windows', 'osx', 'linux']
|
||||||
|
@ -141,7 +141,8 @@ class CHMInput(InputFormatPlugin):
|
|||||||
log.debug('Found %d section nodes' % len(chapters))
|
log.debug('Found %d section nodes' % len(chapters))
|
||||||
htmlpath = os.path.splitext(hhcpath)[0] + ".html"
|
htmlpath = os.path.splitext(hhcpath)[0] + ".html"
|
||||||
f = open(htmlpath, 'wb')
|
f = open(htmlpath, 'wb')
|
||||||
f.write("<HTML><HEAD></HEAD><BODY>\r\n")
|
f.write('<html><head><meta http-equiv="Content-type"'
|
||||||
|
' content="text/html;charset=UTF-8" /></head><body>\n')
|
||||||
|
|
||||||
if chapters:
|
if chapters:
|
||||||
path0 = chapters[0][1]
|
path0 = chapters[0][1]
|
||||||
@ -152,10 +153,12 @@ class CHMInput(InputFormatPlugin):
|
|||||||
rsrcname = os.path.basename(chapter[1])
|
rsrcname = os.path.basename(chapter[1])
|
||||||
rsrcpath = os.path.join(subpath, rsrcname)
|
rsrcpath = os.path.join(subpath, rsrcname)
|
||||||
# title should already be url encoded
|
# title should already be url encoded
|
||||||
url = "<br /><a href=" + rsrcpath + ">" + title + " </a>\r\n"
|
url = "<br /><a href=" + rsrcpath + ">" + title + " </a>\n"
|
||||||
|
if isinstance(url, unicode):
|
||||||
|
url = url.encode('utf-8')
|
||||||
f.write(url)
|
f.write(url)
|
||||||
|
|
||||||
f.write("</BODY></HTML>")
|
f.write("</body></html>")
|
||||||
f.close()
|
f.close()
|
||||||
return htmlpath
|
return htmlpath
|
||||||
|
|
||||||
|
@ -103,7 +103,8 @@ def _get_cover(soup, rdr):
|
|||||||
r[0] = img['src']
|
r[0] = img['src']
|
||||||
l = r.keys()
|
l = r.keys()
|
||||||
l.sort()
|
l.sort()
|
||||||
ans = r[l[0]]
|
if l:
|
||||||
|
ans = r[l[0]]
|
||||||
# this link comes from the internal html, which is in a subdir
|
# this link comes from the internal html, which is in a subdir
|
||||||
if ans is not None:
|
if ans is not None:
|
||||||
try:
|
try:
|
||||||
|
@ -7,7 +7,7 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>,' \
|
|||||||
import os, re
|
import os, re
|
||||||
from mimetypes import guess_type as guess_mimetype
|
from mimetypes import guess_type as guess_mimetype
|
||||||
|
|
||||||
from BeautifulSoup import BeautifulSoup, NavigableString
|
from calibre.ebooks.BeautifulSoup import BeautifulSoup, NavigableString
|
||||||
|
|
||||||
from calibre.utils.chm.chm import CHMFile
|
from calibre.utils.chm.chm import CHMFile
|
||||||
from calibre.utils.chm.chmlib import (
|
from calibre.utils.chm.chmlib import (
|
||||||
@ -17,6 +17,7 @@ from calibre.utils.chm.chmlib import (
|
|||||||
|
|
||||||
from calibre.utils.config import OptionParser
|
from calibre.utils.config import OptionParser
|
||||||
from calibre.ebooks.metadata.toc import TOC
|
from calibre.ebooks.metadata.toc import TOC
|
||||||
|
from calibre.ebooks.chardet import xml_to_unicode
|
||||||
|
|
||||||
|
|
||||||
def match_string(s1, s2_already_lowered):
|
def match_string(s1, s2_already_lowered):
|
||||||
@ -145,8 +146,9 @@ class CHMReader(CHMFile):
|
|||||||
|
|
||||||
def _reformat(self, data):
|
def _reformat(self, data):
|
||||||
try:
|
try:
|
||||||
|
data = xml_to_unicode(data, strip_encoding_pats=True)[0]
|
||||||
soup = BeautifulSoup(data)
|
soup = BeautifulSoup(data)
|
||||||
except UnicodeEncodeError:
|
except ValueError:
|
||||||
# hit some strange encoding problems...
|
# hit some strange encoding problems...
|
||||||
print "Unable to parse html for cleaning, leaving it :("
|
print "Unable to parse html for cleaning, leaving it :("
|
||||||
return data
|
return data
|
||||||
@ -184,7 +186,7 @@ class CHMReader(CHMFile):
|
|||||||
# and some don't even have a src= ?!
|
# and some don't even have a src= ?!
|
||||||
pass
|
pass
|
||||||
# now give back some pretty html.
|
# now give back some pretty html.
|
||||||
return soup.prettify()
|
return soup.prettify('utf-8')
|
||||||
|
|
||||||
def Contents(self):
|
def Contents(self):
|
||||||
if self._contents is not None:
|
if self._contents is not None:
|
||||||
|
@ -171,7 +171,8 @@ class PageProcessor(list):
|
|||||||
if not self.opts.dont_sharpen:
|
if not self.opts.dont_sharpen:
|
||||||
p.MagickSharpenImage(wand, 0.0, 1.0)
|
p.MagickSharpenImage(wand, 0.0, 1.0)
|
||||||
|
|
||||||
p.MagickSetImageType(wand, p.GrayscaleType)
|
if not self.opts.dont_grayscale:
|
||||||
|
p.MagickSetImageType(wand, p.GrayscaleType)
|
||||||
|
|
||||||
if self.opts.despeckle:
|
if self.opts.despeckle:
|
||||||
p.MagickDespeckleImage(wand)
|
p.MagickDespeckleImage(wand)
|
||||||
@ -310,6 +311,8 @@ class ComicInput(InputFormatPlugin):
|
|||||||
'you optimal size and look on your device.')),
|
'you optimal size and look on your device.')),
|
||||||
OptionRecommendation(name='no_process', recommended_value=False,
|
OptionRecommendation(name='no_process', recommended_value=False,
|
||||||
help=_("Apply no processing to the image")),
|
help=_("Apply no processing to the image")),
|
||||||
|
OptionRecommendation(name='dont_grayscale', recommended_value=False,
|
||||||
|
help=_('Do not convert the image to grayscale (black and white)'))
|
||||||
])
|
])
|
||||||
|
|
||||||
recommendations = set([
|
recommendations = set([
|
||||||
|
@ -12,7 +12,7 @@ from urllib import unquote
|
|||||||
from calibre.customize.conversion import OutputFormatPlugin
|
from calibre.customize.conversion import OutputFormatPlugin
|
||||||
from calibre.ptempfile import TemporaryDirectory
|
from calibre.ptempfile import TemporaryDirectory
|
||||||
from calibre.constants import __appname__, __version__
|
from calibre.constants import __appname__, __version__
|
||||||
from calibre import strftime, guess_type, prepare_string_for_xml, CurrentDir
|
from calibre import guess_type, CurrentDir
|
||||||
from calibre.customize.conversion import OptionRecommendation
|
from calibre.customize.conversion import OptionRecommendation
|
||||||
from calibre.constants import filesystem_encoding
|
from calibre.constants import filesystem_encoding
|
||||||
|
|
||||||
@ -110,37 +110,6 @@ class EPUBOutput(OutputFormatPlugin):
|
|||||||
</html>
|
</html>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
TITLEPAGE = '''\
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
|
||||||
<head>
|
|
||||||
<title>%(title)s</title>
|
|
||||||
<style type="text/css">
|
|
||||||
body {
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: center;
|
|
||||||
overflow: hidden;
|
|
||||||
font-size: 16pt;
|
|
||||||
}
|
|
||||||
.logo {
|
|
||||||
width: 510px; height: 390px;
|
|
||||||
text-align:center;
|
|
||||||
font-size: 1pt;
|
|
||||||
overflow:hidden;
|
|
||||||
}
|
|
||||||
h1 { font-family: serif; }
|
|
||||||
h2, h4 { font-family: monospace; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>%(title)s</h1>
|
|
||||||
<div style="text-align:center">
|
|
||||||
<img class="logo" src="%(img)s" alt="calibre logo" />
|
|
||||||
</div>
|
|
||||||
<h2>%(author)s</h2>
|
|
||||||
<h4>Produced by %(app)s</h4>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
'''
|
|
||||||
def workaround_webkit_quirks(self):
|
def workaround_webkit_quirks(self):
|
||||||
from calibre.ebooks.oeb.base import XPath
|
from calibre.ebooks.oeb.base import XPath
|
||||||
for x in self.oeb.spine:
|
for x in self.oeb.spine:
|
||||||
@ -262,42 +231,80 @@ class EPUBOutput(OutputFormatPlugin):
|
|||||||
'''
|
'''
|
||||||
Create a generic cover for books that dont have a cover
|
Create a generic cover for books that dont have a cover
|
||||||
'''
|
'''
|
||||||
|
from calibre.utils.pil_draw import draw_centered_text
|
||||||
|
from calibre.ebooks.metadata import authors_to_string
|
||||||
if self.opts.no_default_epub_cover:
|
if self.opts.no_default_epub_cover:
|
||||||
return None
|
return None
|
||||||
self.log('Generating default cover')
|
self.log('Generating default cover')
|
||||||
from calibre.ebooks.metadata import authors_to_string
|
|
||||||
m = self.oeb.metadata
|
m = self.oeb.metadata
|
||||||
title = unicode(m.title[0])
|
title = unicode(m.title[0])
|
||||||
a = [unicode(x) for x in m.creator if x.role == 'aut']
|
authors = [unicode(x) for x in m.creator if x.role == 'aut']
|
||||||
author = authors_to_string(a)
|
|
||||||
img_data = open(I('library.png'), 'rb').read()
|
import cStringIO
|
||||||
id, href = self.oeb.manifest.generate('calibre-logo',
|
cover_file = cStringIO.StringIO()
|
||||||
'calibre-logo.png')
|
try:
|
||||||
self.oeb.manifest.add(id, href, 'image/png', data=img_data)
|
try:
|
||||||
title, author = map(prepare_string_for_xml, (title, author))
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
if not author or not author.strip():
|
Image, ImageDraw, ImageFont
|
||||||
author = strftime('%d %b, %Y')
|
except ImportError:
|
||||||
html = self.TITLEPAGE%dict(title=title, author=author,
|
import Image, ImageDraw, ImageFont
|
||||||
app=__appname__ +' '+__version__,
|
font_path = P('fonts/liberation/LiberationSerif-Bold.ttf')
|
||||||
img=href)
|
app = '['+__appname__ +' '+__version__+']'
|
||||||
id, href = self.oeb.manifest.generate('calibre-titlepage',
|
|
||||||
'calibre-titlepage.xhtml')
|
COVER_WIDTH, COVER_HEIGHT = 590, 750
|
||||||
return self.oeb.manifest.add(id, href, guess_type('t.xhtml')[0],
|
img = Image.new('RGB', (COVER_WIDTH, COVER_HEIGHT), 'white')
|
||||||
data=etree.fromstring(html))
|
draw = ImageDraw.Draw(img)
|
||||||
|
# Title
|
||||||
|
font = ImageFont.truetype(font_path, 44)
|
||||||
|
bottom = draw_centered_text(img, draw, font, title, 15, ysep=9)
|
||||||
|
# Authors
|
||||||
|
bottom += 14
|
||||||
|
font = ImageFont.truetype(font_path, 32)
|
||||||
|
authors = authors_to_string(authors)
|
||||||
|
bottom = draw_centered_text(img, draw, font, authors, bottom, ysep=7)
|
||||||
|
# Vanity
|
||||||
|
font = ImageFont.truetype(font_path, 28)
|
||||||
|
width, height = draw.textsize(app, font=font)
|
||||||
|
left = max(int((COVER_WIDTH - width)/2.), 0)
|
||||||
|
top = COVER_HEIGHT - height - 15
|
||||||
|
draw.text((left, top), app, fill=(0,0,0), font=font)
|
||||||
|
# Logo
|
||||||
|
logo = Image.open(I('library.png'), 'r')
|
||||||
|
width, height = logo.size
|
||||||
|
left = max(int((COVER_WIDTH - width)/2.), 0)
|
||||||
|
top = max(int((COVER_HEIGHT - height)/2.), 0)
|
||||||
|
img.paste(logo, (left, max(bottom, top)))
|
||||||
|
img = img.convert('RGB').convert('P', palette=Image.ADAPTIVE)
|
||||||
|
|
||||||
|
img.convert('RGB').save(cover_file, 'JPEG')
|
||||||
|
cover_file.flush()
|
||||||
|
id, href = self.oeb.manifest.generate('cover_image', 'cover_image.jpg')
|
||||||
|
item = self.oeb.manifest.add(id, href, guess_type('t.jpg')[0],
|
||||||
|
data=cover_file.getvalue())
|
||||||
|
m.clear('cover')
|
||||||
|
m.add('cover', item.id)
|
||||||
|
|
||||||
|
return item.href
|
||||||
|
except:
|
||||||
|
self.log.exception('Failed to generate default cover')
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def insert_cover(self):
|
def insert_cover(self):
|
||||||
from calibre.ebooks.oeb.base import urldefrag
|
from calibre.ebooks.oeb.base import urldefrag
|
||||||
from calibre import guess_type
|
from calibre import guess_type
|
||||||
g, m = self.oeb.guide, self.oeb.manifest
|
g, m = self.oeb.guide, self.oeb.manifest
|
||||||
|
item = None
|
||||||
if 'titlepage' not in g:
|
if 'titlepage' not in g:
|
||||||
if 'cover' in g:
|
if 'cover' in g:
|
||||||
tp = self.TITLEPAGE_COVER%unquote(g['cover'].href)
|
href = g['cover'].href
|
||||||
|
else:
|
||||||
|
href = self.default_cover()
|
||||||
|
if href is not None:
|
||||||
|
tp = self.TITLEPAGE_COVER%unquote(href)
|
||||||
id, href = m.generate('titlepage', 'titlepage.xhtml')
|
id, href = m.generate('titlepage', 'titlepage.xhtml')
|
||||||
item = m.add(id, href, guess_type('t.xhtml')[0],
|
item = m.add(id, href, guess_type('t.xhtml')[0],
|
||||||
data=etree.fromstring(tp))
|
data=etree.fromstring(tp))
|
||||||
else:
|
|
||||||
item = self.default_cover()
|
|
||||||
else:
|
else:
|
||||||
item = self.oeb.manifest.hrefs[
|
item = self.oeb.manifest.hrefs[
|
||||||
urldefrag(self.oeb.guide['titlepage'].href)[0]]
|
urldefrag(self.oeb.guide['titlepage'].href)[0]]
|
||||||
|
@ -99,15 +99,33 @@ class OCFDirReader(OCFReader):
|
|||||||
return open(os.path.join(self.root, path), *args, **kwargs)
|
return open(os.path.join(self.root, path), *args, **kwargs)
|
||||||
|
|
||||||
def get_cover(opf, opf_path, stream):
|
def get_cover(opf, opf_path, stream):
|
||||||
|
import posixpath
|
||||||
from calibre.ebooks import render_html_svg_workaround
|
from calibre.ebooks import render_html_svg_workaround
|
||||||
from calibre.utils.logging import default_log
|
from calibre.utils.logging import default_log
|
||||||
|
raster_cover = opf.raster_cover
|
||||||
|
stream.seek(0)
|
||||||
|
zf = ZipFile(stream)
|
||||||
|
if raster_cover:
|
||||||
|
base = posixpath.dirname(opf_path)
|
||||||
|
cpath = posixpath.normpath(posixpath.join(base, raster_cover))
|
||||||
|
try:
|
||||||
|
member = zf.getinfo(cpath)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
f = zf.open(member)
|
||||||
|
data = f.read()
|
||||||
|
f.close()
|
||||||
|
zf.close()
|
||||||
|
return data
|
||||||
|
|
||||||
cpage = opf.first_spine_item()
|
cpage = opf.first_spine_item()
|
||||||
if not cpage:
|
if not cpage:
|
||||||
return
|
return
|
||||||
|
|
||||||
with TemporaryDirectory('_epub_meta') as tdir:
|
with TemporaryDirectory('_epub_meta') as tdir:
|
||||||
with CurrentDir(tdir):
|
with CurrentDir(tdir):
|
||||||
stream.seek(0)
|
zf.extractall()
|
||||||
ZipFile(stream).extractall()
|
|
||||||
opf_path = opf_path.replace('/', os.sep)
|
opf_path = opf_path.replace('/', os.sep)
|
||||||
cpage = os.path.join(tdir, os.path.dirname(opf_path), cpage)
|
cpage = os.path.join(tdir, os.path.dirname(opf_path), cpage)
|
||||||
if not os.path.exists(cpage):
|
if not os.path.exists(cpage):
|
||||||
|
@ -39,7 +39,7 @@ class MetadataSource(Plugin):
|
|||||||
self.worker.daemon = True
|
self.worker.daemon = True
|
||||||
self.title = title
|
self.title = title
|
||||||
self.verbose = verbose
|
self.verbose = verbose
|
||||||
self.author = author
|
self.book_author = author
|
||||||
self.publisher = publisher
|
self.publisher = publisher
|
||||||
self.isbn = isbn
|
self.isbn = isbn
|
||||||
self.log = log if log is not None else default_log
|
self.log = log if log is not None else default_log
|
||||||
@ -139,7 +139,7 @@ class GoogleBooks(MetadataSource):
|
|||||||
def fetch(self):
|
def fetch(self):
|
||||||
from calibre.ebooks.metadata.google_books import search
|
from calibre.ebooks.metadata.google_books import search
|
||||||
try:
|
try:
|
||||||
self.results = search(self.title, self.author, self.publisher,
|
self.results = search(self.title, self.book_author, self.publisher,
|
||||||
self.isbn, max_results=10,
|
self.isbn, max_results=10,
|
||||||
verbose=self.verbose)
|
verbose=self.verbose)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
@ -162,8 +162,8 @@ class ISBNDB(MetadataSource):
|
|||||||
else:
|
else:
|
||||||
if self.title:
|
if self.title:
|
||||||
args.extend(['--title', self.title])
|
args.extend(['--title', self.title])
|
||||||
if self.author:
|
if self.book_author:
|
||||||
args.extend(['--author', self.author])
|
args.extend(['--author', self.book_author])
|
||||||
if self.publisher:
|
if self.publisher:
|
||||||
args.extend(['--publisher', self.publisher])
|
args.extend(['--publisher', self.publisher])
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
@ -193,7 +193,7 @@ class Amazon(MetadataSource):
|
|||||||
return
|
return
|
||||||
from calibre.ebooks.metadata.amazon import get_social_metadata
|
from calibre.ebooks.metadata.amazon import get_social_metadata
|
||||||
try:
|
try:
|
||||||
self.results = get_social_metadata(self.title, self.author,
|
self.results = get_social_metadata(self.title, self.book_author,
|
||||||
self.publisher, self.isbn)
|
self.publisher, self.isbn)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
self.exception = e
|
self.exception = e
|
||||||
|
@ -322,16 +322,18 @@ class MetadataUpdater(object):
|
|||||||
|
|
||||||
recs = []
|
recs = []
|
||||||
try:
|
try:
|
||||||
from calibre.ebooks.conversion.config import load_defaults
|
from calibre.ebooks.conversion.config import load_defaults
|
||||||
prefs = load_defaults('mobi_output')
|
prefs = load_defaults('mobi_output')
|
||||||
pas = prefs.get('prefer_author_sort', False)
|
pas = prefs.get('prefer_author_sort', False)
|
||||||
|
kindle_pdoc = prefs.get('personal_doc', None)
|
||||||
except:
|
except:
|
||||||
pas = False
|
pas = False
|
||||||
|
kindle_pdoc = None
|
||||||
if mi.author_sort and pas:
|
if mi.author_sort and pas:
|
||||||
authors = mi.author_sort
|
authors = mi.author_sort
|
||||||
update_exth_record((100, authors.encode(self.codec, 'replace')))
|
update_exth_record((100, authors.encode(self.codec, 'replace')))
|
||||||
elif mi.authors:
|
elif mi.authors:
|
||||||
authors = '; '.join(mi.authors)
|
authors = ';'.join(mi.authors)
|
||||||
update_exth_record((100, authors.encode(self.codec, 'replace')))
|
update_exth_record((100, authors.encode(self.codec, 'replace')))
|
||||||
if mi.publisher:
|
if mi.publisher:
|
||||||
update_exth_record((101, mi.publisher.encode(self.codec, 'replace')))
|
update_exth_record((101, mi.publisher.encode(self.codec, 'replace')))
|
||||||
@ -349,6 +351,10 @@ class MetadataUpdater(object):
|
|||||||
if mi.tags:
|
if mi.tags:
|
||||||
subjects = '; '.join(mi.tags)
|
subjects = '; '.join(mi.tags)
|
||||||
update_exth_record((105, subjects.encode(self.codec, 'replace')))
|
update_exth_record((105, subjects.encode(self.codec, 'replace')))
|
||||||
|
|
||||||
|
if kindle_pdoc and kindle_pdoc in mi.tags:
|
||||||
|
update_exth_record((501, str('PDOC')))
|
||||||
|
|
||||||
if mi.pubdate:
|
if mi.pubdate:
|
||||||
update_exth_record((106, str(mi.pubdate).encode(self.codec, 'replace')))
|
update_exth_record((106, str(mi.pubdate).encode(self.codec, 'replace')))
|
||||||
elif mi.timestamp:
|
elif mi.timestamp:
|
||||||
|
@ -433,6 +433,8 @@ class OPF(object):
|
|||||||
tags_path = XPath('descendant::*[re:match(name(), "subject", "i")]')
|
tags_path = XPath('descendant::*[re:match(name(), "subject", "i")]')
|
||||||
isbn_path = XPath('descendant::*[re:match(name(), "identifier", "i") and '+
|
isbn_path = XPath('descendant::*[re:match(name(), "identifier", "i") and '+
|
||||||
'(re:match(@scheme, "isbn", "i") or re:match(@opf:scheme, "isbn", "i"))]')
|
'(re:match(@scheme, "isbn", "i") or re:match(@opf:scheme, "isbn", "i"))]')
|
||||||
|
raster_cover_path = XPath('descendant::*[re:match(name(), "meta", "i") and ' +
|
||||||
|
're:match(@name, "cover", "i") and @content]')
|
||||||
identifier_path = XPath('descendant::*[re:match(name(), "identifier", "i")]')
|
identifier_path = XPath('descendant::*[re:match(name(), "identifier", "i")]')
|
||||||
application_id_path = XPath('descendant::*[re:match(name(), "identifier", "i") and '+
|
application_id_path = XPath('descendant::*[re:match(name(), "identifier", "i") and '+
|
||||||
'(re:match(@opf:scheme, "calibre|libprs500", "i") or re:match(@scheme, "calibre|libprs500", "i"))]')
|
'(re:match(@opf:scheme, "calibre|libprs500", "i") or re:match(@scheme, "calibre|libprs500", "i"))]')
|
||||||
@ -804,6 +806,14 @@ class OPF(object):
|
|||||||
if os.access(os.path.join(self.base_dir, prefix+suffix), os.R_OK):
|
if os.access(os.path.join(self.base_dir, prefix+suffix), os.R_OK):
|
||||||
return cpath
|
return cpath
|
||||||
|
|
||||||
|
@property
|
||||||
|
def raster_cover(self):
|
||||||
|
covers = self.raster_cover_path(self.metadata)
|
||||||
|
if covers:
|
||||||
|
cover_id = covers[0].get('content')
|
||||||
|
for item in self.itermanifest():
|
||||||
|
if item.get('id', None) == cover_id:
|
||||||
|
return item.get('href', None)
|
||||||
|
|
||||||
@dynamic_property
|
@dynamic_property
|
||||||
def cover(self):
|
def cover(self):
|
||||||
|
@ -83,22 +83,22 @@ class MetadataUpdater(object):
|
|||||||
|
|
||||||
sig = self.data[:4]
|
sig = self.data[:4]
|
||||||
if not sig.startswith('TPZ'):
|
if not sig.startswith('TPZ'):
|
||||||
raise ValueError('Not a Topaz file')
|
raise ValueError("'%s': Not a Topaz file" % getattr(stream, 'name', 'Unnamed stream'))
|
||||||
offset = 4
|
offset = 4
|
||||||
|
|
||||||
self.header_records, consumed = self.decode_vwi(self.data[offset:offset+4])
|
self.header_records, consumed = self.decode_vwi(self.data[offset:offset+4])
|
||||||
offset += consumed
|
offset += consumed
|
||||||
self.topaz_headers = self.get_headers(offset)
|
self.topaz_headers, self.th_seq = self.get_headers(offset)
|
||||||
|
|
||||||
# First integrity test - metadata header
|
# First integrity test - metadata header
|
||||||
if not 'metadata' in self.topaz_headers:
|
if not 'metadata' in self.topaz_headers:
|
||||||
raise ValueError('Invalid Topaz format - no metadata record')
|
raise ValueError("'%s': Invalid Topaz format - no metadata record" % getattr(stream, 'name', 'Unnamed stream'))
|
||||||
|
|
||||||
# Second integrity test - metadata body
|
# Second integrity test - metadata body
|
||||||
md_offset = self.topaz_headers['metadata']['blocks'][0]['offset']
|
md_offset = self.topaz_headers['metadata']['blocks'][0]['offset']
|
||||||
md_offset += self.base
|
md_offset += self.base
|
||||||
if self.data[md_offset+1:md_offset+9] != 'metadata':
|
if self.data[md_offset+1:md_offset+9] != 'metadata':
|
||||||
raise ValueError('Damaged metadata record')
|
raise ValueError("'%s': Damaged metadata record" % getattr(stream, 'name', 'Unnamed stream'))
|
||||||
|
|
||||||
def book_length(self):
|
def book_length(self):
|
||||||
''' convenience method for retrieving book length '''
|
''' convenience method for retrieving book length '''
|
||||||
@ -158,6 +158,8 @@ class MetadataUpdater(object):
|
|||||||
if value == 0:
|
if value == 0:
|
||||||
if multi_byte:
|
if multi_byte:
|
||||||
bytes.append(b|0x80)
|
bytes.append(b|0x80)
|
||||||
|
if bytes[-1] == 0xFF:
|
||||||
|
bytes.append(0x80)
|
||||||
if len(bytes) == 4:
|
if len(bytes) == 4:
|
||||||
return pack('>BBBB',bytes[3],bytes[2],bytes[1],bytes[0]).decode('iso-8859-1')
|
return pack('>BBBB',bytes[3],bytes[2],bytes[1],bytes[0]).decode('iso-8859-1')
|
||||||
elif len(bytes) == 3:
|
elif len(bytes) == 3:
|
||||||
@ -196,8 +198,9 @@ class MetadataUpdater(object):
|
|||||||
return dks.getvalue().encode('iso-8859-1')
|
return dks.getvalue().encode('iso-8859-1')
|
||||||
|
|
||||||
def get_headers(self, offset):
|
def get_headers(self, offset):
|
||||||
# Build a dict of topaz_header records
|
# Build a dict of topaz_header records, list of order
|
||||||
topaz_headers = {}
|
topaz_headers = {}
|
||||||
|
th_seq = []
|
||||||
for x in range(self.header_records):
|
for x in range(self.header_records):
|
||||||
offset += 1
|
offset += 1
|
||||||
taglen, consumed = self.decode_vwi(self.data[offset:offset+4])
|
taglen, consumed = self.decode_vwi(self.data[offset:offset+4])
|
||||||
@ -216,10 +219,11 @@ class MetadataUpdater(object):
|
|||||||
offset += consumed
|
offset += consumed
|
||||||
blocks[val] = dict(offset=hdr_offset,len_uncomp=len_uncomp,len_comp=len_comp)
|
blocks[val] = dict(offset=hdr_offset,len_uncomp=len_uncomp,len_comp=len_comp)
|
||||||
topaz_headers[tag] = dict(blocks=blocks)
|
topaz_headers[tag] = dict(blocks=blocks)
|
||||||
|
th_seq.append(tag)
|
||||||
self.eoth = self.data[offset]
|
self.eoth = self.data[offset]
|
||||||
offset += 1
|
offset += 1
|
||||||
self.base = offset
|
self.base = offset
|
||||||
return topaz_headers
|
return topaz_headers, th_seq
|
||||||
|
|
||||||
def generate_metadata_stream(self):
|
def generate_metadata_stream(self):
|
||||||
ms = StringIO.StringIO()
|
ms = StringIO.StringIO()
|
||||||
@ -229,7 +233,8 @@ class MetadataUpdater(object):
|
|||||||
ms.write(chr(len(self.metadata)))
|
ms.write(chr(len(self.metadata)))
|
||||||
|
|
||||||
# Add the metadata fields.
|
# Add the metadata fields.
|
||||||
for tag in self.metadata:
|
#for tag in self.metadata:
|
||||||
|
for tag in self.md_seq:
|
||||||
ms.write(self.encode_vwi(len(tag)).encode('iso-8859-1'))
|
ms.write(self.encode_vwi(len(tag)).encode('iso-8859-1'))
|
||||||
ms.write(tag)
|
ms.write(tag)
|
||||||
ms.write(self.encode_vwi(len(self.metadata[tag])).encode('iso-8859-1'))
|
ms.write(self.encode_vwi(len(self.metadata[tag])).encode('iso-8859-1'))
|
||||||
@ -256,6 +261,7 @@ class MetadataUpdater(object):
|
|||||||
#print "self.md_header: %s" % self.md_header
|
#print "self.md_header: %s" % self.md_header
|
||||||
|
|
||||||
self.metadata = {}
|
self.metadata = {}
|
||||||
|
self.md_seq = []
|
||||||
for x in range(self.md_header['num_recs']):
|
for x in range(self.md_header['num_recs']):
|
||||||
taglen, consumed = self.decode_vwi(self.data[offset:offset+4])
|
taglen, consumed = self.decode_vwi(self.data[offset:offset+4])
|
||||||
offset += consumed
|
offset += consumed
|
||||||
@ -266,16 +272,10 @@ class MetadataUpdater(object):
|
|||||||
metadata = self.data[offset:offset + md_len]
|
metadata = self.data[offset:offset + md_len]
|
||||||
offset += md_len
|
offset += md_len
|
||||||
self.metadata[tag] = metadata
|
self.metadata[tag] = metadata
|
||||||
|
self.md_seq.append(tag)
|
||||||
|
|
||||||
def regenerate_headers(self, updated_md_len):
|
def regenerate_headers(self, updated_md_len):
|
||||||
|
|
||||||
headers = {}
|
|
||||||
for tag in self.topaz_headers:
|
|
||||||
if self.topaz_headers[tag]['blocks']:
|
|
||||||
headers[tag] = self.topaz_headers[tag]['blocks'][0]['offset']
|
|
||||||
else:
|
|
||||||
headers[tag] = None
|
|
||||||
|
|
||||||
original_md_len = self.topaz_headers['metadata']['blocks'][0]['len_uncomp']
|
original_md_len = self.topaz_headers['metadata']['blocks'][0]['len_uncomp']
|
||||||
original_md_offset = self.topaz_headers['metadata']['blocks'][0]['offset']
|
original_md_offset = self.topaz_headers['metadata']['blocks'][0]['offset']
|
||||||
delta = updated_md_len - original_md_len
|
delta = updated_md_len - original_md_len
|
||||||
@ -285,7 +285,7 @@ class MetadataUpdater(object):
|
|||||||
ths.write(self.data[:5])
|
ths.write(self.data[:5])
|
||||||
|
|
||||||
# Rewrite the offsets for hdr_offsets > metadata offset
|
# Rewrite the offsets for hdr_offsets > metadata offset
|
||||||
for tag in headers.keys():
|
for tag in self.th_seq:
|
||||||
ths.write('c')
|
ths.write('c')
|
||||||
ths.write(self.encode_vwi(len(tag)))
|
ths.write(self.encode_vwi(len(tag)))
|
||||||
ths.write(tag)
|
ths.write(tag)
|
||||||
@ -330,12 +330,15 @@ class MetadataUpdater(object):
|
|||||||
self.metadata['Title'] = mi.title.encode('utf-8')
|
self.metadata['Title'] = mi.title.encode('utf-8')
|
||||||
|
|
||||||
updated_metadata = self.generate_metadata_stream()
|
updated_metadata = self.generate_metadata_stream()
|
||||||
head = self.regenerate_headers(len(updated_metadata))
|
# Skip tag_len, tag, extra
|
||||||
|
prefix = len('metadata') + 2
|
||||||
|
um_buf_len = len(updated_metadata) - prefix
|
||||||
|
head = self.regenerate_headers(um_buf_len)
|
||||||
|
|
||||||
# Chunk1: self.base -> original metadata start
|
# Chunk1: self.base -> original metadata start
|
||||||
# Chunk2: original metadata end -> eof
|
# Chunk2: original metadata end -> eof
|
||||||
chunk1 = self.data[self.base:self.original_md_start]
|
chunk1 = self.data[self.base:self.original_md_start]
|
||||||
chunk2 = self.data[self.original_md_start + self.original_md_len:]
|
chunk2 = self.data[prefix + self.original_md_start + self.original_md_len:]
|
||||||
|
|
||||||
self.stream.seek(0)
|
self.stream.seek(0)
|
||||||
self.stream.truncate(0)
|
self.stream.truncate(0)
|
||||||
@ -366,7 +369,7 @@ if __name__ == '__main__':
|
|||||||
data = open(sys.argv[1], 'rb')
|
data = open(sys.argv[1], 'rb')
|
||||||
stream = cStringIO.StringIO()
|
stream = cStringIO.StringIO()
|
||||||
stream.write(data.read())
|
stream.write(data.read())
|
||||||
mi = MetaInformation(title="A Marvelously Long Title", authors=['Riker, Gregory; Riker, Charles'])
|
mi = MetaInformation(title="Updated Title", authors=['Author, Random'])
|
||||||
set_metadata(stream, mi)
|
set_metadata(stream, mi)
|
||||||
|
|
||||||
# Write the result
|
# Write the result
|
||||||
|
@ -36,6 +36,9 @@ class MOBIOutput(OutputFormatPlugin):
|
|||||||
recommended_value=False, level=OptionRecommendation.LOW,
|
recommended_value=False, level=OptionRecommendation.LOW,
|
||||||
help=_('Disable compression of the file contents.')
|
help=_('Disable compression of the file contents.')
|
||||||
),
|
),
|
||||||
|
OptionRecommendation(name='personal_doc', recommended_value='[PDOC]',
|
||||||
|
help=_('Tag marking book to be filed with Personal Docs')
|
||||||
|
),
|
||||||
])
|
])
|
||||||
|
|
||||||
def check_for_periodical(self):
|
def check_for_periodical(self):
|
||||||
|
@ -320,6 +320,7 @@ class MobiReader(object):
|
|||||||
from lxml.html import soupparser
|
from lxml.html import soupparser
|
||||||
self.log.warning('Malformed markup, parsing using BeautifulSoup')
|
self.log.warning('Malformed markup, parsing using BeautifulSoup')
|
||||||
try:
|
try:
|
||||||
|
self.processed_html = self.processed_html.replace('</</', '</')
|
||||||
root = soupparser.fromstring(self.processed_html)
|
root = soupparser.fromstring(self.processed_html)
|
||||||
except Exception:
|
except Exception:
|
||||||
self.log.warning('MOBI markup appears to contain random bytes. Stripping.')
|
self.log.warning('MOBI markup appears to contain random bytes. Stripping.')
|
||||||
|
@ -2030,9 +2030,7 @@ class MobiWriter(object):
|
|||||||
if (not self._periodicalCount and not self._sectionCount and not self._articleCount) or \
|
if (not self._periodicalCount and not self._sectionCount and not self._articleCount) or \
|
||||||
not self.opts.mobi_periodical :
|
not self.opts.mobi_periodical :
|
||||||
mobiType = 0x002
|
mobiType = 0x002
|
||||||
elif self._periodicalCount and self._sectionCount == 1 :
|
elif self._periodicalCount:
|
||||||
mobiType = 0x102
|
|
||||||
elif self._periodicalCount and self._sectionCount > 1 :
|
|
||||||
pt = None
|
pt = None
|
||||||
if self._oeb.metadata.publication_type:
|
if self._oeb.metadata.publication_type:
|
||||||
x = unicode(self._oeb.metadata.publication_type[0]).split(':')
|
x = unicode(self._oeb.metadata.publication_type[0]).split(':')
|
||||||
|
@ -1191,7 +1191,8 @@ class Manifest(object):
|
|||||||
href = urlnormalize(href)
|
href = urlnormalize(href)
|
||||||
base, ext = os.path.splitext(href)
|
base, ext = os.path.splitext(href)
|
||||||
index = 1
|
index = 1
|
||||||
while href in self.hrefs:
|
lhrefs = set([x.lower() for x in self.hrefs])
|
||||||
|
while href.lower() in lhrefs:
|
||||||
href = base + str(index) + ext
|
href = base + str(index) + ext
|
||||||
index += 1
|
index += 1
|
||||||
return id, href
|
return id, href
|
||||||
|
@ -359,7 +359,7 @@ class OEBReader(object):
|
|||||||
self._toc_from_navpoint(item, node, child)
|
self._toc_from_navpoint(item, node, child)
|
||||||
|
|
||||||
def _toc_from_ncx(self, item):
|
def _toc_from_ncx(self, item):
|
||||||
if item is None:
|
if (item is None) or (item.data is None):
|
||||||
return False
|
return False
|
||||||
self.log.debug('Reading TOC from NCX...')
|
self.log.debug('Reading TOC from NCX...')
|
||||||
ncx = item.data
|
ncx = item.data
|
||||||
|
@ -592,6 +592,11 @@ def is_ok_to_use_qt():
|
|||||||
gui_thread = QThread.currentThread()
|
gui_thread = QThread.currentThread()
|
||||||
return gui_thread is QThread.currentThread()
|
return gui_thread is QThread.currentThread()
|
||||||
|
|
||||||
|
def is_gui_thread():
|
||||||
|
global gui_thread
|
||||||
|
return gui_thread is QThread.currentThread()
|
||||||
|
|
||||||
|
|
||||||
def find_forms(srcdir):
|
def find_forms(srcdir):
|
||||||
base = os.path.join(srcdir, 'calibre', 'gui2')
|
base = os.path.join(srcdir, 'calibre', 'gui2')
|
||||||
forms = []
|
forms = []
|
||||||
|
@ -19,7 +19,8 @@ class PluginWidget(Widget, Ui_Form):
|
|||||||
Widget.__init__(self, parent, 'comic_input',
|
Widget.__init__(self, parent, 'comic_input',
|
||||||
['colors', 'dont_normalize', 'keep_aspect_ratio', 'right2left',
|
['colors', 'dont_normalize', 'keep_aspect_ratio', 'right2left',
|
||||||
'despeckle', 'no_sort', 'no_process', 'landscape',
|
'despeckle', 'no_sort', 'no_process', 'landscape',
|
||||||
'dont_sharpen', 'disable_trim', 'wide', 'output_format']
|
'dont_sharpen', 'disable_trim', 'wide', 'output_format',
|
||||||
|
'dont_grayscale']
|
||||||
)
|
)
|
||||||
self.db, self.book_id = db, book_id
|
self.db, self.book_id = db, book_id
|
||||||
for x in get_option('output_format').option.choices:
|
for x in get_option('output_format').option.choices:
|
||||||
|
@ -7,14 +7,14 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>599</width>
|
<width>599</width>
|
||||||
<height>343</height>
|
<height>345</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="1" column="0">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Number of Colors:</string>
|
<string>&Number of Colors:</string>
|
||||||
@ -24,83 +24,83 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="2" column="1">
|
||||||
<widget class="QSpinBox" name="opt_colors">
|
<widget class="QSpinBox" name="opt_colors">
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>8</number>
|
<number>8</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>3200000</number>
|
<number>32000000</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="singleStep">
|
<property name="singleStep">
|
||||||
<number>8</number>
|
<number>8</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QCheckBox" name="opt_dont_normalize">
|
<widget class="QCheckBox" name="opt_dont_normalize">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Disable &normalize</string>
|
<string>Disable &normalize</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="4" column="0">
|
||||||
<widget class="QCheckBox" name="opt_keep_aspect_ratio">
|
<widget class="QCheckBox" name="opt_keep_aspect_ratio">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Keep &aspect ratio</string>
|
<string>Keep &aspect ratio</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0">
|
<item row="5" column="0">
|
||||||
<widget class="QCheckBox" name="opt_dont_sharpen">
|
<widget class="QCheckBox" name="opt_dont_sharpen">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Disable &Sharpening</string>
|
<string>Disable &Sharpening</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="6" column="0">
|
||||||
<widget class="QCheckBox" name="opt_disable_trim">
|
<widget class="QCheckBox" name="opt_disable_trim">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Disable &Trimming</string>
|
<string>Disable &Trimming</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0">
|
<item row="7" column="0">
|
||||||
<widget class="QCheckBox" name="opt_wide">
|
<widget class="QCheckBox" name="opt_wide">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Wide</string>
|
<string>&Wide</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="0">
|
<item row="8" column="0">
|
||||||
<widget class="QCheckBox" name="opt_landscape">
|
<widget class="QCheckBox" name="opt_landscape">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Landscape</string>
|
<string>&Landscape</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0">
|
<item row="9" column="0">
|
||||||
<widget class="QCheckBox" name="opt_right2left">
|
<widget class="QCheckBox" name="opt_right2left">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Right to left</string>
|
<string>&Right to left</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="0">
|
<item row="10" column="0">
|
||||||
<widget class="QCheckBox" name="opt_no_sort">
|
<widget class="QCheckBox" name="opt_no_sort">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Don't so&rt</string>
|
<string>Don't so&rt</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="10" column="0">
|
<item row="11" column="0">
|
||||||
<widget class="QCheckBox" name="opt_despeckle">
|
<widget class="QCheckBox" name="opt_despeckle">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>De&speckle</string>
|
<string>De&speckle</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="12" column="0">
|
<item row="13" column="0">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
@ -120,7 +120,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="0">
|
<item row="12" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Output format:</string>
|
<string>&Output format:</string>
|
||||||
@ -130,9 +130,16 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="1">
|
<item row="12" column="1">
|
||||||
<widget class="QComboBox" name="opt_output_format"/>
|
<widget class="QComboBox" name="opt_output_format"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="opt_dont_grayscale">
|
||||||
|
<property name="text">
|
||||||
|
<string>Disable conversion of images to &black and white</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
@ -148,8 +155,8 @@
|
|||||||
<y>11</y>
|
<y>11</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>210</x>
|
<x>216</x>
|
||||||
<y>44</y>
|
<y>76</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -164,8 +171,8 @@
|
|||||||
<y>17</y>
|
<y>17</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>371</x>
|
<x>592</x>
|
||||||
<y>39</y>
|
<y>76</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -180,8 +187,8 @@
|
|||||||
<y>15</y>
|
<y>15</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>20</x>
|
<x>26</x>
|
||||||
<y>67</y>
|
<y>101</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -196,8 +203,8 @@
|
|||||||
<y>11</y>
|
<y>11</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>38</x>
|
<x>44</x>
|
||||||
<y>98</y>
|
<y>126</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -212,8 +219,8 @@
|
|||||||
<y>12</y>
|
<y>12</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>110</x>
|
<x>116</x>
|
||||||
<y>124</y>
|
<y>151</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -224,12 +231,12 @@
|
|||||||
<slot>setDisabled(bool)</slot>
|
<slot>setDisabled(bool)</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
<x>153</x>
|
<x>159</x>
|
||||||
<y>5</y>
|
<y>11</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>67</x>
|
<x>73</x>
|
||||||
<y>155</y>
|
<y>176</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -244,8 +251,8 @@
|
|||||||
<y>13</y>
|
<y>13</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>84</x>
|
<x>90</x>
|
||||||
<y>180</y>
|
<y>201</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -292,8 +299,8 @@
|
|||||||
<y>11</y>
|
<y>11</y>
|
||||||
</hint>
|
</hint>
|
||||||
<hint type="destinationlabel">
|
<hint type="destinationlabel">
|
||||||
<x>105</x>
|
<x>111</x>
|
||||||
<y>256</y>
|
<y>276</y>
|
||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
@ -329,5 +336,21 @@
|
|||||||
</hint>
|
</hint>
|
||||||
</hints>
|
</hints>
|
||||||
</connection>
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>opt_no_process</sender>
|
||||||
|
<signal>toggled(bool)</signal>
|
||||||
|
<receiver>opt_dont_grayscale</receiver>
|
||||||
|
<slot>setDisabled(bool)</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>229</x>
|
||||||
|
<y>22</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>231</x>
|
||||||
|
<y>36</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
</connections>
|
</connections>
|
||||||
</ui>
|
</ui>
|
||||||
|
@ -147,8 +147,9 @@ class MetadataWidget(Widget, Ui_Form):
|
|||||||
if comments:
|
if comments:
|
||||||
mi.comments = comments
|
mi.comments = comments
|
||||||
mi.series_index = float(self.series_index.value())
|
mi.series_index = float(self.series_index.value())
|
||||||
if self.series.currentIndex() > -1:
|
series = unicode(self.series.currentText()).strip()
|
||||||
mi.series = unicode(self.series.currentText()).strip()
|
if series:
|
||||||
|
mi.series = series
|
||||||
tags = [t.strip() for t in unicode(self.tags.text()).strip().split(',')]
|
tags = [t.strip() for t in unicode(self.tags.text()).strip().split(',')]
|
||||||
if tags:
|
if tags:
|
||||||
mi.tags = tags
|
mi.tags = tags
|
||||||
|
@ -24,7 +24,7 @@ class PluginWidget(Widget, Ui_Form):
|
|||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'mobi_output',
|
Widget.__init__(self, parent, 'mobi_output',
|
||||||
['prefer_author_sort', 'rescale_images', 'toc_title',
|
['prefer_author_sort', 'rescale_images', 'toc_title',
|
||||||
'dont_compress', 'no_inline_toc', 'masthead_font']
|
'dont_compress', 'no_inline_toc', 'masthead_font','personal_doc']
|
||||||
)
|
)
|
||||||
self.db, self.book_id = db, book_id
|
self.db, self.book_id = db, book_id
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>421</width>
|
<width>521</width>
|
||||||
<height>300</height>
|
<height>331</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@ -64,13 +64,27 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Masthead font:</string>
|
<string>Periodical masthead font:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="opt_masthead_font"/>
|
<widget class="QComboBox" name="opt_masthead_font"/>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Personal Doc tag:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLineEdit" name="opt_personal_doc"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
@ -79,7 +93,7 @@
|
|||||||
<property name="sizeHint" stdset="0">
|
<property name="sizeHint" stdset="0">
|
||||||
<size>
|
<size>
|
||||||
<width>20</width>
|
<width>20</width>
|
||||||
<height>55</height>
|
<height>40</height>
|
||||||
</size>
|
</size>
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
|
@ -205,6 +205,7 @@ class Scheduler(QObject):
|
|||||||
|
|
||||||
def __init__(self, parent, db):
|
def __init__(self, parent, db):
|
||||||
QObject.__init__(self, parent)
|
QObject.__init__(self, parent)
|
||||||
|
self.internet_connection_failed = False
|
||||||
self._parent = parent
|
self._parent = parent
|
||||||
self.recipe_model = RecipeModel(db)
|
self.recipe_model = RecipeModel(db)
|
||||||
self.lock = QMutex(QMutex.Recursive)
|
self.lock = QMutex(QMutex.Recursive)
|
||||||
@ -305,9 +306,17 @@ class Scheduler(QObject):
|
|||||||
self.download(urn)
|
self.download(urn)
|
||||||
|
|
||||||
def download(self, urn):
|
def download(self, urn):
|
||||||
if not internet_connected():
|
|
||||||
return
|
|
||||||
self.lock.lock()
|
self.lock.lock()
|
||||||
|
if not internet_connected():
|
||||||
|
if not self.internet_connection_failed:
|
||||||
|
self.internet_connection_failed = True
|
||||||
|
d = error_dialog(self._parent, _('No internet connection'),
|
||||||
|
_('Cannot download news as no internet connection '
|
||||||
|
'is active'))
|
||||||
|
d.setModal(False)
|
||||||
|
d.show()
|
||||||
|
return
|
||||||
|
self.internet_connection_failed = False
|
||||||
doit = urn not in self.download_queue
|
doit = urn not in self.download_queue
|
||||||
self.lock.unlock()
|
self.lock.unlock()
|
||||||
if doit:
|
if doit:
|
||||||
|
@ -35,6 +35,7 @@ class LibraryDelegate(QItemDelegate):
|
|||||||
|
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
QItemDelegate.__init__(self, parent)
|
QItemDelegate.__init__(self, parent)
|
||||||
|
self._parent = parent
|
||||||
self.star_path = QPainterPath()
|
self.star_path = QPainterPath()
|
||||||
self.star_path.moveTo(90, 50)
|
self.star_path.moveTo(90, 50)
|
||||||
for i in range(1, 5):
|
for i in range(1, 5):
|
||||||
@ -65,7 +66,8 @@ class LibraryDelegate(QItemDelegate):
|
|||||||
|
|
||||||
painter.save()
|
painter.save()
|
||||||
if hasattr(QStyle, 'CE_ItemViewItem'):
|
if hasattr(QStyle, 'CE_ItemViewItem'):
|
||||||
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter)
|
QApplication.style().drawControl(QStyle.CE_ItemViewItem, option,
|
||||||
|
painter, self._parent)
|
||||||
elif option.state & QStyle.State_Selected:
|
elif option.state & QStyle.State_Selected:
|
||||||
painter.fillRect(option.rect, option.palette.highlight())
|
painter.fillRect(option.rect, option.palette.highlight())
|
||||||
self.drawFocus(painter, option, option.rect)
|
self.drawFocus(painter, option, option.rect)
|
||||||
@ -82,8 +84,8 @@ class LibraryDelegate(QItemDelegate):
|
|||||||
draw_star()
|
draw_star()
|
||||||
painter.translate(-self.SIZE, 0)
|
painter.translate(-self.SIZE, 0)
|
||||||
i += 1
|
i += 1
|
||||||
except Exception, e:
|
except:
|
||||||
traceback.print_exc(e)
|
traceback.print_exc()
|
||||||
painter.restore()
|
painter.restore()
|
||||||
|
|
||||||
def createEditor(self, parent, option, index):
|
def createEditor(self, parent, option, index):
|
||||||
@ -859,6 +861,9 @@ class BooksView(TableView):
|
|||||||
def search_done(self, ok):
|
def search_done(self, ok):
|
||||||
self._search_done(self, ok)
|
self._search_done(self, ok)
|
||||||
|
|
||||||
|
def row_count(self):
|
||||||
|
return self._model.count()
|
||||||
|
|
||||||
|
|
||||||
class DeviceBooksView(BooksView):
|
class DeviceBooksView(BooksView):
|
||||||
|
|
||||||
|
@ -206,6 +206,13 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="search_count">
|
||||||
|
<property name="text">
|
||||||
|
<string>set in ui.py</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="clear_button">
|
<widget class="QToolButton" name="clear_button">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
@ -220,6 +227,64 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="SavedSearchBox" name="saved_search">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Choose saved search or enter name for new saved search</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimumContentsLength">
|
||||||
|
<number>15</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>150</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="copy_search_button">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Copy current search text (instead of search name)</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/search_copy_saved.svg</normaloff>:/images/search_copy_saved.svg</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="save_search_button">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Save current search under the name shown in the box</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/search_add_saved.svg</normaloff>:/images/search_add_saved.svg</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="delete_search_button">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Delete current search and clear search box</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
<property name="icon">
|
||||||
|
<iconset resource="../../../resources/images.qrc">
|
||||||
|
<normaloff>:/images/search_delete_saved.svg</normaloff>:/images/search_delete_saved.svg</iconset>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
<item row="2" column="0">
|
||||||
@ -686,6 +751,11 @@
|
|||||||
<extends>QComboBox</extends>
|
<extends>QComboBox</extends>
|
||||||
<header>calibre.gui2.search_box</header>
|
<header>calibre.gui2.search_box</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>SavedSearchBox</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>calibre.gui2.search_box</header>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="../../../resources/images.qrc"/>
|
<include location="../../../resources/images.qrc"/>
|
||||||
|
@ -7,6 +7,7 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
from PyQt4.Qt import QComboBox, SIGNAL, Qt, QLineEdit, QStringList, pyqtSlot
|
from PyQt4.Qt import QComboBox, SIGNAL, Qt, QLineEdit, QStringList, pyqtSlot
|
||||||
|
from PyQt4.QtGui import QCompleter
|
||||||
|
|
||||||
from calibre.gui2 import config
|
from calibre.gui2 import config
|
||||||
|
|
||||||
@ -20,6 +21,10 @@ class SearchLineEdit(QLineEdit):
|
|||||||
self.emit(SIGNAL('mouse_released(PyQt_PyObject)'), event)
|
self.emit(SIGNAL('mouse_released(PyQt_PyObject)'), event)
|
||||||
QLineEdit.mouseReleaseEvent(self, event)
|
QLineEdit.mouseReleaseEvent(self, event)
|
||||||
|
|
||||||
|
def focusOutEvent(self, event):
|
||||||
|
self.emit(SIGNAL('focus_out(PyQt_PyObject)'), event)
|
||||||
|
QLineEdit.focusOutEvent(self, event)
|
||||||
|
|
||||||
def dropEvent(self, ev):
|
def dropEvent(self, ev):
|
||||||
if self.parent().help_state:
|
if self.parent().help_state:
|
||||||
self.parent().normalize_state()
|
self.parent().normalize_state()
|
||||||
@ -176,3 +181,130 @@ class SearchBox2(QComboBox):
|
|||||||
def search_as_you_type(self, enabled):
|
def search_as_you_type(self, enabled):
|
||||||
self.as_you_type = enabled
|
self.as_you_type = enabled
|
||||||
|
|
||||||
|
|
||||||
|
class SavedSearchBox(QComboBox):
|
||||||
|
|
||||||
|
'''
|
||||||
|
To use this class:
|
||||||
|
* Call initialize()
|
||||||
|
* Connect to the changed() signal from this widget
|
||||||
|
if you care about changes to the list of saved searches.
|
||||||
|
'''
|
||||||
|
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
QComboBox.__init__(self, parent)
|
||||||
|
self.normal_background = 'rgb(255, 255, 255, 0%)'
|
||||||
|
|
||||||
|
self.line_edit = SearchLineEdit(self)
|
||||||
|
self.setLineEdit(self.line_edit)
|
||||||
|
self.connect(self.line_edit, SIGNAL('key_pressed(PyQt_PyObject)'),
|
||||||
|
self.key_pressed, Qt.DirectConnection)
|
||||||
|
self.connect(self.line_edit, SIGNAL('mouse_released(PyQt_PyObject)'),
|
||||||
|
self.mouse_released, Qt.DirectConnection)
|
||||||
|
self.connect(self.line_edit, SIGNAL('focus_out(PyQt_PyObject)'),
|
||||||
|
self.focus_out, Qt.DirectConnection)
|
||||||
|
self.connect(self, SIGNAL('activated(const QString&)'),
|
||||||
|
self.saved_search_selected)
|
||||||
|
|
||||||
|
completer = QCompleter(self) # turn off auto-completion
|
||||||
|
self.setCompleter(completer)
|
||||||
|
self.setEditable(True)
|
||||||
|
self.help_state = True
|
||||||
|
self.prev_search = ''
|
||||||
|
self.setInsertPolicy(self.NoInsert)
|
||||||
|
|
||||||
|
def initialize(self, _saved_searches, _search_box, colorize=False, help_text=_('Search')):
|
||||||
|
self.tool_tip_text = self.toolTip()
|
||||||
|
self.saved_searches = _saved_searches
|
||||||
|
self.search_box = _search_box
|
||||||
|
self.help_text = help_text
|
||||||
|
self.colorize = colorize
|
||||||
|
self.clear_to_help()
|
||||||
|
|
||||||
|
def normalize_state(self):
|
||||||
|
#print 'in normalize_state'
|
||||||
|
self.setEditText('')
|
||||||
|
self.line_edit.setStyleSheet(
|
||||||
|
'QLineEdit { color: black; background-color: %s; }' %
|
||||||
|
self.normal_background)
|
||||||
|
self.help_state = False
|
||||||
|
|
||||||
|
def clear_to_help(self):
|
||||||
|
#print 'in clear_to_help'
|
||||||
|
self.setToolTip(self.tool_tip_text)
|
||||||
|
self.initialize_saved_search_names()
|
||||||
|
self.setEditText(self.help_text)
|
||||||
|
self.line_edit.home(False)
|
||||||
|
self.help_state = True
|
||||||
|
self.line_edit.setStyleSheet(
|
||||||
|
'QLineEdit { color: gray; background-color: %s; }' %
|
||||||
|
self.normal_background)
|
||||||
|
|
||||||
|
def focus_out(self, event):
|
||||||
|
#print 'in focus_out'
|
||||||
|
if self.currentText() == '':
|
||||||
|
self.clear_to_help()
|
||||||
|
|
||||||
|
def key_pressed(self, event):
|
||||||
|
#print 'in key_pressed'
|
||||||
|
if self.help_state:
|
||||||
|
self.normalize_state()
|
||||||
|
|
||||||
|
def mouse_released(self, event):
|
||||||
|
if self.help_state:
|
||||||
|
self.normalize_state()
|
||||||
|
|
||||||
|
def saved_search_selected (self, qname):
|
||||||
|
#print 'in saved_search_selected'
|
||||||
|
qname = unicode(qname)
|
||||||
|
if qname is None or not qname.strip():
|
||||||
|
return
|
||||||
|
self.normalize_state()
|
||||||
|
self.search_box.set_search_string(u'search:"%s"' % qname)
|
||||||
|
self.setEditText(qname)
|
||||||
|
self.setToolTip(self.saved_searches.lookup(qname))
|
||||||
|
|
||||||
|
def initialize_saved_search_names(self):
|
||||||
|
#print 'in initialize_saved_search_names'
|
||||||
|
self.clear()
|
||||||
|
qnames = self.saved_searches.names()
|
||||||
|
self.addItems(qnames)
|
||||||
|
self.setCurrentIndex(-1)
|
||||||
|
|
||||||
|
# SIGNALed from the main UI
|
||||||
|
def delete_search_button_clicked(self):
|
||||||
|
#print 'in delete_search_button_clicked'
|
||||||
|
idx = self.currentIndex
|
||||||
|
if idx < 0:
|
||||||
|
return
|
||||||
|
self.saved_searches.delete(unicode(self.currentText()))
|
||||||
|
self.clear_to_help()
|
||||||
|
self.search_box.set_search_string('')
|
||||||
|
self.emit(SIGNAL('changed()'))
|
||||||
|
|
||||||
|
# SIGNALed from the main UI
|
||||||
|
def save_search_button_clicked(self):
|
||||||
|
#print 'in save_search_button_clicked'
|
||||||
|
name = unicode(self.currentText())
|
||||||
|
if self.help_state or not name.strip():
|
||||||
|
name = unicode(self.search_box.text()).replace('"', '')
|
||||||
|
self.saved_searches.delete(name)
|
||||||
|
self.saved_searches.add(name, unicode(self.search_box.text()))
|
||||||
|
# now go through an initialization cycle to ensure that the combobox has
|
||||||
|
# the new search in it, that it is selected, and that the search box
|
||||||
|
# references the new search instead of the text in the search.
|
||||||
|
self.clear_to_help()
|
||||||
|
self.normalize_state()
|
||||||
|
self.setCurrentIndex(self.findText(name))
|
||||||
|
self.saved_search_selected (name)
|
||||||
|
self.emit(SIGNAL('changed()'))
|
||||||
|
|
||||||
|
# SIGNALed from the main UI
|
||||||
|
def copy_search_button_clicked (self):
|
||||||
|
#print 'in copy_search_button_clicked'
|
||||||
|
idx = self.currentIndex();
|
||||||
|
if idx < 0:
|
||||||
|
return
|
||||||
|
self.search_box.set_search_string(self.saved_searches.lookup(unicode(self.currentText())))
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,9 @@ from itertools import izip
|
|||||||
from PyQt4.Qt import Qt, QTreeView, QApplication, \
|
from PyQt4.Qt import Qt, QTreeView, QApplication, \
|
||||||
QFont, SIGNAL, QSize, QIcon, QPoint, \
|
QFont, SIGNAL, QSize, QIcon, QPoint, \
|
||||||
QAbstractItemModel, QVariant, QModelIndex
|
QAbstractItemModel, QVariant, QModelIndex
|
||||||
from calibre.gui2 import config, NONE
|
from calibre.gui2 import config, NONE, is_gui_thread, Dispatcher
|
||||||
|
from calibre.utils.search_query_parser import saved_searches
|
||||||
|
from calibre.library.database2 import Tag
|
||||||
|
|
||||||
class TagsView(QTreeView):
|
class TagsView(QTreeView):
|
||||||
|
|
||||||
@ -31,6 +33,7 @@ class TagsView(QTreeView):
|
|||||||
self.connect(self, SIGNAL('clicked(QModelIndex)'), self.toggle)
|
self.connect(self, SIGNAL('clicked(QModelIndex)'), self.toggle)
|
||||||
self.popularity.setChecked(config['sort_by_popularity'])
|
self.popularity.setChecked(config['sort_by_popularity'])
|
||||||
self.connect(self.popularity, SIGNAL('stateChanged(int)'), self.sort_changed)
|
self.connect(self.popularity, SIGNAL('stateChanged(int)'), self.sort_changed)
|
||||||
|
self.connect(self, SIGNAL('need_refresh()'), self.recount, Qt.QueuedConnection)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def match_all(self):
|
def match_all(self):
|
||||||
@ -51,6 +54,9 @@ class TagsView(QTreeView):
|
|||||||
self.model().clear_state()
|
self.model().clear_state()
|
||||||
|
|
||||||
def recount(self, *args):
|
def recount(self, *args):
|
||||||
|
if not is_gui_thread():
|
||||||
|
# Re-call in GUI thread
|
||||||
|
return Dispatcher(self.recount)(*args)
|
||||||
ci = self.currentIndex()
|
ci = self.currentIndex()
|
||||||
if not ci.isValid():
|
if not ci.isValid():
|
||||||
ci = self.indexAt(QPoint(10, 10))
|
ci = self.indexAt(QPoint(10, 10))
|
||||||
@ -119,9 +125,14 @@ class TagTreeItem(object):
|
|||||||
|
|
||||||
def tag_data(self, role):
|
def tag_data(self, role):
|
||||||
if role == Qt.DisplayRole:
|
if role == Qt.DisplayRole:
|
||||||
return QVariant('[%d] %s'%(self.tag.count, self.tag.name))
|
if self.tag.count == 0:
|
||||||
|
return QVariant('%s'%(self.tag.name))
|
||||||
|
else:
|
||||||
|
return QVariant('[%d] %s'%(self.tag.count, self.tag.name))
|
||||||
if role == Qt.DecorationRole:
|
if role == Qt.DecorationRole:
|
||||||
return self.icon_map[self.tag.state]
|
return self.icon_map[self.tag.state]
|
||||||
|
if role == Qt.ToolTipRole and self.tag.tooltip:
|
||||||
|
return QVariant(self.tag.tooltip)
|
||||||
return NONE
|
return NONE
|
||||||
|
|
||||||
def toggle(self):
|
def toggle(self):
|
||||||
@ -129,36 +140,44 @@ class TagTreeItem(object):
|
|||||||
self.tag.state = (self.tag.state + 1)%3
|
self.tag.state = (self.tag.state + 1)%3
|
||||||
|
|
||||||
class TagsModel(QAbstractItemModel):
|
class TagsModel(QAbstractItemModel):
|
||||||
categories = [_('Authors'), _('Series'), _('Formats'), _('Publishers'), _('News'), _('Tags')]
|
categories = [_('Authors'), _('Series'), _('Formats'), _('Publishers'), _('News'), _('Tags'), _('Searches')]
|
||||||
row_map = ['author', 'series', 'format', 'publisher', 'news', 'tag']
|
row_map = ['author', 'series', 'format', 'publisher', 'news', 'tag', 'search']
|
||||||
|
|
||||||
def __init__(self, db, parent=None):
|
def __init__(self, db, parent=None):
|
||||||
QAbstractItemModel.__init__(self, parent)
|
QAbstractItemModel.__init__(self, parent)
|
||||||
self.cmap = tuple(map(QIcon, [I('user_profile.svg'),
|
self.cmap = tuple(map(QIcon, [I('user_profile.svg'),
|
||||||
I('series.svg'), I('book.svg'), I('publisher.png'),
|
I('series.svg'), I('book.svg'), I('publisher.png'),
|
||||||
I('news.svg'), I('tags.svg')]))
|
I('news.svg'), I('tags.svg'), I('search.svg')]))
|
||||||
self.icon_map = [QIcon(), QIcon(I('plus.svg')),
|
self.icon_map = [QIcon(), QIcon(I('plus.svg')),
|
||||||
QIcon(I('minus.svg'))]
|
QIcon(I('minus.svg'))]
|
||||||
self.db = db
|
self.db = db
|
||||||
self.ignore_next_search = 0
|
self.ignore_next_search = 0
|
||||||
self.root_item = TagTreeItem()
|
self.root_item = TagTreeItem()
|
||||||
data = self.db.get_categories(config['sort_by_popularity'])
|
data = self.db.get_categories(config['sort_by_popularity'])
|
||||||
|
data['search'] = self.get_search_nodes()
|
||||||
|
|
||||||
for i, r in enumerate(self.row_map):
|
for i, r in enumerate(self.row_map):
|
||||||
c = TagTreeItem(parent=self.root_item,
|
c = TagTreeItem(parent=self.root_item,
|
||||||
data=self.categories[i], category_icon=self.cmap[i])
|
data=self.categories[i], category_icon=self.cmap[i])
|
||||||
for tag in data[r]:
|
for tag in data[r]:
|
||||||
t = TagTreeItem(parent=c, data=tag, icon_map=self.icon_map)
|
TagTreeItem(parent=c, data=tag, icon_map=self.icon_map)
|
||||||
t
|
|
||||||
|
|
||||||
self.db.add_listener(self.database_changed)
|
self.db.add_listener(self.database_changed)
|
||||||
self.connect(self, SIGNAL('need_refresh()'), self.refresh,
|
self.connect(self, SIGNAL('need_refresh()'), self.refresh,
|
||||||
Qt.QueuedConnection)
|
Qt.QueuedConnection)
|
||||||
|
|
||||||
|
def get_search_nodes(self):
|
||||||
|
l = []
|
||||||
|
for i in saved_searches.names():
|
||||||
|
l.append(Tag(i, tooltip=saved_searches.lookup(i)))
|
||||||
|
return l
|
||||||
|
|
||||||
def database_changed(self, event, ids):
|
def database_changed(self, event, ids):
|
||||||
self.emit(SIGNAL('need_refresh()'))
|
self.emit(SIGNAL('need_refresh()'))
|
||||||
|
|
||||||
def refresh(self):
|
def refresh(self):
|
||||||
data = self.db.get_categories(config['sort_by_popularity'])
|
data = self.db.get_categories(config['sort_by_popularity'])
|
||||||
|
data['search'] = self.get_search_nodes()
|
||||||
for i, r in enumerate(self.row_map):
|
for i, r in enumerate(self.row_map):
|
||||||
category = self.root_item.children[i]
|
category = self.root_item.children[i]
|
||||||
names = [t.tag.name for t in category.children]
|
names = [t.tag.name for t in category.children]
|
||||||
|
@ -29,6 +29,7 @@ from calibre.utils.filenames import ascii_filename
|
|||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
from calibre.utils.config import prefs, dynamic
|
from calibre.utils.config import prefs, dynamic
|
||||||
from calibre.utils.ipc.server import Server
|
from calibre.utils.ipc.server import Server
|
||||||
|
from calibre.utils.search_query_parser import saved_searches
|
||||||
from calibre.gui2 import warning_dialog, choose_files, error_dialog, \
|
from calibre.gui2 import warning_dialog, choose_files, error_dialog, \
|
||||||
question_dialog,\
|
question_dialog,\
|
||||||
pixmap_to_data, choose_dir, \
|
pixmap_to_data, choose_dir, \
|
||||||
@ -140,9 +141,22 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
Ui_MainWindow.__init__(self)
|
Ui_MainWindow.__init__(self)
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.setWindowTitle(__appname__)
|
self.setWindowTitle(__appname__)
|
||||||
|
|
||||||
self.search.initialize('main_search_history', colorize=True,
|
self.search.initialize('main_search_history', colorize=True,
|
||||||
help_text=_('Search (For Advanced Search click the button to the left)'))
|
help_text=_('Search (For Advanced Search click the button to the left)'))
|
||||||
self.connect(self.clear_button, SIGNAL('clicked()'), self.search.clear)
|
self.connect(self.clear_button, SIGNAL('clicked()'), self.search_clear)
|
||||||
|
self.connect(self.clear_button, SIGNAL('clicked()'), self.saved_search.clear_to_help)
|
||||||
|
self.search_clear()
|
||||||
|
|
||||||
|
self.saved_search.initialize(saved_searches, self.search, colorize=True,
|
||||||
|
help_text=_('Saved Searches'))
|
||||||
|
self.connect(self.save_search_button, SIGNAL('clicked()'),
|
||||||
|
self.saved_search.save_search_button_clicked)
|
||||||
|
self.connect(self.delete_search_button, SIGNAL('clicked()'),
|
||||||
|
self.saved_search.delete_search_button_clicked)
|
||||||
|
self.connect(self.copy_search_button, SIGNAL('clicked()'),
|
||||||
|
self.saved_search.copy_search_button_clicked)
|
||||||
|
|
||||||
self.progress_indicator = ProgressIndicator(self)
|
self.progress_indicator = ProgressIndicator(self)
|
||||||
self.verbose = opts.verbose
|
self.verbose = opts.verbose
|
||||||
self.get_metadata = GetMetadata()
|
self.get_metadata = GetMetadata()
|
||||||
@ -511,6 +525,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.connect(self.tags_view,
|
self.connect(self.tags_view,
|
||||||
SIGNAL('tags_marked(PyQt_PyObject, PyQt_PyObject)'),
|
SIGNAL('tags_marked(PyQt_PyObject, PyQt_PyObject)'),
|
||||||
self.search.search_from_tags)
|
self.search.search_from_tags)
|
||||||
|
self.connect(self.tags_view,
|
||||||
|
SIGNAL('tags_marked(PyQt_PyObject, PyQt_PyObject)'),
|
||||||
|
self.saved_search.clear_to_help)
|
||||||
self.connect(self.status_bar.tag_view_button,
|
self.connect(self.status_bar.tag_view_button,
|
||||||
SIGNAL('toggled(bool)'), self.toggle_tags_view)
|
SIGNAL('toggled(bool)'), self.toggle_tags_view)
|
||||||
self.connect(self.search,
|
self.connect(self.search,
|
||||||
@ -519,8 +536,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.connect(self.library_view.model(),
|
self.connect(self.library_view.model(),
|
||||||
SIGNAL('count_changed(int)'), self.location_view.count_changed)
|
SIGNAL('count_changed(int)'), self.location_view.count_changed)
|
||||||
self.connect(self.library_view.model(), SIGNAL('count_changed(int)'),
|
self.connect(self.library_view.model(), SIGNAL('count_changed(int)'),
|
||||||
self.tags_view.recount)
|
self.tags_view.recount, Qt.QueuedConnection)
|
||||||
self.connect(self.search, SIGNAL('cleared()'), self.tags_view.clear)
|
self.connect(self.search, SIGNAL('cleared()'), self.tags_view_clear)
|
||||||
|
self.connect(self.saved_search, SIGNAL('changed()'), self.tags_view.recount, Qt.QueuedConnection)
|
||||||
if not gprefs.get('quick_start_guide_added', False):
|
if not gprefs.get('quick_start_guide_added', False):
|
||||||
from calibre.ebooks.metadata import MetaInformation
|
from calibre.ebooks.metadata import MetaInformation
|
||||||
mi = MetaInformation(_('Calibre Quick Start Guide'), ['John Schember'])
|
mi = MetaInformation(_('Calibre Quick Start Guide'), ['John Schember'])
|
||||||
@ -762,8 +780,17 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.tag_match.setVisible(False)
|
self.tag_match.setVisible(False)
|
||||||
self.popularity.setVisible(False)
|
self.popularity.setVisible(False)
|
||||||
|
|
||||||
|
def tags_view_clear(self):
|
||||||
|
self.search_count.setText(_("(all books)"))
|
||||||
|
self.tags_view.clear()
|
||||||
|
|
||||||
|
def search_clear(self):
|
||||||
|
self.search_count.setText(_("(all books)"))
|
||||||
|
self.search.clear()
|
||||||
|
|
||||||
def search_done(self, view, ok):
|
def search_done(self, view, ok):
|
||||||
if view is self.current_view():
|
if view is self.current_view():
|
||||||
|
self.search_count.setText(_("(%d found)") % self.current_view().row_count())
|
||||||
self.search.search_done(ok)
|
self.search.search_done(ok)
|
||||||
|
|
||||||
def sync_cf_to_listview(self, current, previous):
|
def sync_cf_to_listview(self, current, previous):
|
||||||
|
@ -299,6 +299,11 @@ class StanzaPage(QWizardPage, StanzaUI):
|
|||||||
return FinishPage.ID
|
return FinishPage.ID
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
|
from calibre.ebooks.conversion.config import load_defaults, save_defaults
|
||||||
|
recs = load_defaults('comic_input')
|
||||||
|
recs['dont_grayscale'] = True
|
||||||
|
save_defaults('comic_input', recs)
|
||||||
|
|
||||||
p = self.set_port()
|
p = self.set_port()
|
||||||
if p is not None:
|
if p is not None:
|
||||||
from calibre.library import server_config
|
from calibre.library import server_config
|
||||||
|
@ -409,11 +409,21 @@ class ResultCache(SearchQueryParser):
|
|||||||
|
|
||||||
class Tag(object):
|
class Tag(object):
|
||||||
|
|
||||||
def __init__(self, name, id=None, count=0, state=0):
|
def __init__(self, name, id=None, count=0, state=0, tooltip=None):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.id = id
|
self.id = id
|
||||||
self.count = count
|
self.count = count
|
||||||
self.state = state
|
self.state = state
|
||||||
|
self.tooltip = tooltip
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return u'%s:%s:%s:%s:%s'%(self.name, self.count, self.id, self.state, self.tooltip)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return unicode(self).encode('utf-8')
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return str(self)
|
||||||
|
|
||||||
|
|
||||||
class LibraryDatabase2(LibraryDatabase):
|
class LibraryDatabase2(LibraryDatabase):
|
||||||
@ -462,14 +472,14 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
not os.path.exists(self.dbpath.replace('metadata.db', 'MeTAdAtA.dB'))
|
not os.path.exists(self.dbpath.replace('metadata.db', 'MeTAdAtA.dB'))
|
||||||
# Upgrade database
|
# Upgrade database
|
||||||
while True:
|
while True:
|
||||||
meth = getattr(self, 'upgrade_version_%d'%self.user_version, None)
|
uv = self.user_version
|
||||||
|
meth = getattr(self, 'upgrade_version_%d'%uv, None)
|
||||||
if meth is None:
|
if meth is None:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
print 'Upgrading database to version %d...'%(self.user_version+1)
|
print 'Upgrading database to version %d...'%(uv+1)
|
||||||
meth()
|
meth()
|
||||||
self.conn.commit()
|
self.user_version = uv+1
|
||||||
self.user_version += 1
|
|
||||||
|
|
||||||
self.data = ResultCache()
|
self.data = ResultCache()
|
||||||
self.search = self.data.search
|
self.search = self.data.search
|
||||||
@ -712,6 +722,24 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
END TRANSACTION;
|
END TRANSACTION;
|
||||||
''')
|
''')
|
||||||
|
|
||||||
|
def upgrade_version_8(self):
|
||||||
|
'Add Tag Browser views'
|
||||||
|
def create_tag_browser_view(table_name, column_name):
|
||||||
|
self.conn.executescript('''
|
||||||
|
DROP VIEW IF EXISTS tag_browser_{tn};
|
||||||
|
CREATE VIEW tag_browser_{tn} AS SELECT
|
||||||
|
id,
|
||||||
|
name,
|
||||||
|
(SELECT COUNT(id) FROM books_{tn}_link WHERE {cn}={tn}.id) count
|
||||||
|
FROM {tn};
|
||||||
|
'''.format(tn=table_name, cn=column_name))
|
||||||
|
|
||||||
|
for tn in ('authors', 'tags', 'publishers', 'series'):
|
||||||
|
cn = tn[:-1]
|
||||||
|
if tn == 'series':
|
||||||
|
cn = tn
|
||||||
|
create_tag_browser_view(tn, cn)
|
||||||
|
|
||||||
|
|
||||||
def last_modified(self):
|
def last_modified(self):
|
||||||
''' Return last modified time as a UTC datetime object'''
|
''' Return last modified time as a UTC datetime object'''
|
||||||
@ -929,7 +957,7 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
im.convert('RGB').save(path, 'JPEG')
|
im.convert('RGB').save(path, 'JPEG')
|
||||||
|
|
||||||
def all_formats(self):
|
def all_formats(self):
|
||||||
formats = self.conn.get('SELECT format from data')
|
formats = self.conn.get('SELECT DISTINCT format from data')
|
||||||
if not formats:
|
if not formats:
|
||||||
return set([])
|
return set([])
|
||||||
return set([f[0] for f in formats])
|
return set([f[0] for f in formats])
|
||||||
@ -1083,50 +1111,44 @@ class LibraryDatabase2(LibraryDatabase):
|
|||||||
return self.conn.get('SELECT script FROM feeds WHERE id=?', (id,), all=False)
|
return self.conn.get('SELECT script FROM feeds WHERE id=?', (id,), all=False)
|
||||||
|
|
||||||
def get_categories(self, sort_on_count=False):
|
def get_categories(self, sort_on_count=False):
|
||||||
categories = {}
|
self.conn.executescript(u'''
|
||||||
def get(name, category, field='name'):
|
CREATE TEMP VIEW IF NOT EXISTS tag_browser_news AS SELECT DISTINCT
|
||||||
ans = self.conn.get('SELECT DISTINCT %s FROM %s'%(field, name))
|
id,
|
||||||
ans = [x[0].strip() for x in ans]
|
name,
|
||||||
try:
|
(SELECT COUNT(id) FROM books_tags_link WHERE tag=x.id) count
|
||||||
ans.remove('')
|
FROM tags as x WHERE name!="{0}" AND id IN
|
||||||
except ValueError: pass
|
(SELECT DISTINCT tag FROM books_tags_link WHERE book IN
|
||||||
categories[category] = list(map(Tag, ans))
|
(SELECT DISTINCT book FROM books_tags_link WHERE tag IN
|
||||||
tags = categories[category]
|
(SELECT id FROM tags WHERE name="{0}")));
|
||||||
if name != 'data':
|
'''.format(_('News')))
|
||||||
for tag in tags:
|
self.conn.commit()
|
||||||
id = self.conn.get('SELECT id FROM %s WHERE %s=?'%(name,
|
|
||||||
field), (tag.name,), all=False)
|
|
||||||
tag.id = id
|
|
||||||
for tag in tags:
|
|
||||||
if tag.id is not None:
|
|
||||||
tag.count = self.conn.get('SELECT COUNT(id) FROM books_%s_link WHERE %s=?'%(name, category), (tag.id,), all=False)
|
|
||||||
else:
|
|
||||||
for tag in tags:
|
|
||||||
tag.count = self.conn.get('SELECT COUNT(format) FROM data WHERE format=?',
|
|
||||||
(tag.name,), all=False)
|
|
||||||
tags.sort(reverse=sort_on_count, cmp=(lambda
|
|
||||||
x,y:cmp(x.count,y.count)) if sort_on_count else (lambda
|
|
||||||
x,y:cmp(x.name, y.name)))
|
|
||||||
for x in (('authors', 'author'), ('tags', 'tag'), ('publishers', 'publisher'),
|
|
||||||
('series', 'series')):
|
|
||||||
get(*x)
|
|
||||||
get('data', 'format', 'format')
|
|
||||||
|
|
||||||
categories['news'] = []
|
categories = {}
|
||||||
newspapers = self.conn.get('SELECT name FROM tags WHERE id IN (SELECT DISTINCT tag FROM books_tags_link WHERE book IN (select book from books_tags_link where tag IN (SELECT id FROM tags WHERE name=?)))', (_('News'),))
|
for x in ('tags', 'series', 'news', 'publishers', 'authors'):
|
||||||
if newspapers:
|
query = 'SELECT id,name,count FROM tag_browser_'+x
|
||||||
newspapers = [f[0] for f in newspapers]
|
if sort_on_count:
|
||||||
try:
|
query += ' ORDER BY count DESC'
|
||||||
newspapers.remove(_('News'))
|
else:
|
||||||
except ValueError:
|
query += ' ORDER BY name ASC'
|
||||||
pass
|
data = self.conn.get(query)
|
||||||
categories['news'] = list(map(Tag, newspapers))
|
category = x if x in ('series', 'news') else x[:-1]
|
||||||
for tag in categories['news']:
|
categories[category] = [Tag(r[1], count=r[2], id=r[0]) for r in data]
|
||||||
tag.count = self.conn.get('SELECT COUNT(id) FROM books_tags_link WHERE tag IN (SELECT DISTINCT id FROM tags WHERE name=?)', (tag.name,), all=False)
|
|
||||||
|
categories['format'] = []
|
||||||
|
for fmt in self.conn.get('SELECT DISTINCT format FROM data'):
|
||||||
|
fmt = fmt[0]
|
||||||
|
count = self.conn.get('SELECT COUNT(id) FROM data WHERE format="%s"'%fmt,
|
||||||
|
all=False)
|
||||||
|
categories['format'].append(Tag(fmt, count=count))
|
||||||
|
|
||||||
|
if sort_on_count:
|
||||||
|
categories['format'].sort(cmp=lambda x,y:cmp(x.count, y.count),
|
||||||
|
reverse=True)
|
||||||
|
else:
|
||||||
|
categories['format'].sort(cmp=lambda x,y:cmp(x.name, y.name))
|
||||||
|
|
||||||
return categories
|
return categories
|
||||||
|
|
||||||
|
|
||||||
def tags_older_than(self, tag, delta):
|
def tags_older_than(self, tag, delta):
|
||||||
tag = tag.lower().strip()
|
tag = tag.lower().strip()
|
||||||
now = nowf()
|
now = nowf()
|
||||||
|
@ -6,8 +6,9 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
|||||||
import sys, os, shutil, cPickle, textwrap, stat
|
import sys, os, shutil, cPickle, textwrap, stat
|
||||||
from subprocess import check_call
|
from subprocess import check_call
|
||||||
|
|
||||||
from calibre import __appname__, prints
|
from calibre import __appname__, prints, guess_type
|
||||||
from calibre.constants import islinux, isfreebsd
|
from calibre.constants import islinux, isfreebsd
|
||||||
|
from calibre.customize.ui import all_input_formats
|
||||||
|
|
||||||
|
|
||||||
entry_points = {
|
entry_points = {
|
||||||
@ -375,14 +376,25 @@ class PostInstall:
|
|||||||
check_call('xdg-icon-resource install --size 128 calibre-viewer.png calibre-viewer', shell=True)
|
check_call('xdg-icon-resource install --size 128 calibre-viewer.png calibre-viewer', shell=True)
|
||||||
self.icon_resources.append(('apps', 'calibre-viewer', '128'))
|
self.icon_resources.append(('apps', 'calibre-viewer', '128'))
|
||||||
|
|
||||||
|
mimetypes = set([])
|
||||||
|
for x in all_input_formats():
|
||||||
|
mt = guess_type('dummy.'+x)[0]
|
||||||
|
if mt and 'chemical' not in mt:
|
||||||
|
mimetypes.add(mt)
|
||||||
|
|
||||||
|
def write_mimetypes(f):
|
||||||
|
f.write('MimeType=%s;\n'%';'.join(mimetypes))
|
||||||
|
|
||||||
f = open('calibre-lrfviewer.desktop', 'wb')
|
f = open('calibre-lrfviewer.desktop', 'wb')
|
||||||
f.write(VIEWER)
|
f.write(VIEWER)
|
||||||
f.close()
|
f.close()
|
||||||
f = open('calibre-ebook-viewer.desktop', 'wb')
|
f = open('calibre-ebook-viewer.desktop', 'wb')
|
||||||
f.write(EVIEWER)
|
f.write(EVIEWER)
|
||||||
|
write_mimetypes(f)
|
||||||
f.close()
|
f.close()
|
||||||
f = open('calibre-gui.desktop', 'wb')
|
f = open('calibre-gui.desktop', 'wb')
|
||||||
f.write(GUI)
|
f.write(GUI)
|
||||||
|
write_mimetypes(f)
|
||||||
f.close()
|
f.close()
|
||||||
des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop',
|
des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop',
|
||||||
'calibre-ebook-viewer.desktop')
|
'calibre-ebook-viewer.desktop')
|
||||||
@ -465,7 +477,8 @@ def opts_and_exts(name, op, exts):
|
|||||||
opts = ' '.join(options(op))
|
opts = ' '.join(options(op))
|
||||||
exts.extend([i.upper() for i in exts])
|
exts.extend([i.upper() for i in exts])
|
||||||
exts='|'.join(exts)
|
exts='|'.join(exts)
|
||||||
return '_'+name+'()'+\
|
fname = name.replace('-', '_')
|
||||||
|
return '_'+fname+'()'+\
|
||||||
'''
|
'''
|
||||||
{
|
{
|
||||||
local cur prev opts
|
local cur prev opts
|
||||||
@ -498,7 +511,7 @@ def opts_and_exts(name, op, exts):
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
}
|
}
|
||||||
complete -o filenames -F _'''%(opts,exts) + name + ' ' + name +"\n\n"
|
complete -o filenames -F _'''%(opts,exts) + fname + ' ' + name +"\n\n"
|
||||||
|
|
||||||
|
|
||||||
VIEWER = '''\
|
VIEWER = '''\
|
||||||
@ -521,11 +534,10 @@ Version=1.0
|
|||||||
Type=Application
|
Type=Application
|
||||||
Name=E-book Viewer
|
Name=E-book Viewer
|
||||||
GenericName=Viewer for E-books
|
GenericName=Viewer for E-books
|
||||||
Comment=Viewer for E-books
|
Comment=Viewer for E-books in all the major formats
|
||||||
TryExec=ebook-viewer
|
TryExec=ebook-viewer
|
||||||
Exec=ebook-viewer %F
|
Exec=ebook-viewer %F
|
||||||
Icon=calibre-viewer
|
Icon=calibre-viewer
|
||||||
MimeType=application/epub+zip;
|
|
||||||
Categories=Graphics;Viewer;
|
Categories=Graphics;Viewer;
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@ -536,7 +548,7 @@ Version=1.0
|
|||||||
Type=Application
|
Type=Application
|
||||||
Name=calibre
|
Name=calibre
|
||||||
GenericName=E-book library management
|
GenericName=E-book library management
|
||||||
Comment=E-book library management
|
Comment=E-book library management: Convert, view, share, catalogue all your e-books
|
||||||
TryExec=calibre
|
TryExec=calibre
|
||||||
Exec=calibre
|
Exec=calibre
|
||||||
Icon=calibre-gui
|
Icon=calibre-gui
|
||||||
|
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:45+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:12+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Arabic <ar@li.org>\n"
|
"Language-Team: Arabic <ar@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
|
@ -7,13 +7,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre 0.4.51\n"
|
"Project-Id-Version: calibre 0.4.51\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-15 23:10+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:27+0000\n"
|
||||||
"Last-Translator: svilborg <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: bg\n"
|
"Language-Team: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
@ -4132,7 +4132,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:193
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:193
|
||||||
msgid "Preferences"
|
msgid "Preferences"
|
||||||
msgstr ""
|
msgstr "Предпочитания"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4168,7 +4168,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
|
||||||
msgid " seconds"
|
msgid " seconds"
|
||||||
msgstr ""
|
msgstr " секунди"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
|
||||||
msgid "Choose &language (requires restart):"
|
msgid "Choose &language (requires restart):"
|
||||||
@ -4232,23 +4232,23 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
|
||||||
msgid "Toolbar"
|
msgid "Toolbar"
|
||||||
msgstr ""
|
msgstr "Лента с инструменти"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
||||||
msgid "Large"
|
msgid "Large"
|
||||||
msgstr ""
|
msgstr "Голям"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
||||||
msgid "Medium"
|
msgid "Medium"
|
||||||
msgstr ""
|
msgstr "Среден"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
||||||
msgid "Small"
|
msgid "Small"
|
||||||
msgstr ""
|
msgstr "Малък"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
||||||
msgid "&Button size in toolbar"
|
msgid "&Button size in toolbar"
|
||||||
msgstr ""
|
msgstr "Размер на &бутоните в лентата с инструменти"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
|
||||||
msgid "Show &text in toolbar buttons"
|
msgid "Show &text in toolbar buttons"
|
||||||
@ -4325,20 +4325,22 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117
|
||||||
msgid "&Username:"
|
msgid "&Username:"
|
||||||
msgstr ""
|
msgstr "&Потребителско име:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119
|
||||||
msgid "&Password:"
|
msgid "&Password:"
|
||||||
msgstr ""
|
msgstr "П&арола:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you leave the password blank, anyone will be able to access your book "
|
"If you leave the password blank, anyone will be able to access your book "
|
||||||
"collection using the web interface."
|
"collection using the web interface."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Ако оставите празно полето с паролата, всеки ще може да достъпи вашата "
|
||||||
|
"колекция от книга през уеб интерфейса."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4362,15 +4364,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561
|
||||||
msgid "&Start Server"
|
msgid "&Start Server"
|
||||||
msgstr ""
|
msgstr "&Стартиране на Сървъра"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562
|
||||||
msgid "St&op Server"
|
msgid "St&op Server"
|
||||||
msgstr ""
|
msgstr "С&пиране на Сървъра"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563
|
||||||
msgid "&Test Server"
|
msgid "&Test Server"
|
||||||
msgstr ""
|
msgstr "&Тестване на Сървъра"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564
|
||||||
msgid "Run server &automatically on startup"
|
msgid "Run server &automatically on startup"
|
||||||
@ -4396,6 +4398,8 @@ msgid ""
|
|||||||
"Here you can customize the behavior of Calibre by controlling what plugins "
|
"Here you can customize the behavior of Calibre by controlling what plugins "
|
||||||
"it uses."
|
"it uses."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Тук можете да персонализирате поведението на Calibre, контролирайки "
|
||||||
|
"приставките, които той използва."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569
|
||||||
msgid "Enable/&Disable plugin"
|
msgid "Enable/&Disable plugin"
|
||||||
@ -4419,7 +4423,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575
|
||||||
msgid "&Add"
|
msgid "&Add"
|
||||||
msgstr ""
|
msgstr "&Добавяне"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21
|
||||||
msgid "Getting debug information"
|
msgid "Getting debug information"
|
||||||
@ -4464,7 +4468,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "Сигурни ли сте?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||||
msgid "&Show this warning again"
|
msgid "&Show this warning again"
|
||||||
@ -4472,7 +4476,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41
|
||||||
msgid "ERROR"
|
msgid "ERROR"
|
||||||
msgstr ""
|
msgstr "ГРЕШКА"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63
|
||||||
msgid "Author Sort"
|
msgid "Author Sort"
|
||||||
@ -4480,7 +4484,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:65
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:65
|
||||||
msgid "ISBN"
|
msgid "ISBN"
|
||||||
msgstr ""
|
msgstr "ISBN"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:165
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:165
|
||||||
msgid "Finding metadata..."
|
msgid "Finding metadata..."
|
||||||
@ -4496,7 +4500,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:189
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:189
|
||||||
msgid "Warning"
|
msgid "Warning"
|
||||||
msgstr ""
|
msgstr "Внимание"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:190
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:190
|
||||||
msgid "Could not fetch metadata from:"
|
msgid "Could not fetch metadata from:"
|
||||||
@ -4606,16 +4610,16 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147
|
||||||
msgid "No change"
|
msgid "No change"
|
||||||
msgstr ""
|
msgstr "Без промяна"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366
|
||||||
msgid " stars"
|
msgid " stars"
|
||||||
msgstr ""
|
msgstr " звезди"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150
|
||||||
msgid "Add ta&gs: "
|
msgid "Add ta&gs: "
|
||||||
msgstr ""
|
msgstr "Добавяне на &етикети: "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:152
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:152
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:153
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:153
|
||||||
@ -4642,7 +4646,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:123
|
||||||
msgid "Not a valid picture"
|
msgid "Not a valid picture"
|
||||||
msgstr ""
|
msgstr "Невалидна картинка"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
|
||||||
msgid "Choose formats for "
|
msgid "Choose formats for "
|
||||||
@ -4651,7 +4655,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
||||||
msgid "Books"
|
msgid "Books"
|
||||||
msgstr ""
|
msgstr "Книги"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:165
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:165
|
||||||
msgid "No permission"
|
msgid "No permission"
|
||||||
@ -4659,12 +4663,12 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:166
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:166
|
||||||
msgid "You do not have permission to read the following files:"
|
msgid "You do not have permission to read the following files:"
|
||||||
msgstr ""
|
msgstr "Нямате права за четене на следните файлове:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:189
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:189
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:190
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:190
|
||||||
msgid "No format selected"
|
msgid "No format selected"
|
||||||
msgstr ""
|
msgstr "Няма избран формат"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:201
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:201
|
||||||
msgid "Could not read metadata"
|
msgid "Could not read metadata"
|
||||||
@ -4694,15 +4698,15 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:406
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:406
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:411
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:411
|
||||||
msgid "This ISBN number is valid"
|
msgid "This ISBN number is valid"
|
||||||
msgstr ""
|
msgstr "Това е валиден ISBN номер"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:414
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:414
|
||||||
msgid "This ISBN number is invalid"
|
msgid "This ISBN number is invalid"
|
||||||
msgstr ""
|
msgstr "Това е невалиден ISBN номер"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:510
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:510
|
||||||
msgid "Downloading cover..."
|
msgid "Downloading cover..."
|
||||||
msgstr ""
|
msgstr "Изтегляне на обложка..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:522
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:522
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:527
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:527
|
||||||
@ -4722,6 +4726,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:528
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:528
|
||||||
msgid "Could not find cover for this book. Try specifying the ISBN first."
|
msgid "Could not find cover for this book. Try specifying the ISBN first."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"За тази книга не може да бъде намерена обложка. Опитайте се да посочите ISBN "
|
||||||
|
"."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:540
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:540
|
||||||
msgid "Bad cover"
|
msgid "Bad cover"
|
||||||
@ -4746,6 +4752,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:602
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:602
|
||||||
msgid "You must specify at least one of ISBN, Title, Authors or Publisher"
|
msgid "You must specify at least one of ISBN, Title, Authors or Publisher"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Трябва да посочите поне едно от ISBN, Заглавие, Автори или Производител"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:671
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:671
|
||||||
msgid "Permission denied"
|
msgid "Permission denied"
|
||||||
@ -4778,7 +4785,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377
|
||||||
msgid "IS&BN:"
|
msgid "IS&BN:"
|
||||||
msgstr ""
|
msgstr "IS&BN:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378
|
||||||
msgid "Publishe&d:"
|
msgid "Publishe&d:"
|
||||||
@ -4786,15 +4793,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381
|
||||||
msgid "dd MMM yyyy"
|
msgid "dd MMM yyyy"
|
||||||
msgstr ""
|
msgstr "dd MMM yyyy"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382
|
||||||
msgid "&Date:"
|
msgid "&Date:"
|
||||||
msgstr ""
|
msgstr "&Дата:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383
|
||||||
msgid "&Comments"
|
msgid "&Comments"
|
||||||
msgstr ""
|
msgstr "&Коментари"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||||
msgid "&Fetch metadata from server"
|
msgid "&Fetch metadata from server"
|
||||||
@ -4802,7 +4809,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385
|
||||||
msgid "Available Formats"
|
msgid "Available Formats"
|
||||||
msgstr ""
|
msgstr "Налични формати"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386
|
||||||
msgid "Add a new format for this book to the database"
|
msgid "Add a new format for this book to the database"
|
||||||
@ -4834,7 +4841,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:52
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:52
|
||||||
msgid "Aborting..."
|
msgid "Aborting..."
|
||||||
msgstr ""
|
msgstr "Прекъсване..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119
|
||||||
msgid "Need username and password"
|
msgid "Need username and password"
|
||||||
@ -4854,16 +4861,16 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:193
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:193
|
||||||
msgid "%d days, %d hours and %d minutes ago"
|
msgid "%d days, %d hours and %d minutes ago"
|
||||||
msgstr ""
|
msgstr "преди %d дни, %d часа и %d минути"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195
|
||||||
msgid "Last downloaded"
|
msgid "Last downloaded"
|
||||||
msgstr ""
|
msgstr "Последно изтегляне"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:215
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:215
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:190
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:190
|
||||||
msgid "Schedule news download"
|
msgid "Schedule news download"
|
||||||
msgstr ""
|
msgstr "График за изтегляне на новини"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:218
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:218
|
||||||
msgid "Add a custom news source"
|
msgid "Add a custom news source"
|
||||||
@ -4893,43 +4900,43 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206
|
||||||
msgid "Every "
|
msgid "Every "
|
||||||
msgstr ""
|
msgstr "Всеки "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197
|
||||||
msgid "day"
|
msgid "day"
|
||||||
msgstr ""
|
msgstr "ден"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198
|
||||||
msgid "Monday"
|
msgid "Monday"
|
||||||
msgstr ""
|
msgstr "Понеделник"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199
|
||||||
msgid "Tuesday"
|
msgid "Tuesday"
|
||||||
msgstr ""
|
msgstr "Вторник"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200
|
||||||
msgid "Wednesday"
|
msgid "Wednesday"
|
||||||
msgstr ""
|
msgstr "Сряда"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201
|
||||||
msgid "Thursday"
|
msgid "Thursday"
|
||||||
msgstr ""
|
msgstr "Четвъртък"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202
|
||||||
msgid "Friday"
|
msgid "Friday"
|
||||||
msgstr ""
|
msgstr "Петък"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203
|
||||||
msgid "Saturday"
|
msgid "Saturday"
|
||||||
msgstr ""
|
msgstr "Събота"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204
|
||||||
msgid "Sunday"
|
msgid "Sunday"
|
||||||
msgstr ""
|
msgstr "Неделя"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205
|
||||||
msgid "at"
|
msgid "at"
|
||||||
msgstr ""
|
msgstr "в"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4941,7 +4948,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263
|
||||||
msgid " days"
|
msgid " days"
|
||||||
msgstr ""
|
msgstr " дни"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209
|
||||||
msgid "&Account"
|
msgid "&Account"
|
||||||
@ -4965,7 +4972,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217
|
||||||
msgid "&Advanced"
|
msgid "&Advanced"
|
||||||
msgstr ""
|
msgstr "Д&опълнителни"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218
|
||||||
msgid "&Download now"
|
msgid "&Download now"
|
||||||
@ -4983,7 +4990,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36
|
||||||
msgid "contains"
|
msgid "contains"
|
||||||
msgstr ""
|
msgstr "съдържа"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:37
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:37
|
||||||
msgid "The text to search for. It is interpreted as a regular expression."
|
msgid "The text to search for. It is interpreted as a regular expression."
|
||||||
@ -5046,7 +5053,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124
|
||||||
msgid " "
|
msgid " "
|
||||||
msgstr ""
|
msgstr " "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -5060,7 +5067,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:66
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:66
|
||||||
msgid "Are your sure?"
|
msgid "Are your sure?"
|
||||||
msgstr ""
|
msgstr "Сигурни ли сте?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:67
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:67
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -5070,7 +5077,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123
|
||||||
msgid "Tag Editor"
|
msgid "Tag Editor"
|
||||||
msgstr ""
|
msgstr "Редактор на етикети"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124
|
||||||
msgid "A&vailable tags"
|
msgid "A&vailable tags"
|
||||||
@ -5084,7 +5091,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127
|
||||||
msgid "Apply tag to current book"
|
msgid "Apply tag to current book"
|
||||||
msgstr ""
|
msgstr "Добавяне на етикет към текущата книга"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129
|
||||||
msgid "A&pplied tags"
|
msgid "A&pplied tags"
|
||||||
@ -5119,7 +5126,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
|
||||||
msgid "&Test"
|
msgid "&Test"
|
||||||
msgstr ""
|
msgstr "Про&ба"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:127
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:127
|
||||||
msgid "No recipe selected"
|
msgid "No recipe selected"
|
||||||
@ -5162,7 +5169,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:185
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:185
|
||||||
msgid "Already exists"
|
msgid "Already exists"
|
||||||
msgstr ""
|
msgstr "Вече съществува"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:186
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:186
|
||||||
msgid "This feed has already been added to the recipe"
|
msgid "This feed has already been added to the recipe"
|
||||||
@ -5172,7 +5179,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:286
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:286
|
||||||
msgid "Invalid input"
|
msgid "Invalid input"
|
||||||
msgstr ""
|
msgstr "Невалидни входящи данни"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:237
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:237
|
||||||
@ -5327,7 +5334,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
||||||
msgid "Regular &expression"
|
msgid "Regular &expression"
|
||||||
msgstr ""
|
msgstr "&Регулярен израз"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
|
||||||
msgid "File &name:"
|
msgid "File &name:"
|
||||||
@ -5335,11 +5342,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
||||||
msgid "Test"
|
msgid "Test"
|
||||||
msgstr ""
|
msgstr "Проба"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
||||||
msgid "Title:"
|
msgid "Title:"
|
||||||
msgstr ""
|
msgstr "Заглавие:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
|
||||||
msgid "Regular expression (?P<title>)"
|
msgid "Regular expression (?P<title>)"
|
||||||
@ -5356,11 +5363,11 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:92
|
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:92
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:94
|
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:94
|
||||||
msgid "No match"
|
msgid "No match"
|
||||||
msgstr ""
|
msgstr "Няма съвпадение"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
||||||
msgid "Authors:"
|
msgid "Authors:"
|
||||||
msgstr ""
|
msgstr "Автори:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
||||||
msgid "Regular expression (?P<author>)"
|
msgid "Regular expression (?P<author>)"
|
||||||
@ -5396,7 +5403,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr "Състояние"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55
|
||||||
msgid "Progress"
|
msgid "Progress"
|
||||||
@ -5444,16 +5451,16 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:171
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1151
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1151
|
||||||
msgid "Size (MB)"
|
msgid "Size (MB)"
|
||||||
msgstr ""
|
msgstr "Размер (MB)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:172
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:172
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1152
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1152
|
||||||
msgid "Date"
|
msgid "Date"
|
||||||
msgstr ""
|
msgstr "Дата"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:174
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:174
|
||||||
msgid "Rating"
|
msgid "Rating"
|
||||||
msgstr ""
|
msgstr "Рейтинг"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:358
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:358
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:364
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:364
|
||||||
@ -5467,11 +5474,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:375
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:375
|
||||||
msgid "Book <font face=\"serif\">%s</font> of %s."
|
msgid "Book <font face=\"serif\">%s</font> of %s."
|
||||||
msgstr ""
|
msgstr "Книга <font face=\"serif\">%s</font> of %s."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889
|
||||||
msgid "Not allowed"
|
msgid "Not allowed"
|
||||||
msgstr ""
|
msgstr "Не е позволено"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:890
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:890
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -5514,7 +5521,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:433
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:433
|
||||||
msgid "No matches found"
|
msgid "No matches found"
|
||||||
msgstr ""
|
msgstr "Не са намерени съвпадения"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:128
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:128
|
||||||
msgid "LRF Viewer"
|
msgid "LRF Viewer"
|
||||||
@ -5530,21 +5537,21 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
|
||||||
msgid "Next Page"
|
msgid "Next Page"
|
||||||
msgstr ""
|
msgstr "Следваща страница"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
|
||||||
msgid "Previous Page"
|
msgid "Previous Page"
|
||||||
msgstr ""
|
msgstr "Предишна страница"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:182
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:182
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr ""
|
msgstr "Назад"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:183
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:183
|
||||||
msgid "Forward"
|
msgid "Forward"
|
||||||
msgstr ""
|
msgstr "Напред"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:135
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:135
|
||||||
msgid "Next match"
|
msgid "Next match"
|
||||||
@ -5557,7 +5564,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137
|
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137
|
||||||
msgid "Configure"
|
msgid "Configure"
|
||||||
msgstr ""
|
msgstr "Настройки"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:25
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:25
|
||||||
msgid "Use the library located at the specified path."
|
msgid "Use the library located at the specified path."
|
||||||
@ -5585,7 +5592,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:89
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:89
|
||||||
msgid "%s is already running."
|
msgid "%s is already running."
|
||||||
msgstr ""
|
msgstr "%s вече се изпълнява."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:92
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:92
|
||||||
msgid "may be running in the system tray, in the"
|
msgid "may be running in the system tray, in the"
|
||||||
@ -5606,7 +5613,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:101
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:101
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113
|
||||||
msgid "try deleting the file"
|
msgid "try deleting the file"
|
||||||
msgstr ""
|
msgstr "опитайте да изтриете файла"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:331
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:331
|
||||||
msgid "calibre"
|
msgid "calibre"
|
||||||
@ -5618,11 +5625,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335
|
||||||
msgid "Alt+S"
|
msgid "Alt+S"
|
||||||
msgstr ""
|
msgstr "Alt+S"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336
|
||||||
msgid "&Search:"
|
msgid "&Search:"
|
||||||
msgstr ""
|
msgstr "&Търсене:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338
|
||||||
@ -5633,7 +5640,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:339
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:339
|
||||||
msgid "Reset Quick Search"
|
msgid "Reset Quick Search"
|
||||||
msgstr ""
|
msgstr "Изчистване на бързото търсене"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341
|
||||||
msgid "Sort by &popularity"
|
msgid "Sort by &popularity"
|
||||||
@ -5649,7 +5656,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344
|
||||||
msgid "Add books"
|
msgid "Add books"
|
||||||
msgstr ""
|
msgstr "Добавяне на книги"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345
|
||||||
msgid "A"
|
msgid "A"
|
||||||
@ -5658,11 +5665,11 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347
|
||||||
msgid "Remove books"
|
msgid "Remove books"
|
||||||
msgstr ""
|
msgstr "Премахване на книги"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348
|
||||||
msgid "Del"
|
msgid "Del"
|
||||||
msgstr ""
|
msgstr "Изтр."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
||||||
msgid "Edit meta information"
|
msgid "Edit meta information"
|
||||||
@ -5704,7 +5711,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:358
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:358
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:316
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:316
|
||||||
msgid "View"
|
msgid "View"
|
||||||
msgstr ""
|
msgstr "Преглед"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:359
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:359
|
||||||
msgid "V"
|
msgid "V"
|
||||||
@ -5740,7 +5747,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368
|
||||||
msgid "Ctrl+P"
|
msgid "Ctrl+P"
|
||||||
msgstr ""
|
msgstr "Ctrl+P"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:20
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:20
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -5754,7 +5761,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:60
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:60
|
||||||
msgid "&Quit"
|
msgid "&Quit"
|
||||||
msgstr ""
|
msgstr "&Изход"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:85
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:85
|
||||||
msgid "ERROR: Unhandled exception"
|
msgid "ERROR: Unhandled exception"
|
||||||
@ -5762,7 +5769,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:89
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:89
|
||||||
msgid "Book has neither title nor ISBN"
|
msgid "Book has neither title nor ISBN"
|
||||||
msgstr ""
|
msgstr "Книгата няма нито заглавие нито ISBN"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:115
|
#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:115
|
||||||
msgid "No matches found for this book"
|
msgid "No matches found for this book"
|
||||||
@ -5770,7 +5777,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:71
|
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:71
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr "Търсене"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58
|
||||||
msgid "Press a key..."
|
msgid "Press a key..."
|
||||||
@ -5787,7 +5794,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:131
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:131
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223
|
||||||
msgid " or "
|
msgid " or "
|
||||||
msgstr ""
|
msgstr " или "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:133
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:133
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:68
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:68
|
||||||
@ -5800,7 +5807,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223
|
||||||
msgid "Keys"
|
msgid "Keys"
|
||||||
msgstr ""
|
msgstr "Клавиши"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:225
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:225
|
||||||
msgid "Double click to change"
|
msgid "Double click to change"
|
||||||
@ -5812,21 +5819,21 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:69
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:69
|
||||||
msgid "&Custom"
|
msgid "&Custom"
|
||||||
msgstr ""
|
msgstr "Потреб&ителски"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:70
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:70
|
||||||
msgid "&Shortcut:"
|
msgid "&Shortcut:"
|
||||||
msgstr ""
|
msgstr "&Бърз клавиш:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:71
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:71
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:76
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:76
|
||||||
msgid "Click to change"
|
msgid "Click to change"
|
||||||
msgstr ""
|
msgstr "Щракнете, за да промените"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78
|
||||||
msgid "Clear"
|
msgid "Clear"
|
||||||
msgstr ""
|
msgstr "Изчистване"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75
|
||||||
msgid "&Alternate shortcut:"
|
msgid "&Alternate shortcut:"
|
||||||
@ -5860,7 +5867,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||||
msgid "Authors"
|
msgid "Authors"
|
||||||
msgstr ""
|
msgstr "Автори"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||||
msgid "Publishers"
|
msgid "Publishers"
|
||||||
@ -5919,7 +5926,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:178
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:178
|
||||||
msgid "&Restore"
|
msgid "&Restore"
|
||||||
msgstr ""
|
msgstr "&Възстановяване"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:180
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:180
|
||||||
msgid "&Donate to support calibre"
|
msgid "&Donate to support calibre"
|
||||||
@ -5927,7 +5934,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:185
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:185
|
||||||
msgid "&Restart"
|
msgid "&Restart"
|
||||||
msgstr ""
|
msgstr "&Рестартиране"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:224
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:224
|
||||||
msgid "<p>For help see the: <a href=\"%s\">User Manual</a><br>"
|
msgid "<p>For help see the: <a href=\"%s\">User Manual</a><br>"
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-12 06:56+0000\n"
|
"PO-Revision-Date: 2010-03-26 19:48+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Peregrinus <peregrin_bral2@seznam.cz>\n"
|
||||||
"Language-Team: Czech <cs@li.org>\n"
|
"Language-Team: Czech <cs@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-13 04:48+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-27 04:58+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
@ -766,7 +766,7 @@ msgstr "Cesta k grafickámu souboru, který bude použit jako náhled"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:58
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:58
|
||||||
msgid "Path to a txt file containing a comment."
|
msgid "Path to a txt file containing a comment."
|
||||||
msgstr ""
|
msgstr "Cesta k txt souboru obsahující komentář."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:61
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:61
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607
|
||||||
@ -1250,6 +1250,9 @@ msgid ""
|
|||||||
"1.5em. Spacing removal will not work if the source file does not use "
|
"1.5em. Spacing removal will not work if the source file does not use "
|
||||||
"paragraphs (<p> or <div> tags)."
|
"paragraphs (<p> or <div> tags)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Odstraní mezery mezi odstavci. Dále nastaví odsazení prvního řádku na 1,5em. "
|
||||||
|
"Odstranění mezer nebude fungovat, pokud nejsou ve zdrojovém souboru odstavce "
|
||||||
|
"označeny (tagy <p> nebo <div>)."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:318
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1338,11 +1341,11 @@ msgstr "Nastavit Autory. Více autorů by mělo být odděleno znakem &."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:420
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:420
|
||||||
msgid "The version of the title to be used for sorting. "
|
msgid "The version of the title to be used for sorting. "
|
||||||
msgstr ""
|
msgstr "Varianta názvu, která bude použita při řazení. "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:424
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:424
|
||||||
msgid "String to be used when sorting by author. "
|
msgid "String to be used when sorting by author. "
|
||||||
msgstr ""
|
msgstr "Řetězec, který bude použit při řazení dle autora. "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428
|
||||||
msgid "Set the cover to the specified file or URL"
|
msgid "Set the cover to the specified file or URL"
|
||||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-17 04:37+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
|
@ -11,18 +11,18 @@ msgstr ""
|
|||||||
"Project-Id-Version: es\n"
|
"Project-Id-Version: es\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:49+0000\n"
|
"PO-Revision-Date: 2010-03-19 06:02+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Meme de la Torre <Unknown>\n"
|
||||||
"Language-Team: Spanish\n"
|
"Language-Team: Spanish\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:45+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-20 04:41+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
msgid "Does absolutely nothing"
|
msgid "Does absolutely nothing"
|
||||||
msgstr "No hacer nada en absoluto"
|
msgstr "No hace nada en lo absoluto"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72
|
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72
|
||||||
@ -153,7 +153,7 @@ msgstr "Base"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:172
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:172
|
||||||
msgid "File type"
|
msgid "File type"
|
||||||
msgstr "Tipo de fichero"
|
msgstr "Tipo de archivo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206
|
||||||
msgid "Metadata reader"
|
msgid "Metadata reader"
|
||||||
@ -161,7 +161,7 @@ msgstr "Lector de metadatos"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:237
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:237
|
||||||
msgid "Metadata writer"
|
msgid "Metadata writer"
|
||||||
msgstr "Escritor de metadados"
|
msgstr "Escritor de metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263
|
||||||
msgid "Catalog generator"
|
msgid "Catalog generator"
|
||||||
@ -173,16 +173,16 @@ msgid ""
|
|||||||
"linked files. This plugin is run every time you add an HTML file to the "
|
"linked files. This plugin is run every time you add an HTML file to the "
|
||||||
"library."
|
"library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Seguir todos los enlaces locales de un fichero HTML y crear un archivo ZIP "
|
"Seguir todos los enlaces locales de un archivo HTML y crear un archivo ZIP "
|
||||||
"con los ficheros enlazados. Este complemento se ejecuta cada vez que se "
|
"con los archivos enlazados. Este complemento se ejecuta cada vez que se "
|
||||||
"añade un fichero HTML a la biblioteca."
|
"añade un archivo HTML a la biblioteca."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:50
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:50
|
||||||
msgid ""
|
msgid ""
|
||||||
"Character encoding for the input HTML files. Common choices include: cp1252, "
|
"Character encoding for the input HTML files. Common choices include: cp1252, "
|
||||||
"latin1, iso-8859-1 and utf-8."
|
"latin1, iso-8859-1 and utf-8."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Codificación de los ficheros HTML de entrada. Las opciones comunes incluyen: "
|
"Codificación de los archivos HTML de entrada. Las opciones comunes incluyen: "
|
||||||
"cp1252, latin1, iso-8859-1 and utf-8."
|
"cp1252, latin1, iso-8859-1 and utf-8."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:57
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:57
|
||||||
@ -197,7 +197,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89
|
||||||
msgid "Extract cover from comic files"
|
msgid "Extract cover from comic files"
|
||||||
msgstr "Extraer la portada de los ficheros de cómic"
|
msgstr "Extraer la portada de los archivos de cómic"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:110
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:110
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:121
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:121
|
||||||
@ -235,11 +235,11 @@ msgstr "Leer metadatos de libros electrónicos en archivos ZIP"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:375
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:375
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:385
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:385
|
||||||
msgid "Set metadata in %s files"
|
msgid "Set metadata in %s files"
|
||||||
msgstr "Asignar metadatos a los ficheros %s"
|
msgstr "Asignar metadatos a los archivos %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:353
|
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:353
|
||||||
msgid "Set metadata from %s files"
|
msgid "Set metadata from %s files"
|
||||||
msgstr "Establecer metadatos desde ficheros %s"
|
msgstr "Establecer metadatos desde archivos %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102
|
||||||
msgid "Conversion Input"
|
msgid "Conversion Input"
|
||||||
@ -394,7 +394,7 @@ msgstr "Complementos instalados"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
||||||
msgid "Mapping for filetype plugins"
|
msgid "Mapping for filetype plugins"
|
||||||
msgstr "Asociaciones para complementos por tipos de fichero"
|
msgstr "Asociaciones para complementos por tipos de archivo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33
|
||||||
msgid "Local plugin customization"
|
msgid "Local plugin customization"
|
||||||
@ -704,12 +704,12 @@ msgstr "Lista ordenada de formatos que el dispositivo aceptará"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:32
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:32
|
||||||
msgid "Place files in sub directories if the device supports them"
|
msgid "Place files in sub directories if the device supports them"
|
||||||
msgstr "Colocar los ficheros en subdirectorios si el dispositivo los soporta"
|
msgstr "Colocar los archivos en subdirectorios si el dispositivo los soporta"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:34
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:34
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78
|
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78
|
||||||
msgid "Read metadata from files on device"
|
msgid "Read metadata from files on device"
|
||||||
msgstr "Leer los metadatos de los ficheros del dispositivo"
|
msgstr "Leer los metadatos de los archivos del dispositivo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:36
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:36
|
||||||
msgid "Template to control how books are saved"
|
msgid "Template to control how books are saved"
|
||||||
@ -783,7 +783,7 @@ msgstr "Ruta a un archivo TXT que contenga un comentario."
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:61
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:61
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607
|
||||||
msgid "Extract thumbnail from LRF file"
|
msgid "Extract thumbnail from LRF file"
|
||||||
msgstr "Extraer la miniatura del fichero LRF"
|
msgstr "Extraer la miniatura del archivo LRF"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:62
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:62
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608
|
||||||
@ -811,7 +811,7 @@ msgid ""
|
|||||||
"Extract cover from LRF file. Note that the LRF format has no defined cover, "
|
"Extract cover from LRF file. Note that the LRF format has no defined cover, "
|
||||||
"so we use some heuristics to guess the cover."
|
"so we use some heuristics to guess the cover."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Extraer la portada de un fichero LRF. Nótese que el formato LRF no define "
|
"Extraer la portada de un archivo LRF. Nótese que el formato LRF no define "
|
||||||
"una portada, así que se usa heurística para encontrar la portada."
|
"una portada, así que se usa heurística para encontrar la portada."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:69
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:69
|
||||||
@ -910,7 +910,7 @@ msgid ""
|
|||||||
"Don't sort the files found in the comic alphabetically by name. Instead use "
|
"Don't sort the files found in the comic alphabetically by name. Instead use "
|
||||||
"the order they were added to the comic."
|
"the order they were added to the comic."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"No ordenar los ficheros encontrados en el cómic por nombre alfabético. En su "
|
"No ordenar los archivos encontrados en el cómic por nombre alfabético. En su "
|
||||||
"lugar usar el orden en el que fueron agregados al cómic."
|
"lugar usar el orden en el que fueron agregados al cómic."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
|
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
|
||||||
@ -957,27 +957,27 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"For full documentation of the conversion system see\n"
|
"For full documentation of the conversion system see\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"fichero_entrada fichero-salida [opciones]\n"
|
"archivo_entrada archivo-salida [opciones]\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Convertir un libro electrónico de un formato a otro.\n"
|
"Convertir un libro electrónico de un formato a otro.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"fichero_entrada es la entrada y fichero_salida es la salida. Deben indicarse "
|
"archivo_entrada es la entrada y archivo_salida es la salida. Deben indicarse "
|
||||||
"ambos como los dos primeros argumentos de la orden.\n"
|
"ambos como los dos primeros argumentos de la orden.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"El formato del libro electrónico de salida se define a partir de la "
|
"El formato del libro electrónico de salida se define a partir de la "
|
||||||
"extensión de fichero_salida. fichero_salida puede también tener el formato "
|
"extensión de archivo_salida. archivo_salida puede también tener el formato "
|
||||||
"especial .EXT, donde EXT es la extensión del fichero de salida. En este "
|
"especial .EXT, donde EXT es la extensión del archivo de salida. En este "
|
||||||
"caso, el nombre del fichero de salida se obtiene a partir del nombre del "
|
"caso, el nombre del archivo de salida se obtiene a partir del nombre del "
|
||||||
"fichero de entrada. Tenga en cuenta que los nombres de fichero no deben "
|
"archivo de entrada. Tenga en cuenta que los nombres de archivo no deben "
|
||||||
"comenzar con guión. Por último, si fichero_salida no tiene extensión, se "
|
"comenzar con guión. Por último, si archivo_salida no tiene extensión, se "
|
||||||
"interpreta como un directorio y se generará un \"open eBook\" (OEB), formado "
|
"interpreta como un directorio y se generará un \"open eBook\" (OEB), formado "
|
||||||
"por un conjunto de ficheros HTML, en ese directorio. Estos ficheros son los "
|
"por un conjunto de archivos HTML, en ese directorio. Estos archivos son los "
|
||||||
"que normalmente se habrían pasado al complemento de salida.\n"
|
"que normalmente se habrían pasado al complemento de salida.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Tras especificar los ficheros de entrada y salida, se puede personalizar la "
|
"Tras especificar los archivos de entrada y salida, se puede personalizar la "
|
||||||
"conversión indicando varias opciones. Las opciones disponibles dependen de "
|
"conversión indicando varias opciones. Las opciones disponibles dependen de "
|
||||||
"los tipos de fichero de entrada y salida. Para obtener ayuda sobre estas "
|
"los tipos de archivo de entrada y salida. Para obtener ayuda sobre estas "
|
||||||
"opciones, utilice la opción -h después de los nombres de fichero de entrada "
|
"opciones, utilice la opción -h después de los nombres de archivo de entrada "
|
||||||
"y salida.\n"
|
"y salida.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Para una documentación completa del sistema de conversión, ver\n"
|
"Para una documentación completa del sistema de conversión, ver\n"
|
||||||
@ -988,7 +988,7 @@ msgstr "OPCIONES DE ENTRADA"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:98
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:98
|
||||||
msgid "Options to control the processing of the input %s file"
|
msgid "Options to control the processing of the input %s file"
|
||||||
msgstr "Opciones para controlar el procesamiento del fichero de entrada %s."
|
msgstr "Opciones para controlar el procesamiento del archivo de entrada %s."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:104
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:104
|
||||||
msgid "OUTPUT OPTIONS"
|
msgid "OUTPUT OPTIONS"
|
||||||
@ -1012,7 +1012,7 @@ msgid ""
|
|||||||
"source file has a Table of Contents, it will be used in preference to the "
|
"source file has a Table of Contents, it will be used in preference to the "
|
||||||
"automatically generated one."
|
"automatically generated one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Controla la generación automática del Índice. Por defecto, si el fichero de "
|
"Controla la generación automática del Índice. Por defecto, si el archivo de "
|
||||||
"entrada tiene un Índice, se usará éste en lugar del generado automáticamente."
|
"entrada tiene un Índice, se usará éste en lugar del generado automáticamente."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:155
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:155
|
||||||
@ -1228,7 +1228,7 @@ msgid ""
|
|||||||
"rules."
|
"rules."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La ruta a una hoja de estilo CSS o CSS en bruto. Este CSS se agregará a las "
|
"La ruta a una hoja de estilo CSS o CSS en bruto. Este CSS se agregará a las "
|
||||||
"reglas de estilo del fichero de origen, por lo que puede usarse para anular "
|
"reglas de estilo del archivo de origen, por lo que puede usarse para anular "
|
||||||
"dichas reglas."
|
"dichas reglas."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:278
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:278
|
||||||
@ -1284,7 +1284,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Eliminar el espacio entre párrafos. También establece sangrado en la primera "
|
"Eliminar el espacio entre párrafos. También establece sangrado en la primera "
|
||||||
"línea de cada párrafo de 1,5em. La eliminación del espacio no funciona si el "
|
"línea de cada párrafo de 1,5em. La eliminación del espacio no funciona si el "
|
||||||
"fichero de origen no define párrafos (etiquetas <p> o <div>)."
|
"archivo de origen no define párrafos (etiquetas <p> o <div>)."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:318
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:318
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1318,7 +1318,7 @@ msgid ""
|
|||||||
"the source file is a cover and you are specifying an external cover."
|
"the source file is a cover and you are specifying an external cover."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Eliminar la primera imagen del libro electrónico de entrada. Es útil si la "
|
"Eliminar la primera imagen del libro electrónico de entrada. Es útil si la "
|
||||||
"primera imagen del fichero es una portada y se está especificando una "
|
"primera imagen del archivo es una portada y se está especificando una "
|
||||||
"portada externa."
|
"portada externa."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:346
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:346
|
||||||
@ -1335,7 +1335,7 @@ msgid ""
|
|||||||
"source file. This may make things worse, so use with care."
|
"source file. This may make things worse, so use with care."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Intentar detectar y corregir saltos de línea manuales y otros problemas en "
|
"Intentar detectar y corregir saltos de línea manuales y otros problemas en "
|
||||||
"el fichero de origen. Esto puede empeorar las cosas, úsese con cuidado."
|
"el archivo de origen. Esto puede empeorar las cosas, úsese con cuidado."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:362
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:362
|
||||||
msgid "Use a regular expression to try and remove the header."
|
msgid "Use a regular expression to try and remove the header."
|
||||||
@ -1359,8 +1359,8 @@ msgid ""
|
|||||||
"Read metadata from the specified OPF file. Metadata read from this file will "
|
"Read metadata from the specified OPF file. Metadata read from this file will "
|
||||||
"override any metadata in the source file."
|
"override any metadata in the source file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Leer metadatos del fichero OPF especificado. Los metadatos leídos de este "
|
"Leer metadatos del archivo OPF especificado. Los metadatos leídos de este "
|
||||||
"fichero anularán cualquier metadato que haya en el fichero de origen."
|
"archivo anularán cualquier metadato que haya en el archivo de origen."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:396
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:396
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1486,7 +1486,7 @@ msgid ""
|
|||||||
"Extract the contents of the generated EPUB file to the specified directory. "
|
"Extract the contents of the generated EPUB file to the specified directory. "
|
||||||
"The contents of the directory are first deleted, so be careful."
|
"The contents of the directory are first deleted, so be careful."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Extraer los contenidos del fichero EPUB generado al directorio especificado. "
|
"Extraer los contenidos del archivo EPUB generado al directorio especificado. "
|
||||||
"El contenido del directorio será borrado, así que tenga cuidado."
|
"El contenido del directorio será borrado, así que tenga cuidado."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:64
|
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:64
|
||||||
@ -1497,10 +1497,10 @@ msgid ""
|
|||||||
"if your source file contains a very large number of page breaks, you should "
|
"if your source file contains a very large number of page breaks, you should "
|
||||||
"turn off splitting on page breaks."
|
"turn off splitting on page breaks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Desactivar la división en los saltos de página. Normalmente los ficheros de "
|
"Desactivar la división en los saltos de página. Normalmente los archivos de "
|
||||||
"entrada se dividen automáticamente en dos ficheros en cada salto de página. "
|
"entrada se dividen automáticamente en dos archivos en cada salto de página. "
|
||||||
"Esto genera un libro electrónico que se procesa más rápidamente y con menos "
|
"Esto genera un libro electrónico que se procesa más rápidamente y con menos "
|
||||||
"recursos. Sin embargo, la división es un proceso lento y, si el fichero de "
|
"recursos. Sin embargo, la división es un proceso lento y, si el archivo de "
|
||||||
"entrada contiene muchos saltos de página, es mejor desactivar la división."
|
"entrada contiene muchos saltos de página, es mejor desactivar la división."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:75
|
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:75
|
||||||
@ -1509,9 +1509,9 @@ msgid ""
|
|||||||
"most EPUB readers cannot handle large file sizes. The default of %defaultKB "
|
"most EPUB readers cannot handle large file sizes. The default of %defaultKB "
|
||||||
"is the size required for Adobe Digital Editions."
|
"is the size required for Adobe Digital Editions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dividir todos los ficheros HTML mayores de este tamaño (en kB). Esto es "
|
"Dividir todos los archivos HTML mayores de este tamaño (en kB). Esto es "
|
||||||
"necesario porque la mayor parte de los lectores EPUB no pueden manejar "
|
"necesario porque la mayor parte de los lectores EPUB no pueden manejar "
|
||||||
"ficheros muy grandes. El valor por defecto de %defaultKB is el tamaño "
|
"archivos muy grandes. El valor por defecto de %defaultKB is el tamaño "
|
||||||
"requerido por Adobe Digital Editions."
|
"requerido por Adobe Digital Editions."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:82
|
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:82
|
||||||
@ -1548,7 +1548,7 @@ msgid ""
|
|||||||
"Traverse links in HTML files breadth first. Normally, they are traversed "
|
"Traverse links in HTML files breadth first. Normally, they are traversed "
|
||||||
"depth first."
|
"depth first."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hacer una búsqueda en anchura de los enlaces en ficheros HTML. Normalmente "
|
"Hacer una búsqueda en anchura de los enlaces en archivos HTML. Normalmente "
|
||||||
"se hace una búsqueda en profundidad."
|
"se hace una búsqueda en profundidad."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:250
|
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:250
|
||||||
@ -1557,8 +1557,8 @@ msgid ""
|
|||||||
"negative. 0 implies that no links in the root HTML file are followed. "
|
"negative. 0 implies that no links in the root HTML file are followed. "
|
||||||
"Default is %default."
|
"Default is %default."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nivel de recursión máximo para segir enlaces en ficheros HTML. No debe ser "
|
"Nivel de recursión máximo para segir enlaces en archivos HTML. No debe ser "
|
||||||
"negativo. El valor 0 implica que no se seguirá ningún enlace en el fichero "
|
"negativo. El valor 0 implica que no se seguirá ningún enlace en el archivo "
|
||||||
"HTML raíz. El valor por defecto es %default."
|
"HTML raíz. El valor por defecto es %default."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:259
|
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:259
|
||||||
@ -1568,7 +1568,7 @@ msgid ""
|
|||||||
"can result in various nasty side effects in the rest of of the conversion "
|
"can result in various nasty side effects in the rest of of the conversion "
|
||||||
"pipeline."
|
"pipeline."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Normalmente este complemento de entrada recoloca todos los ficheros de "
|
"Normalmente este complemento de entrada recoloca todos los archivos de "
|
||||||
"entrada en un árbol de carpetas estándar. Use esta opción sólo si sabe lo "
|
"entrada en un árbol de carpetas estándar. Use esta opción sólo si sabe lo "
|
||||||
"que está haciendo, ya que puede ocasionar varios efectos desagradables en el "
|
"que está haciendo, ya que puede ocasionar varios efectos desagradables en el "
|
||||||
"resto del proceso de conversión."
|
"resto del proceso de conversión."
|
||||||
@ -1579,16 +1579,16 @@ msgid ""
|
|||||||
"conversion of a PDF file. Default is %default which disables this."
|
"conversion of a PDF file. Default is %default which disables this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Longitud de línea promedio para la división de líneas si el HTML viene de "
|
"Longitud de línea promedio para la división de líneas si el HTML viene de "
|
||||||
"una conversión parcial previa de un fichero PDF. El valor por defecto es "
|
"una conversión parcial previa de un archivo PDF. El valor por defecto es "
|
||||||
"%default, que desactiva esta opción."
|
"%default, que desactiva esta opción."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47
|
||||||
msgid "Creating LIT file from EPUB..."
|
msgid "Creating LIT file from EPUB..."
|
||||||
msgstr "Creando fichero LIT a partir de EPUB..."
|
msgstr "Creando archivo LIT a partir de EPUB..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:320
|
||||||
msgid "\tBook Designer file detected."
|
msgid "\tBook Designer file detected."
|
||||||
msgstr "\tFichero de Book Designer detectado."
|
msgstr "\tArchivo de Book Designer detectado."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:322
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:322
|
||||||
msgid "\tParsing HTML..."
|
msgid "\tParsing HTML..."
|
||||||
@ -1596,7 +1596,7 @@ msgstr "\tAnalizando HTML..."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:345
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:345
|
||||||
msgid "\tBaen file detected. Re-parsing..."
|
msgid "\tBaen file detected. Re-parsing..."
|
||||||
msgstr "\tFichero Baen detectado. Volviendo a analizar..."
|
msgstr "\tArchivo Baen detectado. Volviendo a analizar..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:361
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:361
|
||||||
msgid "Written preprocessed HTML to "
|
msgid "Written preprocessed HTML to "
|
||||||
@ -1617,7 +1617,7 @@ msgstr "No se pudo analizar el fichero: %s"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544
|
||||||
msgid "%s is an empty file"
|
msgid "%s is an empty file"
|
||||||
msgstr "%s es un fichero vacío"
|
msgstr "%s es un archivo vacío"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564
|
||||||
msgid "Failed to parse link %s %s"
|
msgid "Failed to parse link %s %s"
|
||||||
@ -1671,7 +1671,7 @@ msgstr "No se pudo leer de: %s"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1994
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1994
|
||||||
msgid "Failed to process opf file"
|
msgid "Failed to process opf file"
|
||||||
msgstr "No se pudo procesar el fichero OPF"
|
msgstr "No se pudo procesar el archivo OPF"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:136
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:136
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -1679,7 +1679,7 @@ msgid ""
|
|||||||
"Convert an LRF file into an LRS (XML UTF-8 encoded) file"
|
"Convert an LRF file into an LRS (XML UTF-8 encoded) file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"%prog libro.lrf\n"
|
"%prog libro.lrf\n"
|
||||||
"Convierte un fichero LRF en un fichero LRS (XML codificado en UTF-8)"
|
"Convierte un archivo LRF en un archivo LRS (XML codificado en UTF-8)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137
|
||||||
msgid "Output LRS file"
|
msgid "Output LRS file"
|
||||||
@ -5147,12 +5147,12 @@ msgstr "Detener &todas las tareas"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138
|
||||||
msgid "Edit Meta information"
|
msgid "Edit Meta information"
|
||||||
msgstr "Editar metainformación"
|
msgstr "Editar metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353
|
||||||
msgid "Meta information"
|
msgid "Meta information"
|
||||||
msgstr "Metainformación"
|
msgstr "Metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141
|
||||||
msgid "A&utomatically set author sort"
|
msgid "A&utomatically set author sort"
|
||||||
@ -5340,7 +5340,7 @@ msgstr "No se pudo abrir %s. ¿Lo está usando algún otro programa?"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352
|
||||||
msgid "Edit Meta Information"
|
msgid "Edit Meta Information"
|
||||||
msgstr "Editar metainformación"
|
msgstr "Editar metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356
|
||||||
msgid "Swap the author and title"
|
msgid "Swap the author and title"
|
||||||
@ -6320,7 +6320,7 @@ msgstr "Supr"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
||||||
msgid "Edit meta information"
|
msgid "Edit meta information"
|
||||||
msgstr "Editar la metainformación"
|
msgstr "Editar metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350
|
||||||
msgid "E"
|
msgid "E"
|
||||||
|
@ -7,13 +7,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre 0.4.22\n"
|
"Project-Id-Version: calibre 0.4.22\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:47+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:13+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: fr\n"
|
"Language-Team: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
|
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 01:01+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:11+0000\n"
|
||||||
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
|
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
|
||||||
"Language-Team: Galician <gl@li.org>\n"
|
"Language-Team: Galician <gl@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
@ -359,7 +359,7 @@ msgid ""
|
|||||||
"produce a document intended to be read at a computer or on a range of "
|
"produce a document intended to be read at a computer or on a range of "
|
||||||
"devices."
|
"devices."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Este perfil tenta fornecr valores predefinidos adecuados e resulta útil se "
|
"Este perfil tenta fornecer valores predefinidos adecuados e resulta útil se "
|
||||||
"quere producir un documento apropiado para ser lido nun computador ou noutro "
|
"quere producir un documento apropiado para ser lido nun computador ou noutro "
|
||||||
"tipo de dispositivos."
|
"tipo de dispositivos."
|
||||||
|
|
||||||
@ -1515,7 +1515,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:288
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:288
|
||||||
msgid "Path to output file"
|
msgid "Path to output file"
|
||||||
msgstr "Traxectoria do ficheiro de saída"
|
msgstr "Camiño do ficheiro de saída"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113
|
||||||
@ -2450,7 +2450,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:251
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:251
|
||||||
msgid "Path error"
|
msgid "Path error"
|
||||||
msgstr "Erro na traxectoria"
|
msgstr "Erro no camiño"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:252
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:252
|
||||||
msgid "The specified directory could not be processed."
|
msgid "The specified directory could not be processed."
|
||||||
@ -3359,12 +3359,12 @@ msgstr "Expresión regular non válida: %s"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:62
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:62
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:38
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:38
|
||||||
msgid "Invalid XPath"
|
msgid "Invalid XPath"
|
||||||
msgstr "XPath non válida"
|
msgstr "O XPath é incorrecto"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:63
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:39
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:39
|
||||||
msgid "The XPath expression %s is invalid."
|
msgid "The XPath expression %s is invalid."
|
||||||
msgstr "A expresión da XPath %s non é válida."
|
msgstr "A expresión XPath %s é incorrecta"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60
|
||||||
msgid "Chapter &mark:"
|
msgid "Chapter &mark:"
|
||||||
@ -3372,7 +3372,7 @@ msgstr "´&Marca de capítulo"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61
|
||||||
msgid "Remove first &image"
|
msgid "Remove first &image"
|
||||||
msgstr ""
|
msgstr "Quitar primeira &imaxe"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62
|
||||||
msgid "Insert &metadata as page at start of book"
|
msgid "Insert &metadata as page at start of book"
|
||||||
@ -3384,11 +3384,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64
|
||||||
msgid "Remove F&ooter"
|
msgid "Remove F&ooter"
|
||||||
msgstr ""
|
msgstr "Quitar &Pés de páxina"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65
|
||||||
msgid "Remove H&eader"
|
msgid "Remove H&eader"
|
||||||
msgstr ""
|
msgstr "Quitar &Cabeceiras"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -3784,7 +3784,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1091
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1091
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:92
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:92
|
||||||
msgid "Path"
|
msgid "Path"
|
||||||
msgstr ""
|
msgstr "Camiño"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:112
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:112
|
||||||
@ -3795,7 +3795,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:93
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:93
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||||
msgid "Formats"
|
msgid "Formats"
|
||||||
msgstr ""
|
msgstr "Formatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68
|
||||||
msgid "Fit &cover to view"
|
msgid "Fit &cover to view"
|
||||||
@ -3924,6 +3924,7 @@ msgstr "Correo electrónico"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:221
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:221
|
||||||
msgid "Formats to email. The first matching format will be sent."
|
msgid "Formats to email. The first matching format will be sent."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Formatos para o correo. O primeiro formato que coincida será o enviado."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:222
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:222
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -3962,11 +3963,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:535
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:535
|
||||||
msgid "No valid plugin path"
|
msgid "No valid plugin path"
|
||||||
msgstr ""
|
msgstr "O camiño do engadido non é correcto"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:536
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:536
|
||||||
msgid "%s is not a valid plugin path"
|
msgid "%s is not a valid plugin path"
|
||||||
msgstr ""
|
msgstr "%s non é correcto como camiño do engadido"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:539
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:539
|
||||||
msgid "Choose plugin"
|
msgid "Choose plugin"
|
||||||
@ -4141,7 +4142,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:121
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:121
|
||||||
msgid "File &formats to save:"
|
msgid "File &formats to save:"
|
||||||
msgstr ""
|
msgstr "Ficheiro &formatos para gardar:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:122
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:122
|
||||||
msgid "Replace space with &underscores"
|
msgid "Replace space with &underscores"
|
||||||
@ -4314,7 +4315,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544
|
||||||
msgid "&Remove email"
|
msgid "&Remove email"
|
||||||
msgstr ""
|
msgstr "&Quitar correo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4445,7 +4446,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571
|
||||||
msgid "&Remove plugin"
|
msgid "&Remove plugin"
|
||||||
msgstr ""
|
msgstr "&Quitar engadido"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572
|
||||||
msgid "Add new plugin"
|
msgid "Add new plugin"
|
||||||
@ -4567,7 +4568,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87
|
||||||
msgid "Fetch"
|
msgid "Fetch"
|
||||||
msgstr ""
|
msgstr "Obter"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88
|
||||||
msgid "Matches"
|
msgid "Matches"
|
||||||
@ -4592,7 +4593,7 @@ msgstr "Detalles do traballo"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44
|
||||||
msgid "Active Jobs"
|
msgid "Active Jobs"
|
||||||
msgstr ""
|
msgstr "Traballos activos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45
|
||||||
msgid "&Stop selected job"
|
msgid "&Stop selected job"
|
||||||
@ -4604,11 +4605,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47
|
||||||
msgid "Stop &all jobs"
|
msgid "Stop &all jobs"
|
||||||
msgstr ""
|
msgstr "Parar &todos os traballos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138
|
||||||
msgid "Edit Meta information"
|
msgid "Edit Meta information"
|
||||||
msgstr ""
|
msgstr "Editar metainformación"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353
|
||||||
@ -4664,7 +4665,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:154
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:154
|
||||||
msgid "&Remove tags:"
|
msgid "&Remove tags:"
|
||||||
msgstr ""
|
msgstr "&Quitar etiquetas:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:155
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:155
|
||||||
msgid "Comma separated list of tags to remove from the books. "
|
msgid "Comma separated list of tags to remove from the books. "
|
||||||
@ -4672,7 +4673,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159
|
||||||
msgid "Remove &format:"
|
msgid "Remove &format:"
|
||||||
msgstr ""
|
msgstr "Quitar &formato:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160
|
||||||
msgid "&Swap title and author"
|
msgid "&Swap title and author"
|
||||||
@ -4684,7 +4685,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
|
||||||
msgid "Choose formats for "
|
msgid "Choose formats for "
|
||||||
msgstr ""
|
msgstr "Escolla os formatos para "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
||||||
@ -4779,7 +4780,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:601
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:601
|
||||||
msgid "Cannot fetch metadata"
|
msgid "Cannot fetch metadata"
|
||||||
msgstr ""
|
msgstr "Non é posíbel oter metadatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:602
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:602
|
||||||
msgid "You must specify at least one of ISBN, Title, Authors or Publisher"
|
msgid "You must specify at least one of ISBN, Title, Authors or Publisher"
|
||||||
@ -4795,7 +4796,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352
|
||||||
msgid "Edit Meta Information"
|
msgid "Edit Meta Information"
|
||||||
msgstr ""
|
msgstr "Editar metainformación"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356
|
||||||
msgid "Swap the author and title"
|
msgid "Swap the author and title"
|
||||||
@ -4812,7 +4813,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375
|
||||||
msgid "Remove unused series (Series that have no books)"
|
msgid "Remove unused series (Series that have no books)"
|
||||||
msgstr ""
|
msgstr "Quitar series inútiles (Series que non teñen libros)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377
|
||||||
msgid "IS&BN:"
|
msgid "IS&BN:"
|
||||||
@ -4836,11 +4837,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||||
msgid "&Fetch metadata from server"
|
msgid "&Fetch metadata from server"
|
||||||
msgstr ""
|
msgstr "&Obter metadatos desde servidor"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385
|
||||||
msgid "Available Formats"
|
msgid "Available Formats"
|
||||||
msgstr ""
|
msgstr "Formatos dispoñíbeis"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386
|
||||||
msgid "Add a new format for this book to the database"
|
msgid "Add a new format for this book to the database"
|
||||||
@ -4848,7 +4849,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388
|
||||||
msgid "Remove the selected formats for this book from the database."
|
msgid "Remove the selected formats for this book from the database."
|
||||||
msgstr ""
|
msgstr "Quitar os formatos seleccionados para este libro da base de datos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390
|
||||||
msgid "Set the cover for the book from the selected format"
|
msgid "Set the cover for the book from the selected format"
|
||||||
@ -5094,7 +5095,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/select_formats.py:45
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/select_formats.py:45
|
||||||
msgid "Choose formats"
|
msgid "Choose formats"
|
||||||
msgstr ""
|
msgstr "Escoller formatos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:66
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:66
|
||||||
msgid "Are your sure?"
|
msgid "Are your sure?"
|
||||||
@ -5256,7 +5257,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:251
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:251
|
||||||
msgid "&Remove recipe"
|
msgid "&Remove recipe"
|
||||||
msgstr ""
|
msgstr "&Quitar receita"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:252
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:252
|
||||||
msgid "&Share recipe"
|
msgid "&Share recipe"
|
||||||
@ -5442,7 +5443,7 @@ msgstr "Progreso"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56
|
||||||
msgid "Running time"
|
msgid "Running time"
|
||||||
msgstr ""
|
msgstr "Tempo en execución"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:68
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:68
|
||||||
msgid "There are %d running jobs:"
|
msgid "There are %d running jobs:"
|
||||||
@ -5477,7 +5478,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:254
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:254
|
||||||
msgid " - Jobs"
|
msgid " - Jobs"
|
||||||
msgstr ""
|
msgstr " - Traballos"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:171
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:171
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1151
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1151
|
||||||
@ -5660,7 +5661,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336
|
||||||
msgid "&Search:"
|
msgid "&Search:"
|
||||||
msgstr ""
|
msgstr "&Buscar:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338
|
||||||
@ -5687,7 +5688,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344
|
||||||
msgid "Add books"
|
msgid "Add books"
|
||||||
msgstr ""
|
msgstr "Engadir libros"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345
|
||||||
msgid "A"
|
msgid "A"
|
||||||
@ -5696,7 +5697,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347
|
||||||
msgid "Remove books"
|
msgid "Remove books"
|
||||||
msgstr ""
|
msgstr "Quitar libros"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348
|
||||||
msgid "Del"
|
msgid "Del"
|
||||||
@ -5704,7 +5705,7 @@ msgstr "Supr"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349
|
||||||
msgid "Edit meta information"
|
msgid "Edit meta information"
|
||||||
msgstr ""
|
msgstr "Editar metainformación"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350
|
||||||
msgid "E"
|
msgid "E"
|
||||||
@ -5712,12 +5713,12 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:351
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:351
|
||||||
msgid "Send to device"
|
msgid "Send to device"
|
||||||
msgstr ""
|
msgstr "Enviar ao dispositivo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:352
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:352
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
||||||
msgid "Save to disk"
|
msgid "Save to disk"
|
||||||
msgstr ""
|
msgstr "Gardar no disco"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:353
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:353
|
||||||
msgid "S"
|
msgid "S"
|
||||||
@ -5725,7 +5726,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:354
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:354
|
||||||
msgid "Fetch news"
|
msgid "Fetch news"
|
||||||
msgstr ""
|
msgstr "Obter novas"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:355
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:355
|
||||||
msgid "F"
|
msgid "F"
|
||||||
@ -5733,7 +5734,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:356
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:356
|
||||||
msgid "Convert E-books"
|
msgid "Convert E-books"
|
||||||
msgstr ""
|
msgstr "Converter libros"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357
|
||||||
msgid "C"
|
msgid "C"
|
||||||
@ -5872,11 +5873,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149
|
||||||
msgid "Jobs:"
|
msgid "Jobs:"
|
||||||
msgstr ""
|
msgstr "Traballos:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158
|
||||||
msgid "Click to see list of active jobs."
|
msgid "Click to see list of active jobs."
|
||||||
msgstr ""
|
msgstr "Prema para ver a lista dos traballos activos."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:196
|
||||||
msgid "Click to browse books by their covers"
|
msgid "Click to browse books by their covers"
|
||||||
@ -5931,7 +5932,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:237
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:237
|
||||||
msgid "Fetch news from "
|
msgid "Fetch news from "
|
||||||
msgstr ""
|
msgstr "Obter novas de "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:299
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:299
|
||||||
msgid "Convert existing"
|
msgid "Convert existing"
|
||||||
@ -6021,7 +6022,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:307
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:307
|
||||||
msgid "Save to disk in a single directory"
|
msgid "Save to disk in a single directory"
|
||||||
msgstr ""
|
msgstr "Gardar no disco nun único cartafol"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967
|
||||||
@ -6034,7 +6035,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:321
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:321
|
||||||
msgid "Remove selected books"
|
msgid "Remove selected books"
|
||||||
msgstr ""
|
msgstr "Quitar os libros seleccionados"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:323
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:323
|
||||||
msgid "Remove files of a specific format from selected books.."
|
msgid "Remove files of a specific format from selected books.."
|
||||||
@ -6076,12 +6077,12 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:478
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:478
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:558
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:558
|
||||||
msgid "Calibre Library"
|
msgid "Calibre Library"
|
||||||
msgstr ""
|
msgstr "Biblioteca do Calibre"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:488
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:488
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2123
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2123
|
||||||
msgid "Choose a location for your ebook library."
|
msgid "Choose a location for your ebook library."
|
||||||
msgstr ""
|
msgstr "Elixa unha localización para a súa biblioteca de libros."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:526
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:526
|
||||||
msgid "Calibre Quick Start Guide"
|
msgid "Calibre Quick Start Guide"
|
||||||
@ -6126,7 +6127,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098
|
||||||
msgid "Use library only"
|
msgid "Use library only"
|
||||||
msgstr ""
|
msgstr "Usar só a biblioteca"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099
|
||||||
@ -6292,7 +6293,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1528
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1528
|
||||||
msgid "Cannot save to disk"
|
msgid "Cannot save to disk"
|
||||||
msgstr ""
|
msgstr "Non é posíbel gardar no disco"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1531
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1531
|
||||||
msgid "Choose destination directory"
|
msgid "Choose destination directory"
|
||||||
@ -6343,7 +6344,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
||||||
msgid "Fetching news from "
|
msgid "Fetching news from "
|
||||||
msgstr ""
|
msgstr "Obtendo novas de "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660
|
||||||
msgid " fetched."
|
msgid " fetched."
|
||||||
@ -6388,7 +6389,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952
|
||||||
msgid "Cannot configure while there are running jobs."
|
msgid "Cannot configure while there are running jobs."
|
||||||
msgstr ""
|
msgstr "Non se pode configurar mentres haxa traballos en execución."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1995
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1995
|
||||||
msgid "No detailed info available"
|
msgid "No detailed info available"
|
||||||
@ -6429,7 +6430,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2132
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2132
|
||||||
msgid "Invalid library location"
|
msgid "Invalid library location"
|
||||||
msgstr ""
|
msgstr "A localización da biblioteca non é correcta"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2133
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2133
|
||||||
msgid "Could not access %s. Using %s as the library."
|
msgid "Could not access %s. Using %s as the library."
|
||||||
@ -6443,7 +6444,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2208
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2208
|
||||||
msgid "There are active jobs. Are you sure you want to quit?"
|
msgid "There are active jobs. Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr "Hai traballos en activo. Está seguro de querer saír?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2211
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2211
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -6454,7 +6455,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2215
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2215
|
||||||
msgid "WARNING: Active jobs"
|
msgid "WARNING: Active jobs"
|
||||||
msgstr ""
|
msgstr "Aviso: traballos en activo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2267
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2267
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -6908,6 +6909,9 @@ msgid ""
|
|||||||
"%d\n"
|
"%d\n"
|
||||||
"books"
|
"books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Biblioteca\n"
|
||||||
|
"%d\n"
|
||||||
|
"libros"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:227
|
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:227
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -7847,7 +7851,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:674
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:674
|
||||||
msgid "Add new formats to existing book records"
|
msgid "Add new formats to existing book records"
|
||||||
msgstr ""
|
msgstr "Engadir formatos novos aos rexistros de libros existentes"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43
|
||||||
msgid "Waiting..."
|
msgid "Waiting..."
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:52+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:17+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Latvian <ivars_a@inbox.lv>\n"
|
"Language-Team: Latvian <ivars_a@inbox.lv>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"X-Poedit-Country: LATVIA\n"
|
"X-Poedit-Country: LATVIA\n"
|
||||||
"X-Poedit-Language: Latvian\n"
|
"X-Poedit-Language: Latvian\n"
|
||||||
|
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:48+0000\n"
|
"PO-Revision-Date: 2010-03-22 19:53+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Anders Skogheim Liane <Unknown>\n"
|
||||||
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
"Language-Team: Norwegian Bokmal <nb@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-23 04:46+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
@ -988,7 +988,7 @@ msgstr "VALG FOR UTDATA"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:105
|
||||||
msgid "Options to control the processing of the output %s"
|
msgid "Options to control the processing of the output %s"
|
||||||
msgstr "Valgmuligheter for å kontorllere prosseseringen av utdata %s"
|
msgstr "Valgmuligheter for å kontrollere prosesseringen av utdata %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:119
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:119
|
||||||
msgid "Options to control the look and feel of the output"
|
msgid "Options to control the look and feel of the output"
|
||||||
@ -1299,7 +1299,7 @@ msgid ""
|
|||||||
"does not use paragraphs (<p> or <div> tags)."
|
"does not use paragraphs (<p> or <div> tags)."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sett inn en blank linje mellom avsnitt. Dette vil ikke fungere dersom "
|
"Sett inn en blank linje mellom avsnitt. Dette vil ikke fungere dersom "
|
||||||
"kildefilen ikke benytter avsnitt (<p> eller <div> emneord)."
|
"kildefilen ikke benytter avsnitt (<p> eller <div> tagger)."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:338
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:338
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -2790,7 +2790,7 @@ msgstr "Feil i stien"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:252
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:252
|
||||||
msgid "The specified directory could not be processed."
|
msgid "The specified directory could not be processed."
|
||||||
msgstr "Det spesifiserte mappen kunne ikke prossesseres"
|
msgstr "Den spesifiserte mappen kunne ikke prosesseres"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:517
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:517
|
||||||
@ -3053,7 +3053,7 @@ msgstr "Kant&utgjevning"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95
|
||||||
msgid "&Disable comic processing"
|
msgid "&Disable comic processing"
|
||||||
msgstr "&Slå av tegneserieprossessering"
|
msgstr "&Slå av tegneserieprosessering"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111
|
||||||
@ -3818,7 +3818,7 @@ msgstr "TXT Inndata"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:45
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:45
|
||||||
msgid "Process using markdown"
|
msgid "Process using markdown"
|
||||||
msgstr "Prosseser ved å benytte markdown"
|
msgstr "Prosesser ved å benytte markdown"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -6043,7 +6043,7 @@ msgid ""
|
|||||||
"Dropping onto a device is not supported. First add the book to the calibre "
|
"Dropping onto a device is not supported. First add the book to the calibre "
|
||||||
"library."
|
"library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Legger inn på en enhet som ikke er støttet. Legg først boken til "
|
"Å legge direkte inn på en enhet er ikke støttet. Legg først boken til i "
|
||||||
"Calibrebiblioteket."
|
"Calibrebiblioteket."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1090
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1090
|
||||||
@ -8494,8 +8494,8 @@ msgid ""
|
|||||||
"Normally, calibre will update the metadata in the saved files from what is "
|
"Normally, calibre will update the metadata in the saved files from what is "
|
||||||
"in the calibre library. Makes saving to disk slower."
|
"in the calibre library. Makes saving to disk slower."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Normalt vil Calibre oppdatere metadata i de lagrede filene i "
|
"Normalt vil Calibre oppdatere metadata i de lagrede filene ut i fra hva som "
|
||||||
"Calibrebiblioteket. Dette gjør lagring til disk tregere."
|
"ligger i Calibrebiblioteket. Dette gjør lagring til disk tregere."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:55
|
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:55
|
||||||
msgid ""
|
msgid ""
|
||||||
|
File diff suppressed because it is too large
Load Diff
8112
src/calibre/translations/oc.po
Normal file
8112
src/calibre/translations/oc.po
Normal file
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,13 +7,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre 0.4.55\n"
|
"Project-Id-Version: calibre 0.4.55\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 01:01+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:09+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
"Language-Team: American English <kde-i18n-doc@lists.kde.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:44+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:33+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
"X-Poedit-Country: RUSSIAN FEDERATION\n"
|
||||||
"X-Poedit-Language: Russian\n"
|
"X-Poedit-Language: Russian\n"
|
||||||
@ -2952,7 +2952,7 @@ msgstr "Сортировать числа как текст"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28
|
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28
|
||||||
msgid "Tab template for catalog.ui"
|
msgid "Tab template for catalog.ui"
|
||||||
msgstr ""
|
msgstr "Шаблон вкладки для catalog.ui"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -3155,7 +3155,7 @@ msgstr "Не вставлять &Содержание в начало книги
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14
|
||||||
msgid "FB2 Output"
|
msgid "FB2 Output"
|
||||||
msgstr ""
|
msgstr "Вывод FB2"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37
|
||||||
@ -3251,7 +3251,7 @@ msgstr "Размер основного шрифта:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123
|
||||||
msgid "Wizard to help you choose an appropriate font size key"
|
msgid "Wizard to help you choose an appropriate font size key"
|
||||||
msgstr ""
|
msgstr "Мастер, чтобы помочь вам выбрать подходящий ключ размера шрифта"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125
|
||||||
msgid "Line &height:"
|
msgid "Line &height:"
|
||||||
@ -3275,6 +3275,9 @@ msgid ""
|
|||||||
"paragraph indent, to ensure that paragraphs can be easily distinguished. "
|
"paragraph indent, to ensure that paragraphs can be easily distinguished. "
|
||||||
"This option controls the width of that indent."
|
"This option controls the width of that indent."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"<p>Когда calibre убирает расстояние между абзацами, она автоматически "
|
||||||
|
"устанавливает отступ абзацу, с тем чтобы абзацы можно было бы легко "
|
||||||
|
"отличить. Этот параметр контролирует ширину этого отступа."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131
|
||||||
msgid " em"
|
msgid " em"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:47+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:13+0000\n"
|
||||||
"Last-Translator: Besnik <besnik@programeshqip.org>\n"
|
"Last-Translator: Besnik <besnik@programeshqip.org>\n"
|
||||||
"Language-Team: Albanian <sq@li.org>\n"
|
"Language-Team: Albanian <sq@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:43+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:32+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
|
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:49+0000\n"
|
"PO-Revision-Date: 2010-03-19 15:07+0000\n"
|
||||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
"Last-Translator: Vladimir Oka <Unknown>\n"
|
||||||
"Language-Team: Serbian <sr@li.org>\n"
|
"Language-Team: Serbian <sr@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:45+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-20 04:41+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||||
@ -281,7 +281,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:246
|
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:246
|
||||||
msgid ""
|
msgid ""
|
||||||
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
|
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
|
||||||
msgstr "Ovaj profil je namenjen SONY PRS čitačima 500/505/600&700 i drugima."
|
msgstr "Ovaj profil je namenjen SONY PRS čitačima 500/505/600/700 i drugima."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:68
|
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:68
|
||||||
msgid "This profile is intended for the SONY PRS 300."
|
msgid "This profile is intended for the SONY PRS 300."
|
||||||
@ -374,8 +374,8 @@ msgid ""
|
|||||||
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
|
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
|
||||||
"landscape mode. Mainly useful for comics."
|
"landscape mode. Mainly useful for comics."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ovaj profil je namenjen SONY PRS liniji čitača. Konkretno za 500/505/700 "
|
"Ovaj profil je namenjen SONY PRS liniji čitača. Konkretno za 500/505/700/... "
|
||||||
"itd. u horizontalnom položaju. Uglavnom je koristan za stripove."
|
"u horizontalnom položaju. Uglavnom je koristan za stripove."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:383
|
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:383
|
||||||
msgid "This profile is intended for the Amazon Kindle DX."
|
msgid "This profile is intended for the Amazon Kindle DX."
|
||||||
@ -602,7 +602,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:116
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:116
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:118
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:118
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
msgstr "Prebacujem knjige na uređaj..."
|
msgstr "Šaljem knjige na uređaj..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:181
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:181
|
||||||
@ -1813,7 +1813,7 @@ msgstr "Naslov"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:414
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:414
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1150
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1150
|
||||||
msgid "Author(s)"
|
msgid "Author(s)"
|
||||||
msgstr "Autor(i)"
|
msgstr "Autori"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:365
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:365
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64
|
||||||
@ -1851,7 +1851,7 @@ msgstr "Etikete"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:95
|
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:95
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132
|
||||||
msgid "Series"
|
msgid "Series"
|
||||||
msgstr "Serije"
|
msgstr "Serija"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:378
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:378
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
@ -1998,7 +1998,7 @@ msgstr "Nije nađena nijedna naslovna strana"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:34
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:34
|
||||||
msgid "Metadata download"
|
msgid "Metadata download"
|
||||||
msgstr "Preuzimam metapodatke"
|
msgstr "Preuzimanje metapodataka"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111
|
||||||
msgid "ratings"
|
msgid "ratings"
|
||||||
@ -2709,7 +2709,7 @@ msgstr "Najstarije vesti koje će se čuvati u bazi podataka"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59
|
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59
|
||||||
msgid "Show system tray icon"
|
msgid "Show system tray icon"
|
||||||
msgstr "Prikaži ikonu u sistemskoj kaseti"
|
msgstr "Prikaži sistemsku ikonu"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61
|
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61
|
||||||
msgid "Upload downloaded news to device"
|
msgid "Upload downloaded news to device"
|
||||||
@ -2728,7 +2728,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67
|
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67
|
||||||
msgid "Disable notifications from the system tray icon"
|
msgid "Disable notifications from the system tray icon"
|
||||||
msgstr "Onemogući poruke iz ikone u sistemskoj kaseti"
|
msgstr "Onemogući poruke iz sistemske ikone"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69
|
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69
|
||||||
msgid "Default action to perform when send to device button is clicked"
|
msgid "Default action to perform when send to device button is clicked"
|
||||||
@ -2906,7 +2906,7 @@ msgstr "Obrazac"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37
|
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37
|
||||||
msgid "Fields to include in output:"
|
msgid "Fields to include in output:"
|
||||||
msgstr "Polja koja će biti uključena u izlaz:"
|
msgstr "Polja koja će biti uključena u katalog:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17
|
||||||
msgid "E-book options"
|
msgid "E-book options"
|
||||||
@ -3025,12 +3025,12 @@ msgstr "Isključi &opsecanje"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103
|
||||||
msgid "&Wide"
|
msgid "&Wide"
|
||||||
msgstr "&Široko"
|
msgstr "&Položen ekran"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99
|
||||||
msgid "&Landscape"
|
msgid "&Landscape"
|
||||||
msgstr "&Horizontalno"
|
msgstr "Sačuvaj &horizontalnu orijentaciju originala"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101
|
||||||
@ -3045,7 +3045,7 @@ msgstr "Ne so&rtiraj"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102
|
||||||
msgid "De&speckle"
|
msgid "De&speckle"
|
||||||
msgstr "&Omekšaj"
|
msgstr "&Omekšaj sliku"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95
|
||||||
msgid "&Disable comic processing"
|
msgid "&Disable comic processing"
|
||||||
@ -3235,7 +3235,7 @@ msgstr "&Ključ za veličinu slova:"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126
|
||||||
msgid " pt"
|
msgid " pt"
|
||||||
msgstr " štamparska tačka"
|
msgstr " pt"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107
|
||||||
msgid "Use &default values"
|
msgid "Use &default values"
|
||||||
@ -3251,7 +3251,7 @@ msgstr "&Veličina slova: "
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113
|
||||||
msgid " will map to size: "
|
msgid " will map to size: "
|
||||||
msgstr " će biti povezano s veličinom: "
|
msgstr " će biti povezana s veličinom: "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114
|
||||||
msgid "0.0 pt"
|
msgid "0.0 pt"
|
||||||
@ -3330,7 +3330,7 @@ msgstr "Dodatni &CSS"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||||
msgid "LRF Output"
|
msgid "LRF Output"
|
||||||
msgstr "LRF Izlaz"
|
msgstr "LRF izlaz"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116
|
||||||
msgid "Enable &autorotation of wide images"
|
msgid "Enable &autorotation of wide images"
|
||||||
@ -3358,7 +3358,7 @@ msgstr "Dodaj &zaglavlje"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:124
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:124
|
||||||
msgid "Header &separation:"
|
msgid "Header &separation:"
|
||||||
msgstr "&Razmak zaglavlja:"
|
msgstr "&Razmak između zaglavlja:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:126
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:126
|
||||||
msgid "Header &format:"
|
msgid "Header &format:"
|
||||||
@ -3458,7 +3458,7 @@ msgstr "Promeni naslov ove knjige"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:358
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:358
|
||||||
msgid "&Author(s): "
|
msgid "&Author(s): "
|
||||||
msgstr "&Autor(i): "
|
msgstr "&Autor: "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174
|
||||||
msgid "Author So&rt:"
|
msgid "Author So&rt:"
|
||||||
@ -3518,7 +3518,7 @@ msgstr "MOBI izlaz"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42
|
||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr "Podrazumevano"
|
msgstr "Podrazumevana"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:58
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:58
|
||||||
msgid "&Title for Table of Contents:"
|
msgid "&Title for Table of Contents:"
|
||||||
@ -3570,19 +3570,19 @@ msgstr "Margine"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119
|
||||||
msgid "&Left:"
|
msgid "&Left:"
|
||||||
msgstr "&Levo:"
|
msgstr "&Leva:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121
|
||||||
msgid "&Top:"
|
msgid "&Top:"
|
||||||
msgstr "&Vrh:"
|
msgstr "&Gornja:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:123
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:123
|
||||||
msgid "&Right:"
|
msgid "&Right:"
|
||||||
msgstr "&Desno:"
|
msgstr "&Desna:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:125
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:125
|
||||||
msgid "&Bottom:"
|
msgid "&Bottom:"
|
||||||
msgstr "D&no:"
|
msgstr "D&onja:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12
|
||||||
msgid "PDB Input"
|
msgid "PDB Input"
|
||||||
@ -3616,7 +3616,7 @@ msgstr "Faktor za &uklanjanje preloma reda:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:40
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:40
|
||||||
msgid "No &Images"
|
msgid "No &Images"
|
||||||
msgstr "Bez &slika"
|
msgstr "Ignoriši &slike"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17
|
||||||
msgid "PDF Output"
|
msgid "PDF Output"
|
||||||
@ -3637,7 +3637,7 @@ msgstr "RB izlaz"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1862
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1862
|
||||||
msgid "Choose the format to view"
|
msgid "Choose the format to view"
|
||||||
msgstr "Izaberite format za pregledanje"
|
msgstr "Izaberite format za prikaz"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83
|
||||||
msgid "Cannot build regex using the GUI builder without a book."
|
msgid "Cannot build regex using the GUI builder without a book."
|
||||||
@ -3823,8 +3823,8 @@ msgid ""
|
|||||||
"advanced formatting. To learn more visit <a "
|
"advanced formatting. To learn more visit <a "
|
||||||
"href=\"http://daringfireball.net/projects/markdown\">markdown</a>."
|
"href=\"http://daringfireball.net/projects/markdown\">markdown</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<p>Markdown je jednostavan jezik za tekst fajlove koji omogućava napredno "
|
"<p>Markdown je jednostavan jezik koji omogućava napredno formatiranje "
|
||||||
"formatiranje. Za više infomracija vidite <a "
|
"teksta. Za više infomracija vidite <a "
|
||||||
"href=\"http://daringfireball.net/projects/markdown\">markdown</a>."
|
"href=\"http://daringfireball.net/projects/markdown\">markdown</a>."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:47
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:47
|
||||||
@ -3845,7 +3845,7 @@ msgstr "&Maksimalna dužina reda:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:49
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:49
|
||||||
msgid "Force maximum line lenght"
|
msgid "Force maximum line lenght"
|
||||||
msgstr "Nametni maksimalnu dužinu reda:"
|
msgstr "Nametni maksimalnu dužinu reda"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65
|
||||||
@ -3997,7 +3997,7 @@ msgstr "Postavi podrazumevanu akciju pri prenošenju na uređaj"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:333
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:333
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:335
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:335
|
||||||
msgid "Email to"
|
msgid "Email to"
|
||||||
msgstr "Pošalji elektronskom poštom"
|
msgstr "Pošalji elektronskom poštom na"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:346
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:346
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:353
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:353
|
||||||
@ -4167,7 +4167,7 @@ msgstr "Koristi pod-direktorijume"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81
|
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81
|
||||||
msgid "Save &template:"
|
msgid "Save &template:"
|
||||||
msgstr "&Snimi šablon"
|
msgstr "Šablon za &snimanje:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:108
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:108
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109
|
||||||
@ -4195,11 +4195,11 @@ msgstr "Prilagodi veličinu &naslovne strane"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69
|
||||||
msgid "&Previous"
|
msgid "&Previous"
|
||||||
msgstr "&Prethodno"
|
msgstr "&Prethodna"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70
|
||||||
msgid "&Next"
|
msgid "&Next"
|
||||||
msgstr "&Sledeće"
|
msgstr "&Sledeća"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38
|
||||||
msgid "My Books"
|
msgid "My Books"
|
||||||
@ -4251,7 +4251,7 @@ msgstr "&Naslov:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93
|
||||||
msgid "&Author(s):"
|
msgid "&Author(s):"
|
||||||
msgstr "&Autor(i):"
|
msgstr "&Autor:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95
|
||||||
msgid "&Profile:"
|
msgid "&Profile:"
|
||||||
@ -4263,7 +4263,7 @@ msgstr "%(plugin_type)s %(plugins)s"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:171
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:171
|
||||||
msgid "plugins"
|
msgid "plugins"
|
||||||
msgstr "dodaci"
|
msgstr "..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4279,7 +4279,7 @@ msgstr "Konverzija"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196
|
||||||
msgid "General"
|
msgid "General"
|
||||||
msgstr "Opšte"
|
msgstr "Opšta"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196
|
||||||
msgid "Interface"
|
msgid "Interface"
|
||||||
@ -4514,13 +4514,12 @@ msgid ""
|
|||||||
"punctuation, case, etc. Author match is exact."
|
"punctuation, case, etc. Author match is exact."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ako je pronađena knjiga sa sličnim naslovom i autorima, a koja nije u "
|
"Ako je pronađena knjiga sa sličnim naslovom i autorima, a koja nije u "
|
||||||
"formatu koji se dodaje, format će se dodati postojećoj knjizi, umesto da se "
|
"formatu koji se dodaje, format će se dodati postojećoj knjizi \n"
|
||||||
"doda kao nova knjiga. Ako postojeća knjiga već postoji u datom formatu biće "
|
"umesto da se doda kao nova knjiga. Ako postojeća knjiga već postoji u datom "
|
||||||
"ignorisana bez ikakve poruke.\n"
|
"formatu biće ignorisana bez ikakve poruke.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Sličnost naslova ne zavisi od vodećih neodređenih članova (\"the\", \"a\", "
|
"Sličnost naslova ne zavisi od vodećih članova (\"the\", \"a\", \"an\"), "
|
||||||
"\"an\"), interpunkcije, veličine slova, itd. Imena autora moraju biti po "
|
"interpunkcije, veličine slova, itd. Imena autora moraju biti identična."
|
||||||
"svemu identična."
|
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4608,7 +4607,7 @@ msgid ""
|
|||||||
"&Location of ebooks (The ebooks are stored in folders sorted by author and "
|
"&Location of ebooks (The ebooks are stored in folders sorted by author and "
|
||||||
"metadata is stored in the file metadata.db)"
|
"metadata is stored in the file metadata.db)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"&Mesto za e-knjige (E-knjige se smeštaju u direktorijume sortirane po "
|
"&Mesto za e-knjige (e-knjige se smeštaju u direktorijume sortirane po "
|
||||||
"autoru, a metapodaci se snimaju u fajl metadata.db)"
|
"autoru, a metapodaci se snimaju u fajl metadata.db)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
|
||||||
@ -4621,7 +4620,7 @@ msgstr "Prikaži poruku ako postoji &nova verzija programa"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
|
||||||
msgid "Download &social metadata (tags/ratings/etc.) by default"
|
msgid "Download &social metadata (tags/ratings/etc.) by default"
|
||||||
msgstr "Automatski preuzmi &društvene metapodatke (etikete/ocene/itd)"
|
msgstr "Automatski preuzmi &društvene metapodatke (etikete, ocene, itd)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
|
||||||
msgid "&Overwrite author and title by default when fetching metadata"
|
msgid "&Overwrite author and title by default when fetching metadata"
|
||||||
@ -4649,15 +4648,15 @@ msgstr "Izaberi &jezik (zahteva ponovno pokretanje programa):"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
|
||||||
msgid "Normal"
|
msgid "Normal"
|
||||||
msgstr "Normalno"
|
msgstr "Normalan"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
|
||||||
msgid "High"
|
msgid "High"
|
||||||
msgstr "Visoko"
|
msgstr "Visok"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
|
||||||
msgid "Low"
|
msgid "Low"
|
||||||
msgstr "Nisko"
|
msgstr "Nizak"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
|
||||||
msgid "Job &priority:"
|
msgid "Job &priority:"
|
||||||
@ -4669,7 +4668,7 @@ msgstr "Poželjni izlazni f&ormat:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
|
||||||
msgid "Preferred &input format order:"
|
msgid "Preferred &input format order:"
|
||||||
msgstr "Poželjni redosled ulazn&ih formata:"
|
msgstr "Poželjan redosled ulazn&ih formata:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
|
||||||
msgid "Use &Roman numerals for series number"
|
msgid "Use &Roman numerals for series number"
|
||||||
@ -4682,7 +4681,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
|
||||||
msgid "Show ¬ifications in system tray"
|
msgid "Show ¬ifications in system tray"
|
||||||
msgstr "Prikazuj obaveštenja u sistmeskoj kaseti"
|
msgstr "Prikazuj obaveštenja u sistemskoj ikoni"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526
|
||||||
msgid "Show cover &browser in a separate window (needs restart)"
|
msgid "Show cover &browser in a separate window (needs restart)"
|
||||||
@ -4714,15 +4713,15 @@ msgstr "Traka sa alatkama"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
||||||
msgid "Large"
|
msgid "Large"
|
||||||
msgstr "Veliko"
|
msgstr "Velika"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
||||||
msgid "Medium"
|
msgid "Medium"
|
||||||
msgstr "Srednje"
|
msgstr "Srednja"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
||||||
msgid "Small"
|
msgid "Small"
|
||||||
msgstr "Malo"
|
msgstr "Mala"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
||||||
msgid "&Button size in toolbar"
|
msgid "&Button size in toolbar"
|
||||||
@ -4895,7 +4894,7 @@ msgid ""
|
|||||||
"it uses."
|
"it uses."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ovde možete promeniti ponašanje Calibrea izborom dodataka koji će biti "
|
"Ovde možete promeniti ponašanje Calibrea izborom dodataka koji će biti "
|
||||||
"korišćeni."
|
"korišćeni za:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569
|
||||||
msgid "Enable/&Disable plugin"
|
msgid "Enable/&Disable plugin"
|
||||||
@ -4953,11 +4952,11 @@ msgid ""
|
|||||||
"particular book does not have some metadata, the variable will be replaced "
|
"particular book does not have some metadata, the variable will be replaced "
|
||||||
"by the empty string."
|
"by the empty string."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Podešavanjem ovog šablona možete u birati u koje direktorijume i kako će "
|
"Podešavanjem ovog šablona možete birati u koje direktorijume i kako će biti "
|
||||||
"biti snimljeni fajlovi. Možete koristitii znak / da navedete pod-"
|
"snimljeni fajlovi. Možete koristitii znak / da navedete pod-direktorijume. "
|
||||||
"direktorijume. Metapodaci (promenljive) koji su vam na raspolaganju su "
|
"Metapodaci (promenljive) koji su vam na raspolaganju su takođe navedeni "
|
||||||
"takođe navedeni niže. Ako određena knjiga nema neke metapodatke oni će biti "
|
"niže. Ako određena knjiga nema neki od metapodataka oni će biti zamenjeni "
|
||||||
"zamenjeni praznim nizom znakova."
|
"praznim nizom znakova."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44
|
||||||
msgid "Available variables:"
|
msgid "Available variables:"
|
||||||
@ -5896,7 +5895,7 @@ msgstr ""
|
|||||||
"right:0px; -qt-block-indent:0; text-indent:0px;\">Koristite <span style=\" "
|
"right:0px; -qt-block-indent:0; text-indent:0px;\">Koristite <span style=\" "
|
||||||
"font-weight:600;\">Test</span> funkciju niže, koja će vaš regularni izraz "
|
"font-weight:600;\">Test</span> funkciju niže, koja će vaš regularni izraz "
|
||||||
"proveriti na nekoliko primera imena fajlova. Imena za grupe različitih "
|
"proveriti na nekoliko primera imena fajlova. Imena za grupe različitih "
|
||||||
"stavki u metapodacima su opisane u \"oblačićima\" za pomoć.</p></body></html>"
|
"stavki u metapodacima su opisane u oblačićima za pomoć.</p></body></html>"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
||||||
msgid "Regular &expression"
|
msgid "Regular &expression"
|
||||||
@ -5908,7 +5907,7 @@ msgstr "&Ime fajla:"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
||||||
msgid "Test"
|
msgid "Test"
|
||||||
msgstr "Proba"
|
msgstr "Probaj"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
||||||
msgid "Title:"
|
msgid "Title:"
|
||||||
@ -5933,7 +5932,7 @@ msgstr "Ništa nije pronađeno"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
||||||
msgid "Authors:"
|
msgid "Authors:"
|
||||||
msgstr "Autori:"
|
msgstr "Autor:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
||||||
msgid "Regular expression (?P<author>)"
|
msgid "Regular expression (?P<author>)"
|
||||||
@ -6008,7 +6007,7 @@ msgstr "Posao je već završen"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:243
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:243
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr "Nedostupno"
|
msgstr "Nedostupan"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:254
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:254
|
||||||
msgid " - Jobs"
|
msgid " - Jobs"
|
||||||
@ -6036,11 +6035,11 @@ msgstr "Ocena"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77
|
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:440
|
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:440
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nijedno"
|
msgstr "Nema"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:375
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:375
|
||||||
msgid "Book <font face=\"serif\">%s</font> of %s."
|
msgid "Book <font face=\"serif\">%s</font> of %s."
|
||||||
msgstr "Knjiga <font face=\"serif\">%s</font> od %s."
|
msgstr "Knjiga <font face=\"serif\">%s</font> autora %s."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889
|
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889
|
||||||
msgid "Not allowed"
|
msgid "Not allowed"
|
||||||
@ -6141,7 +6140,7 @@ msgstr "Koristi biblioteku na navedenoj putanji."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:27
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:27
|
||||||
msgid "Start minimized to system tray."
|
msgid "Start minimized to system tray."
|
||||||
msgstr "Pokreni program sakriven u sistemsku kasetu."
|
msgstr "Pokreni program sakriven u sistemsku ikonu."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:29
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:29
|
||||||
msgid "Log debugging information to console"
|
msgid "Log debugging information to console"
|
||||||
@ -6165,7 +6164,7 @@ msgstr "%s je već pokrenut."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:92
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:92
|
||||||
msgid "may be running in the system tray, in the"
|
msgid "may be running in the system tray, in the"
|
||||||
msgstr "i možda je već u sistemskoj kaseti, u"
|
msgstr "i možda je sakriven u sistemsk ikonu, u"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94
|
||||||
msgid "upper right region of the screen."
|
msgid "upper right region of the screen."
|
||||||
@ -6306,7 +6305,7 @@ msgstr "Knjige iz iste serije"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364
|
||||||
msgid "Books by this publisher"
|
msgid "Books by this publisher"
|
||||||
msgstr "Knjige od ovog izdavača"
|
msgstr "Knjige od istog izdavača"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:365
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:365
|
||||||
msgid "Books with the same tags"
|
msgid "Books with the same tags"
|
||||||
@ -6505,7 +6504,7 @@ msgstr "Greška u komunikaciji sa uređajem"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:178
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:178
|
||||||
msgid "&Restore"
|
msgid "&Restore"
|
||||||
msgstr "Pov&rati"
|
msgstr "V&rati na ekran"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:180
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:180
|
||||||
msgid "&Donate to support calibre"
|
msgid "&Donate to support calibre"
|
||||||
@ -6521,7 +6520,8 @@ msgstr "<p>Za pomoć vidi: <a href=\"%s\">Korisničko uputstvo</a><br>"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:226
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:226
|
||||||
msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
||||||
msgstr "<b>%s</b>: %s autor <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
msgstr ""
|
||||||
|
"<b>%s</b>: %s autor <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:249
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:249
|
||||||
msgid "Edit metadata individually"
|
msgid "Edit metadata individually"
|
||||||
@ -6579,11 +6579,11 @@ msgstr "Snimi na disk u jedan direktorijum"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967
|
||||||
msgid "Save only %s format to disk"
|
msgid "Save only %s format to disk"
|
||||||
msgstr "Snimi samo format %s na disk"
|
msgstr "Snimi na disk samo %s format"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:317
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:317
|
||||||
msgid "View specific format"
|
msgid "View specific format"
|
||||||
msgstr "Pregledaj određeni format"
|
msgstr "Prikaži određeni format"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:321
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:321
|
||||||
msgid "Remove selected books"
|
msgid "Remove selected books"
|
||||||
@ -6591,7 +6591,7 @@ msgstr "Ukloni izabrane knjige"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:323
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:323
|
||||||
msgid "Remove files of a specific format from selected books.."
|
msgid "Remove files of a specific format from selected books.."
|
||||||
msgstr "Ukloni fajlove navedenih formata za izabrane knjige.."
|
msgstr "Ukloni fajlove navedenih formata za izabrane knjige..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:325
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:325
|
||||||
msgid "Remove all formats from selected books, except..."
|
msgid "Remove all formats from selected books, except..."
|
||||||
@ -6599,7 +6599,7 @@ msgstr "Ukloni sve formate za izabrane knjige, osim..."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:327
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:327
|
||||||
msgid "Remove covers from selected books"
|
msgid "Remove covers from selected books"
|
||||||
msgstr "Ukloni naslovne strane za izabrane knjige"
|
msgstr "Ukloni naslovne strane izabranih knjiga"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:359
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:359
|
||||||
msgid "Convert individually"
|
msgid "Convert individually"
|
||||||
@ -6654,7 +6654,7 @@ msgstr " detektovan."
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:885
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:885
|
||||||
msgid "Connected "
|
msgid "Connected "
|
||||||
msgstr "Povezan "
|
msgstr "Priključen je "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:897
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:897
|
||||||
msgid "Device database corrupted"
|
msgid "Device database corrupted"
|
||||||
@ -7048,7 +7048,7 @@ msgid ""
|
|||||||
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
||||||
"context menu of the system tray."
|
"context menu of the system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"će nastaviti da radi u sistemskoj kaseti. Da prekinete rad izaberite "
|
"će nastaviti da radi kao sistemska ikona. Da prekinete rad izaberite "
|
||||||
"<b>Izlaz</b> u meniju."
|
"<b>Izlaz</b> u meniju."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2286
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2286
|
||||||
@ -7792,7 +7792,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:108
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:108
|
||||||
msgid "Send email &from:"
|
msgid "Send email &from:"
|
||||||
msgstr "Pošalji elektronsku poštu &sa:"
|
msgstr "&Pošiljalac:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:109
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:109
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -7821,7 +7821,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:113
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:113
|
||||||
msgid "&Hostname:"
|
msgid "&Hostname:"
|
||||||
msgstr "&Ime računara"
|
msgstr "&Server"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:114
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:114
|
||||||
msgid "The hostname of your mail server. For e.g. smtp.gmail.com"
|
msgid "The hostname of your mail server. For e.g. smtp.gmail.com"
|
||||||
@ -8696,7 +8696,7 @@ msgstr "Zaustavljeno"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||||
msgid "Finished"
|
msgid "Finished"
|
||||||
msgstr "Završeno"
|
msgstr "Gotovo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:75
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:75
|
||||||
msgid "Working..."
|
msgid "Working..."
|
||||||
@ -8841,7 +8841,7 @@ msgstr "Recept \"%s\" zahteva korisničko ime i lozinku"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:633
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:633
|
||||||
msgid "Download finished"
|
msgid "Download finished"
|
||||||
msgstr "Preuzimanje završeno"
|
msgstr "Preuzimanje gotovo"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:635
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:635
|
||||||
msgid "Failed to download the following articles:"
|
msgid "Failed to download the following articles:"
|
||||||
|
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 ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-28 04:18+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 01:01+0000\n"
|
"PO-Revision-Date: 2010-03-28 14:59+0000\n"
|
||||||
"Last-Translator: Thruth Wang <wanglihao@gmail.com>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Simplified Chinese <wanglihao@gmail.com>\n"
|
"Language-Team: Simplified Chinese <wanglihao@gmail.com>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:45+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-29 03:45+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"X-Poedit-Country: CHINA\n"
|
"X-Poedit-Country: CHINA\n"
|
||||||
"X-Poedit-Language: Chinese\n"
|
"X-Poedit-Language: Chinese\n"
|
||||||
@ -31,7 +31,7 @@ msgstr "不做任何处理"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
#: /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/prs505/books.py:199
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:205
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:204
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56
|
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56
|
||||||
@ -137,7 +137,7 @@ msgstr "不做任何处理"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:664
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:664
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:740
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:740
|
||||||
#: /home/kovid/work/calibre/src/calibre/library/server.py:787
|
#: /home/kovid/work/calibre/src/calibre/library/server.py:787
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77
|
||||||
@ -488,7 +488,7 @@ msgstr "与 IRex Iliad eBook reader 通信。"
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17
|
#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18
|
#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:30
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29
|
||||||
msgid "John Schember"
|
msgid "John Schember"
|
||||||
msgstr "John Schember"
|
msgstr "John Schember"
|
||||||
|
|
||||||
@ -516,11 +516,11 @@ msgstr "与 JetBook eBook reader 通信。"
|
|||||||
msgid "Communicate with the Kindle eBook reader."
|
msgid "Communicate with the Kindle eBook reader."
|
||||||
msgstr "与 Kindle eBook reader 通信。"
|
msgstr "与 Kindle eBook reader 通信。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:140
|
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:147
|
||||||
msgid "Communicate with the Kindle 2 eBook reader."
|
msgid "Communicate with the Kindle 2 eBook reader."
|
||||||
msgstr "与 Kindle 2 eBook reader 通信。"
|
msgstr "与 Kindle 2 eBook reader 通信。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:150
|
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:157
|
||||||
msgid "Communicate with the Kindle DX eBook reader."
|
msgid "Communicate with the Kindle DX eBook reader."
|
||||||
msgstr "与 Kindle DX 通信。"
|
msgstr "与 Kindle DX 通信。"
|
||||||
|
|
||||||
@ -553,12 +553,12 @@ msgstr "与 Sony PRS-500 eBook reader 通信。"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:105
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:105
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:108
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:108
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:119
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:119
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:45
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:48
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:47
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:51
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:50
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:71
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:70
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:81
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:80
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:90
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:89
|
||||||
msgid "Getting list of books on device..."
|
msgid "Getting list of books on device..."
|
||||||
msgstr "从设备中获取书籍列表..."
|
msgstr "从设备中获取书籍列表..."
|
||||||
|
|
||||||
@ -574,24 +574,24 @@ msgstr "逗号间隔的元数据域列表,用以在设备形成合集。可能
|
|||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:139
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:139
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:141
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:141
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:116
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:115
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:118
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:117
|
||||||
msgid "Transferring books to device..."
|
msgid "Transferring books to device..."
|
||||||
msgstr "传输书籍到设备中..."
|
msgstr "传输书籍到设备中..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:179
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:181
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:186
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:145
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:162
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:161
|
||||||
msgid "Removing books from device..."
|
msgid "Removing books from device..."
|
||||||
msgstr "正在从设备中删除书籍..."
|
msgstr "正在从设备中删除书籍..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:207
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:212
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:177
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176
|
||||||
msgid "Sending metadata to device..."
|
msgid "Sending metadata to device..."
|
||||||
msgstr "正在传输元数据到设备..."
|
msgstr "正在传输元数据到设备..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:213
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:218
|
||||||
msgid "Communicate with the Sony PRS-600/700/900 eBook reader."
|
msgid "Communicate with the Sony PRS-600/700/900 eBook reader."
|
||||||
msgstr "与索尼 PRS-600/700/900 eBook reader 通信。"
|
msgstr "与索尼 PRS-600/700/900 eBook reader 通信。"
|
||||||
|
|
||||||
@ -683,21 +683,21 @@ msgstr "控制书籍保存方式的模板"
|
|||||||
msgid "Extra customization"
|
msgid "Extra customization"
|
||||||
msgstr "额外定制"
|
msgstr "额外定制"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28
|
||||||
msgid "Communicate with an eBook reader."
|
msgid "Communicate with an eBook reader."
|
||||||
msgstr "与电子书阅读设备通信。"
|
msgstr "与电子书阅读设备通信。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:37
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:36
|
||||||
msgid "Get device information..."
|
msgid "Get device information..."
|
||||||
msgstr "获取设备信息..."
|
msgstr "获取设备信息..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:133
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:132
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:141
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:140
|
||||||
msgid "Adding books to device metadata listing..."
|
msgid "Adding books to device metadata listing..."
|
||||||
msgstr "将书籍添加到设备的元数据列表中..."
|
msgstr "将书籍添加到设备的元数据列表中..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:166
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:165
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:171
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:170
|
||||||
msgid "Removing books from device metadata listing..."
|
msgid "Removing books from device metadata listing..."
|
||||||
msgstr "将书籍从设备的元数据列表移除中..."
|
msgstr "将书籍从设备的元数据列表移除中..."
|
||||||
|
|
||||||
@ -1947,7 +1947,11 @@ msgstr "生成的行内目录标题。"
|
|||||||
msgid "Disable compression of the file contents."
|
msgid "Disable compression of the file contents."
|
||||||
msgstr "不压缩文件内容。"
|
msgstr "不压缩文件内容。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:105
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40
|
||||||
|
msgid "Tag marking book to be filed with Personal Docs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108
|
||||||
msgid "All articles"
|
msgid "All articles"
|
||||||
msgstr "所有文章"
|
msgstr "所有文章"
|
||||||
|
|
||||||
@ -2558,7 +2562,7 @@ msgid "No books"
|
|||||||
msgstr "没有书籍"
|
msgstr "没有书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:257
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:257
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1617
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1654
|
||||||
msgid "No books found"
|
msgid "No books found"
|
||||||
msgstr "未找到书籍"
|
msgstr "未找到书籍"
|
||||||
|
|
||||||
@ -2644,7 +2648,7 @@ msgstr "输出"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:118
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:118
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:57
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:114
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:114
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35
|
||||||
@ -3243,33 +3247,37 @@ msgstr "MOBI 输出"
|
|||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr "默认"
|
msgstr "默认"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:58
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67
|
||||||
msgid "&Title for Table of Contents:"
|
msgid "&Title for Table of Contents:"
|
||||||
msgstr "书籍目录标题(&T):"
|
msgstr "书籍目录标题(&T):"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:59
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68
|
||||||
msgid "Rescale images for &Palm devices"
|
msgid "Rescale images for &Palm devices"
|
||||||
msgstr "为 Palm 设备缩放图片(&P)"
|
msgstr "为 Palm 设备缩放图片(&P)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:60
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69
|
||||||
msgid "Use author &sort for author"
|
msgid "Use author &sort for author"
|
||||||
msgstr "使用作者项作为按作者排序索引(&S)"
|
msgstr "使用作者项作为按作者排序索引(&S)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:61
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:70
|
||||||
msgid "Disable compression of the file contents"
|
msgid "Disable compression of the file contents"
|
||||||
msgstr "禁用文件内容压缩"
|
msgstr "禁用文件内容压缩"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:62
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71
|
||||||
msgid "Do not add Table of Contents to book"
|
msgid "Do not add Table of Contents to book"
|
||||||
msgstr "不将目录添加到书籍"
|
msgstr "不将目录添加到书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:63
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72
|
||||||
msgid "Kindle options"
|
msgid "Kindle options"
|
||||||
msgstr "Kindle 选项"
|
msgstr "Kindle 选项"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:64
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:73
|
||||||
msgid "Masthead font:"
|
msgid "Periodical masthead font:"
|
||||||
msgstr "刊头字体:"
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74
|
||||||
|
msgid "Personal Doc tag:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35
|
||||||
msgid "Page Setup"
|
msgid "Page Setup"
|
||||||
@ -3357,39 +3365,44 @@ msgstr "纸张方向(&O):"
|
|||||||
msgid "RB Output"
|
msgid "RB Output"
|
||||||
msgstr "RB 输出"
|
msgstr "RB 输出"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:85
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1862
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1899
|
||||||
msgid "Choose the format to view"
|
msgid "Choose the format to view"
|
||||||
msgstr "选择格式进行查看"
|
msgstr "选择格式进行查看"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:91
|
||||||
msgid "Cannot build regex using the GUI builder without a book."
|
msgid "Cannot build regex using the GUI builder without a book."
|
||||||
msgstr "缺少书籍,无法使用图形界面构建器构建正则表达式。"
|
msgstr "缺少书籍,无法使用图形界面构建器构建正则表达式。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:83
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:91
|
||||||
msgid "No formats available"
|
msgid "No formats available"
|
||||||
msgstr "无格式何用"
|
msgstr "无格式何用"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:99
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:107
|
||||||
msgid "Open book"
|
msgid "Open book"
|
||||||
msgstr "打开书籍"
|
msgstr "打开书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:99
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:107
|
||||||
msgid "~"
|
msgid "~"
|
||||||
msgstr "~"
|
msgstr "~"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:46
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:52
|
||||||
msgid "Regex Builder"
|
msgid "Regex Builder"
|
||||||
msgstr "正则表达式生成器"
|
msgstr "正则表达式生成器"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:47
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:53
|
||||||
msgid "Preview"
|
msgid "Preview"
|
||||||
msgstr "预览"
|
msgstr "预览"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:48
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:54
|
||||||
msgid "Regex:"
|
msgid "Regex:"
|
||||||
msgstr "正则表达式:"
|
msgstr "正则表达式:"
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:55
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
||||||
|
msgid "Test"
|
||||||
|
msgstr "测试"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171
|
||||||
msgid "Convert"
|
msgid "Convert"
|
||||||
msgstr "转换"
|
msgstr "转换"
|
||||||
@ -4044,7 +4057,7 @@ msgstr "新邮件地址"
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:478
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:478
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:823
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:823
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:160
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:160
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1456
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1493
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "错误"
|
msgstr "错误"
|
||||||
@ -4801,7 +4814,7 @@ msgid "Choose formats for "
|
|||||||
msgstr "选择格式 "
|
msgstr "选择格式 "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1239
|
||||||
msgid "Books"
|
msgid "Books"
|
||||||
msgstr "书籍"
|
msgstr "书籍"
|
||||||
|
|
||||||
@ -5515,10 +5528,6 @@ msgstr "正则表达式(&E)"
|
|||||||
msgid "File &name:"
|
msgid "File &name:"
|
||||||
msgstr "文件名(&N):"
|
msgstr "文件名(&N):"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
|
||||||
msgid "Test"
|
|
||||||
msgstr "测试"
|
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
||||||
msgid "Title:"
|
msgid "Title:"
|
||||||
msgstr "标题:"
|
msgstr "标题:"
|
||||||
@ -6168,7 +6177,7 @@ msgid "Save to disk in a single directory"
|
|||||||
msgstr "保存到磁盘单个目录"
|
msgstr "保存到磁盘单个目录"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2004
|
||||||
msgid "Save only %s format to disk"
|
msgid "Save only %s format to disk"
|
||||||
msgstr "仅保存 %s 到磁盘"
|
msgstr "仅保存 %s 到磁盘"
|
||||||
|
|
||||||
@ -6223,7 +6232,7 @@ msgid "Calibre Library"
|
|||||||
msgstr "Calibre 书库"
|
msgstr "Calibre 书库"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:488
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:488
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2123
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2160
|
||||||
msgid "Choose a location for your ebook library."
|
msgid "Choose a location for your ebook library."
|
||||||
msgstr "为您的电子书库选择一个位置。"
|
msgstr "为您的电子书库选择一个位置。"
|
||||||
|
|
||||||
@ -6277,22 +6286,22 @@ msgstr ""
|
|||||||
" "
|
" "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1135
|
||||||
msgid "Use library only"
|
msgid "Use library only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1136
|
||||||
msgid "User annotations generated from main library only"
|
msgid "User annotations generated from main library only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:966
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:966
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1410
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1447
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1467
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1504
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1504
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1529
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1541
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1594
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1566
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1712
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1749
|
||||||
msgid "No books selected"
|
msgid "No books selected"
|
||||||
msgstr "未选择书籍"
|
msgstr "未选择书籍"
|
||||||
|
|
||||||
@ -6300,183 +6309,203 @@ msgstr "未选择书籍"
|
|||||||
msgid "No books selected to fetch annotations from"
|
msgid "No books selected to fetch annotations from"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:989
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:992
|
||||||
msgid "Merging user annotations into database"
|
msgid "Merging user annotations into database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1142
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1020
|
||||||
|
msgid "%s<br />Last Page Read: %d (%d%%)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1026
|
||||||
|
msgid "%s<br />Last Page Read: Location %d (%d%%)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1045
|
||||||
|
msgid "<b>Location %d • %s</b><br />%s<br />"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1054
|
||||||
|
msgid "<b>Page %d • %s</b><br />"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1059
|
||||||
|
msgid "<b>Location %d • %s</b><br />"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1179
|
||||||
msgid "How many empty books?"
|
msgid "How many empty books?"
|
||||||
msgstr "多少空白书籍?"
|
msgstr "多少空白书籍?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1143
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1180
|
||||||
msgid "How many empty books should be added?"
|
msgid "How many empty books should be added?"
|
||||||
msgstr "应添加多少空白书籍?"
|
msgstr "应添加多少空白书籍?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1191
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1228
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1279
|
||||||
msgid "Uploading books to device."
|
msgid "Uploading books to device."
|
||||||
msgstr "正在上传书籍到设备。"
|
msgstr "正在上传书籍到设备。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1203
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1240
|
||||||
msgid "EPUB Books"
|
msgid "EPUB Books"
|
||||||
msgstr "EPUB 书籍"
|
msgstr "EPUB 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1204
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241
|
||||||
msgid "LRF Books"
|
msgid "LRF Books"
|
||||||
msgstr "LRF 书籍"
|
msgstr "LRF 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1205
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242
|
||||||
msgid "HTML Books"
|
msgid "HTML Books"
|
||||||
msgstr "HTML 书籍"
|
msgstr "HTML 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1243
|
||||||
msgid "LIT Books"
|
msgid "LIT Books"
|
||||||
msgstr "LIT 书籍"
|
msgstr "LIT 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1207
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1244
|
||||||
msgid "MOBI Books"
|
msgid "MOBI Books"
|
||||||
msgstr "MOBI 书籍"
|
msgstr "MOBI 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1208
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
|
||||||
msgid "Topaz books"
|
msgid "Topaz books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1209
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1246
|
||||||
msgid "Text books"
|
msgid "Text books"
|
||||||
msgstr "文本书籍"
|
msgstr "文本书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1210
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1247
|
||||||
msgid "PDF Books"
|
msgid "PDF Books"
|
||||||
msgstr "PDF 书籍"
|
msgstr "PDF 书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1248
|
||||||
msgid "Comics"
|
msgid "Comics"
|
||||||
msgstr "漫画"
|
msgstr "漫画"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1212
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1249
|
||||||
msgid "Archives"
|
msgid "Archives"
|
||||||
msgstr "归档"
|
msgstr "归档"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1216
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253
|
||||||
msgid "Supported books"
|
msgid "Supported books"
|
||||||
msgstr "支持的书j"
|
msgstr "支持的书j"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1251
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288
|
||||||
msgid "Merged some books"
|
msgid "Merged some books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289
|
||||||
msgid ""
|
msgid ""
|
||||||
"Some duplicates were found and merged into the following existing books:"
|
"Some duplicates were found and merged into the following existing books:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1261
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1298
|
||||||
msgid "Failed to read metadata"
|
msgid "Failed to read metadata"
|
||||||
msgstr "无法读取元数据"
|
msgstr "无法读取元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1262
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1299
|
||||||
msgid "Failed to read metadata from the following"
|
msgid "Failed to read metadata from the following"
|
||||||
msgstr "无法从下列项目读取元数据"
|
msgstr "无法从下列项目读取元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1282
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1319
|
||||||
msgid "Cannot delete"
|
msgid "Cannot delete"
|
||||||
msgstr "无法删除"
|
msgstr "无法删除"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1322
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1856
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1872
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1909
|
||||||
msgid "No book selected"
|
msgid "No book selected"
|
||||||
msgstr "未选择书籍"
|
msgstr "未选择书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1295
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332
|
||||||
msgid "Choose formats to be deleted"
|
msgid "Choose formats to be deleted"
|
||||||
msgstr "选择删除格式"
|
msgstr "选择删除格式"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350
|
||||||
msgid "Choose formats <b>not</b> to be deleted"
|
msgid "Choose formats <b>not</b> to be deleted"
|
||||||
msgstr "选择<b>非</b>删除格式"
|
msgstr "选择<b>非</b>删除格式"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1351
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388
|
||||||
msgid ""
|
msgid ""
|
||||||
"The selected books will be <b>permanently deleted</b> and the files removed "
|
"The selected books will be <b>permanently deleted</b> and the files removed "
|
||||||
"from your computer. Are you sure?"
|
"from your computer. Are you sure?"
|
||||||
msgstr "选定书籍将被<b>永久删除</b>,文件会从您的电脑中移除。是否确定?"
|
msgstr "选定书籍将被<b>永久删除</b>,文件会从您的电脑中移除。是否确定?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1378
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
|
||||||
msgid "Deleting books from device."
|
msgid "Deleting books from device."
|
||||||
msgstr "从设备删除书籍。"
|
msgstr "从设备删除书籍。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1409
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1446
|
||||||
msgid "Cannot download metadata"
|
msgid "Cannot download metadata"
|
||||||
msgstr "无法下载元数据"
|
msgstr "无法下载元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1462
|
||||||
msgid "social metadata"
|
msgid "social metadata"
|
||||||
msgstr "社会性元数据"
|
msgstr "社会性元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1464
|
||||||
msgid "covers"
|
msgid "covers"
|
||||||
msgstr "封面"
|
msgstr "封面"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1464
|
||||||
msgid "metadata"
|
msgid "metadata"
|
||||||
msgstr "元数据"
|
msgstr "元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1429
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466
|
||||||
msgid "Downloading %s for %d book(s)"
|
msgid "Downloading %s for %d book(s)"
|
||||||
msgstr "正在为 %d 本书下载 %s"
|
msgstr "正在为 %s 本书下载 %s"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1488
|
||||||
msgid "Failed to download some metadata"
|
msgid "Failed to download some metadata"
|
||||||
msgstr "下载一些元数据失败"
|
msgstr "下载一些元数据失败"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1452
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1489
|
||||||
msgid "Failed to download metadata for the following:"
|
msgid "Failed to download metadata for the following:"
|
||||||
msgstr "下载下列书籍元数据失败:"
|
msgstr "下载下列书籍元数据失败:"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1455
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1492
|
||||||
msgid "Failed to download metadata:"
|
msgid "Failed to download metadata:"
|
||||||
msgstr "下载元数据失败。"
|
msgstr "下载元数据失败。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1503
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1503
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540
|
||||||
msgid "Cannot edit metadata"
|
msgid "Cannot edit metadata"
|
||||||
msgstr "无法编辑元数据"
|
msgstr "无法编辑元数据"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1528
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1565
|
||||||
msgid "Cannot save to disk"
|
msgid "Cannot save to disk"
|
||||||
msgstr "无法保存到磁盘"
|
msgstr "无法保存到磁盘"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1531
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1568
|
||||||
msgid "Choose destination directory"
|
msgid "Choose destination directory"
|
||||||
msgstr "选择目标目录"
|
msgstr "选择目标目录"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1564
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1601
|
||||||
msgid "Error while saving"
|
msgid "Error while saving"
|
||||||
msgstr "保存出错"
|
msgstr "保存出错"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1565
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1602
|
||||||
msgid "There was an error while saving."
|
msgid "There was an error while saving."
|
||||||
msgstr "保存时出错。"
|
msgstr "保存时出错。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1609
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1573
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1610
|
||||||
msgid "Could not save some books"
|
msgid "Could not save some books"
|
||||||
msgstr "无法保存一些书籍"
|
msgstr "无法保存一些书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1574
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1611
|
||||||
msgid "Click the show details button to see which ones."
|
msgid "Click the show details button to see which ones."
|
||||||
msgstr "点击显示详情按钮查看具体哪些。"
|
msgstr "点击显示详情按钮查看具体哪些。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1595
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1632
|
||||||
msgid "No books selected to generate catalog for"
|
msgid "No books selected to generate catalog for"
|
||||||
msgstr "未选定书籍生成类目"
|
msgstr "未选定书籍生成类目"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1612
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649
|
||||||
msgid "Generating %s catalog..."
|
msgid "Generating %s catalog..."
|
||||||
msgstr "正在生成 %s 类目..."
|
msgstr "正在生成 %s 类目..."
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1618
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1655
|
||||||
msgid ""
|
msgid ""
|
||||||
"No books to catalog\n"
|
"No books to catalog\n"
|
||||||
"Check exclude tags"
|
"Check exclude tags"
|
||||||
@ -6484,48 +6513,48 @@ msgstr ""
|
|||||||
"没有书籍收入类目\n"
|
"没有书籍收入类目\n"
|
||||||
"检查不含标签"
|
"检查不含标签"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1628
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1665
|
||||||
msgid "Catalog generated."
|
msgid "Catalog generated."
|
||||||
msgstr "已经生成类目。"
|
msgstr "已经生成类目。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1631
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668
|
||||||
msgid "Export Catalog Directory"
|
msgid "Export Catalog Directory"
|
||||||
msgstr "输出类目目录"
|
msgstr "输出类目目录"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1632
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1669
|
||||||
msgid "Select destination for %s.%s"
|
msgid "Select destination for %s.%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683
|
||||||
msgid "Fetching news from "
|
msgid "Fetching news from "
|
||||||
msgstr "正在抓取新闻,来源于 "
|
msgstr "正在抓取新闻,来源于 "
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1697
|
||||||
msgid " fetched."
|
msgid " fetched."
|
||||||
msgstr " 已抓取。"
|
msgstr " 已抓取。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1711
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1748
|
||||||
msgid "Cannot convert"
|
msgid "Cannot convert"
|
||||||
msgstr "无法转换"
|
msgstr "无法转换"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1740
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1777
|
||||||
msgid "Starting conversion of %d book(s)"
|
msgid "Starting conversion of %d book(s)"
|
||||||
msgstr "开始转换 %d 本书"
|
msgstr "开始转换 %d 本书"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1856
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1909
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1946
|
||||||
msgid "Cannot view"
|
msgid "Cannot view"
|
||||||
msgstr "无法查看"
|
msgstr "无法查看"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1871
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1908
|
||||||
msgid "Cannot open folder"
|
msgid "Cannot open folder"
|
||||||
msgstr "无法打开文件夹"
|
msgstr "无法打开文件夹"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1930
|
||||||
msgid "Multiple Books Selected"
|
msgid "Multiple Books Selected"
|
||||||
msgstr "选定多本书籍"
|
msgstr "选定多本书籍"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1931
|
||||||
msgid ""
|
msgid ""
|
||||||
"You are attempting to open %d books. Opening too many books at once can be "
|
"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 "
|
"slow and have a negative effect on the responsiveness of your computer. Once "
|
||||||
@ -6533,74 +6562,74 @@ msgid ""
|
|||||||
"continue?"
|
"continue?"
|
||||||
msgstr "您正在试图打开 %d 本书籍。同时打开太多书籍可能会变慢,并对电脑响应速度有消极影响。一旦开始,需等待进程完成。是否继续?"
|
msgstr "您正在试图打开 %d 本书籍。同时打开太多书籍可能会变慢,并对电脑响应速度有消极影响。一旦开始,需等待进程完成。是否继续?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1910
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1947
|
||||||
msgid "%s has no available formats."
|
msgid "%s has no available formats."
|
||||||
msgstr "%s 无可用格式。"
|
msgstr "%s 无可用格式。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1951
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1988
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr "无法配置"
|
msgstr "无法配置"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989
|
||||||
msgid "Cannot configure while there are running jobs."
|
msgid "Cannot configure while there are running jobs."
|
||||||
msgstr "有正在运行任务时无法进行配置。"
|
msgstr "有正在运行任务时无法进行配置。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1995
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032
|
||||||
msgid "No detailed info available"
|
msgid "No detailed info available"
|
||||||
msgstr "无可用详细信息"
|
msgstr "无可用详细信息"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1996
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033
|
||||||
msgid "No detailed information is available for books on the device."
|
msgid "No detailed information is available for books on the device."
|
||||||
msgstr "设备上书籍没有详细信息可用。"
|
msgstr "设备上书籍没有详细信息可用。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2051
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2088
|
||||||
msgid "Error talking to device"
|
msgid "Error talking to device"
|
||||||
msgstr "设备通讯错误。"
|
msgstr "设备通讯错误。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2052
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2089
|
||||||
msgid ""
|
msgid ""
|
||||||
"There was a temporary error talking to the device. Please unplug and "
|
"There was a temporary error talking to the device. Please unplug and "
|
||||||
"reconnect the device and or reboot."
|
"reconnect the device and or reboot."
|
||||||
msgstr "与设备通讯出现临时性错误。请拔下再重新连接设备,或可能需要重启。"
|
msgstr "与设备通讯出现临时性错误。请拔下再重新连接设备,或可能需要重启。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2075
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2112
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2103
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2140
|
||||||
msgid "Conversion Error"
|
msgid "Conversion Error"
|
||||||
msgstr "转换错误"
|
msgstr "转换错误"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2076
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2113
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must "
|
"<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."
|
"first remove the DRM using third party tools."
|
||||||
msgstr "<p>无法转换:%s<p> 它是 <a href=\"%s\">DRM</a> 保护书籍。您需要首先使用第三方工具去除 DRM。"
|
msgstr "<p>无法转换:%s<p> 它是 <a href=\"%s\">DRM</a> 保护书籍。您需要首先使用第三方工具去除 DRM。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2089
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2126
|
||||||
msgid "Recipe Disabled"
|
msgid "Recipe Disabled"
|
||||||
msgstr "清单禁用"
|
msgstr "清单禁用"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2104
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2141
|
||||||
msgid "<b>Failed</b>"
|
msgid "<b>Failed</b>"
|
||||||
msgstr "<b>失败</b>"
|
msgstr "<b>失败</b>"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2132
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2169
|
||||||
msgid "Invalid library location"
|
msgid "Invalid library location"
|
||||||
msgstr "无效书库位置"
|
msgstr "无效书库位置"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2133
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2170
|
||||||
msgid "Could not access %s. Using %s as the library."
|
msgid "Could not access %s. Using %s as the library."
|
||||||
msgstr "无法访问 %s。使用 %s 作为书库。"
|
msgstr "无法访问 %s。使用 %s 作为书库。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2220
|
||||||
msgid ""
|
msgid ""
|
||||||
"is the result of the efforts of many volunteers from all over the world. If "
|
"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."
|
"you find it useful, please consider donating to support its development."
|
||||||
msgstr "是众多全球志愿者的努力结晶。如果您觉得它有用,请考虑捐助支持开发。"
|
msgstr "是众多全球志愿者的努力结晶。如果您觉得它有用,请考虑捐助支持开发。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2208
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2245
|
||||||
msgid "There are active jobs. Are you sure you want to quit?"
|
msgid "There are active jobs. Are you sure you want to quit?"
|
||||||
msgstr "仍有任务运行。您是否希望退出?"
|
msgstr "仍有任务运行。您是否希望退出?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2211
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2248
|
||||||
msgid ""
|
msgid ""
|
||||||
" is communicating with the device!<br>\n"
|
" is communicating with the device!<br>\n"
|
||||||
" Quitting may cause corruption on the device.<br>\n"
|
" Quitting may cause corruption on the device.<br>\n"
|
||||||
@ -6610,28 +6639,28 @@ msgstr ""
|
|||||||
" 退出可能导致设备损坏。<br>\n"
|
" 退出可能导致设备损坏。<br>\n"
|
||||||
" 确定退出么?"
|
" 确定退出么?"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2215
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2252
|
||||||
msgid "WARNING: Active jobs"
|
msgid "WARNING: Active jobs"
|
||||||
msgstr "警告:正在运行任务"
|
msgstr "警告:正在运行任务"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2267
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2304
|
||||||
msgid ""
|
msgid ""
|
||||||
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
"will keep running in the system tray. To close it, choose <b>Quit</b> in the "
|
||||||
"context menu of the system tray."
|
"context menu of the system tray."
|
||||||
msgstr "将在系统栏中继续运行。要关闭,在系统栏菜单中选择<b>退出</b>。"
|
msgstr "将在系统栏中继续运行。要关闭,在系统栏菜单中选择<b>退出</b>。"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2286
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2323
|
||||||
msgid ""
|
msgid ""
|
||||||
"<span style=\"color:red; font-weight:bold\">Latest version: <a "
|
"<span style=\"color:red; font-weight:bold\">Latest version: <a "
|
||||||
"href=\"%s\">%s</a></span>"
|
"href=\"%s\">%s</a></span>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"<span style=\"color:red; font-weight:bold\">最新版本:<a href=\"%s\">%s</a></span>"
|
"<span style=\"color:red; font-weight:bold\">最新版本:<a href=\"%s\">%s</a></span>"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2294
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2331
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
msgstr "有可用更新"
|
msgstr "有可用更新"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2295
|
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2332
|
||||||
msgid ""
|
msgid ""
|
||||||
"%s has been updated to version %s. See the <a href=\"http://calibre-"
|
"%s has been updated to version %s. See the <a href=\"http://calibre-"
|
||||||
"ebook.com/whats-new\">new features</a>. Visit the download page?"
|
"ebook.com/whats-new\">new features</a>. Visit the download page?"
|
||||||
@ -8168,14 +8197,18 @@ msgid "English (Yemen)"
|
|||||||
msgstr "英语(也门)"
|
msgstr "英语(也门)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108
|
||||||
|
msgid "English (Ireland)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109
|
||||||
msgid "German (AT)"
|
msgid "German (AT)"
|
||||||
msgstr "德语(奥地利)"
|
msgstr "德语(奥地利)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110
|
||||||
msgid "Dutch (NL)"
|
msgid "Dutch (NL)"
|
||||||
msgstr "荷兰语(荷兰)"
|
msgstr "荷兰语(荷兰)"
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110
|
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111
|
||||||
msgid "Dutch (BE)"
|
msgid "Dutch (BE)"
|
||||||
msgstr "荷兰语(比利时)"
|
msgstr "荷兰语(比利时)"
|
||||||
|
|
||||||
@ -8714,3 +8747,6 @@ msgstr "不下载 CSS 样式表。"
|
|||||||
|
|
||||||
#~ msgid "dummy option until real options are determined."
|
#~ msgid "dummy option until real options are determined."
|
||||||
#~ msgstr "虚假选项,在实际选项出现前使用。"
|
#~ msgstr "虚假选项,在实际选项出现前使用。"
|
||||||
|
|
||||||
|
#~ msgid "Masthead font:"
|
||||||
|
#~ msgstr "刊头字体:"
|
||||||
|
@ -8,13 +8,13 @@ msgstr ""
|
|||||||
"Project-Id-Version: calibre\n"
|
"Project-Id-Version: calibre\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
"POT-Creation-Date: 2010-03-12 07:36+0000\n"
|
||||||
"PO-Revision-Date: 2010-03-16 00:51+0000\n"
|
"PO-Revision-Date: 2010-03-17 02:15+0000\n"
|
||||||
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
|
||||||
"Language-Team: Chinese (traditional)\n"
|
"Language-Team: Chinese (traditional)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2010-03-16 04:45+0000\n"
|
"X-Launchpad-Export-Date: 2010-03-18 04:33+0000\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"X-Generator: Launchpad (build Unknown)\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user