merge from main branch
114
resources/calibre-portable.bat
Normal file
@ -0,0 +1,114 @@
|
||||
@echo OFF
|
||||
REM CalibreRun.bat
|
||||
REM ~~~~~~~~~~~~~~
|
||||
REM Batch File to start a Calibre configuration on Windows
|
||||
REM giving explicit control of the location of:
|
||||
REM - Calibe Program Files
|
||||
REM - Calibre Library Files
|
||||
REM - Calibre Config Files
|
||||
REM - Calibre Metadata database
|
||||
REM - Calibre Source files
|
||||
REM By setting the paths correctly it can be used to run:
|
||||
REM - A "portable calibre" off a USB stick.
|
||||
REM - A network installation with local metadata database
|
||||
REM (for performance) and books stored on a network share
|
||||
REM
|
||||
REM If trying to run off a USB stick then the following
|
||||
REM folder structure is recommended:
|
||||
REM - Calibre2 Location of program files
|
||||
REM - CalibreConfig Location of Configuration files
|
||||
REM - CalibreLibrary Location of Books and metadata
|
||||
|
||||
|
||||
REM -------------------------------------
|
||||
REM Set up Calibre Config folder
|
||||
REM -------------------------------------
|
||||
|
||||
If EXIST CalibreConfig SET CALIBRE_CONFIG_DIRECTORY=%cd%\CalibreConfig
|
||||
|
||||
|
||||
REM --------------------------------------------------------------
|
||||
REM Specify Location of ebooks
|
||||
REM
|
||||
REM Location where Book files are located
|
||||
REM Either set explicit path, or if running from a USB stick
|
||||
REM a relative path can be used to avoid need to know the
|
||||
REM drive letter of the USB stick.
|
||||
|
||||
REM Comment out any of the following that are not to be used
|
||||
REM --------------------------------------------------------------
|
||||
|
||||
SET CALIBRE_LIBRARY_DIRECTORY=U:\eBOOKS\CalibreLibrary
|
||||
IF EXIST CalibreLibrary SET CALIBRE_LIBRARY_DIRECTORY=%cd%\CalibreLibrary
|
||||
IF EXIST CalibreBooks SET CALIBRE_LIBRARY_DIRECTORY=%cd%\CalibreBooks
|
||||
|
||||
|
||||
REM --------------------------------------------------------------
|
||||
REM Specify Location of metadata database (optional)
|
||||
REM
|
||||
REM Location where the metadata.db file is located. If not set
|
||||
REM the same location as Books files will be assumed. This.
|
||||
REM options is used to get better performance when the Library is
|
||||
REM on a (slow) network drive. Putting the metadata.db file
|
||||
REM locally gives a big performance improvement.
|
||||
REM --------------------------------------------------------------
|
||||
|
||||
IF EXIST CalibreBooks SET SET CALIBRE_OVERRIDE_DATABASE_PATH=%cd%\CalibreBooks\metadata.db
|
||||
IF EXIST CalibreMetadata SET CALIBRE_OVERRIDE_DATABASE_PATH=%cd%\CalibreMetadata\metadata.db
|
||||
|
||||
|
||||
REM --------------------------------------------------------------
|
||||
REM Specify Location of source (optional)
|
||||
REM
|
||||
REM It is easy to run Calibre from source
|
||||
REM Just set the environment variable to where the source is located
|
||||
REM When running from source the GUI will have a '*' after the version.
|
||||
REM --------------------------------------------------------------
|
||||
|
||||
IF EXIST Calibre\src SET CALIBRE_DEVELOP_FROM=%cd%\Calibre\src
|
||||
|
||||
|
||||
REM --------------------------------------------------------------
|
||||
REM Specify Location of calibre binaries (optinal)
|
||||
REM
|
||||
REM To avoid needing Calibre to be set in the search path, ensure
|
||||
REM that Calibre Program Files is current directory when starting.
|
||||
REM The following test falls back to using search path .
|
||||
REM This folder can be populated by cpying the Calibre2 folder from
|
||||
REM an existing isntallation or by isntalling direct to here.
|
||||
REM --------------------------------------------------------------
|
||||
|
||||
IF EXIST Calibre2 CD Calibre2
|
||||
|
||||
|
||||
REM --------------------------------------------
|
||||
REM Display settings that will be used
|
||||
REM --------------------------------------------
|
||||
|
||||
echo PROGRAMS=%cd%
|
||||
echo SOURCE=%CALIBRE_DEVELOP_FROM%
|
||||
echo CONFIG=%CALIBRE_CONFIG_DIRECTORY%
|
||||
echo LIBRARY=%CALIBRE_LIBRARY_DIRECTORY%
|
||||
echo DATABASE=%CALIBRE_OVERRIDE_DATABASE_PATH%
|
||||
|
||||
REM The following gives a chance to check the settings before
|
||||
REM starting Calibre. It can be commented out if not wanted.
|
||||
|
||||
echo "Press CTRL-C if you do not want to continue"
|
||||
pause
|
||||
|
||||
|
||||
REM --------------------------------------------------------
|
||||
REM Start up the calibre program.
|
||||
REM
|
||||
REM The use of 'belownormal' priority helps keep the system
|
||||
REM responsive while Calibre is running. Within Calibre itself
|
||||
REM the backgound processes should be set to run with 'low' priority.
|
||||
|
||||
REM Using the START command starts up Calibre in a separate process.
|
||||
REM If used without /WAIT opotion launches Calibre and contines batch file.
|
||||
REM Use with /WAIT to wait until Calibre completes to run a task on exit
|
||||
REM --------------------------------------------------------
|
||||
|
||||
echo "Starting up Calibre"
|
||||
START /belownormal Calibre --with-library %CALIBRE_LIBRARY_DIRECTORY%
|
@ -44,7 +44,7 @@ bool_custom_columns_are_tristate = 'yes'
|
||||
# title within authors.
|
||||
sort_columns_at_startup = None
|
||||
|
||||
# Format to be used for publication date
|
||||
# Format to be used for publication date and the timestamp (date).
|
||||
# A string controlling how the publication date is displayed in the GUI
|
||||
# d the day as number without a leading zero (1 to 31)
|
||||
# dd the day as number with a leading zero (01 to 31)
|
||||
@ -59,8 +59,10 @@ sort_columns_at_startup = None
|
||||
# For example, given the date of 9 Jan 2010, the following formats show
|
||||
# MMM yyyy ==> Jan 2010 yyyy ==> 2010 dd MMM yyyy ==> 09 Jan 2010
|
||||
# MM/yyyy ==> 01/2010 d/M/yy ==> 9/1/10 yy ==> 10
|
||||
# default if not set: MMM yyyy
|
||||
# publication default if not set: MMM yyyy
|
||||
# timestamp default if not set: dd MMM yyyy
|
||||
gui_pubdate_display_format = 'MMM yyyy'
|
||||
gui_timestamp_display_format = 'dd MMM yyyy'
|
||||
|
||||
# Control title and series sorting in the library view.
|
||||
# If set to 'library_order', Leading articles such as The and A will be ignored.
|
||||
|
BIN
resources/images/news/consumerist.png
Normal file
After Width: | Height: | Size: 887 B |
BIN
resources/images/news/deadspin.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
resources/images/news/fleshbot.png
Normal file
After Width: | Height: | Size: 953 B |
BIN
resources/images/news/gawker.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
resources/images/news/io9.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
resources/images/news/jalopnik.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
resources/images/news/jezebel.png
Normal file
After Width: | Height: | Size: 233 B |
BIN
resources/images/news/kotaku.png
Normal file
After Width: | Height: | Size: 400 B |
BIN
resources/images/news/lifehacker.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
53
resources/recipes/consumerist.recipe
Normal file
@ -0,0 +1,53 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
consumerist.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Consumerist(BasicNewsRecipe):
|
||||
title = 'Consumerist'
|
||||
__author__ = 'NA'
|
||||
description = "Consumerist, Shoppers Bite Back."
|
||||
publisher = 'consumerist.com'
|
||||
category = 'news, consumer news, consumer rights'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://consumerist.com/css/images/footer_man.gif'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:x-large}
|
||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
#keep_only_tags = [dict(attrs={'class':['', 'category-breadcrumb']}),]
|
||||
remove_tags_before = dict(name='h2')
|
||||
|
||||
remove_tags = [
|
||||
#dict(name='iframe'),
|
||||
dict(name='div', attrs={'class':['e-comments', 'more-about', 'entry-tags']}),
|
||||
#dict(name='div', attrs={'id':['IEContainer', 'clickIncludeBox']}),
|
||||
#dict(name='ul', attrs={'class':'article-tools'}),
|
||||
#dict(name='ul', attrs={'class':'articleTools'}),
|
||||
]
|
||||
|
||||
remove_tags_after = dict(attrs={'class':'e-body'})
|
||||
|
||||
feeds = [(u'Articles', u'http://consumerist.com/index.xml')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
44
resources/recipes/deadspin.recipe
Normal file
@ -0,0 +1,44 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
deadspin.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Deadspin(BasicNewsRecipe):
|
||||
title = 'Deadspin'
|
||||
__author__ = 'NA'
|
||||
description = "Deadspin, Sports News without Access, Favor, or Discretion."
|
||||
publisher = 'deadspin.com'
|
||||
category = 'news, sports, meltdowns'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/deadspin.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/deadspin/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
44
resources/recipes/fleshbot.recipe
Normal file
@ -0,0 +1,44 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
fleshbot.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Fleshbot(BasicNewsRecipe):
|
||||
title = 'Fleshbot'
|
||||
__author__ = 'NA'
|
||||
description = "Fleshbot, Pure Filth."
|
||||
publisher = 'Fleshbot.com'
|
||||
category = 'news, sex, sex industry, celebs, nudes, adult, adult toys, sex toys'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.fleshbot.com/assets/base/img/thumbs140x140/fleshbot.com.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:x-large}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/fleshbot/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
44
resources/recipes/gawker.recipe
Normal file
@ -0,0 +1,44 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
gawker.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Gawker(BasicNewsRecipe):
|
||||
title = 'Gawker'
|
||||
__author__ = 'NA'
|
||||
description = "Gawker, Gossip from Manhattan and the Beltway to Hollywood and the Valley."
|
||||
publisher = 'gawker.com'
|
||||
category = 'news, gossip'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/gawker.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/gawker/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
46
resources/recipes/io9.recipe
Normal file
@ -0,0 +1,46 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
io9.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class i09(BasicNewsRecipe):
|
||||
title = 'io9'
|
||||
__author__ = 'NA'
|
||||
description = "io9, We Come From the Future."
|
||||
publisher = 'io9.com'
|
||||
category = 'news, science, education'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/io9.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
|
||||
'''
|
||||
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/io9/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
45
resources/recipes/jalopnik.recipe
Normal file
@ -0,0 +1,45 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
jalopnik.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Jalopnik(BasicNewsRecipe):
|
||||
title = 'Jalopnik'
|
||||
__author__ = 'NA'
|
||||
description = "Jalopnik, Obsessed With The Cult of Cars."
|
||||
publisher = 'jalopnik.com'
|
||||
category = 'news, cars, spyshots'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/jalopnik.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/jalopnik/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
45
resources/recipes/jezebel.recipe
Normal file
@ -0,0 +1,45 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
jezebel.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Jezebel(BasicNewsRecipe):
|
||||
title = 'Jezebel'
|
||||
__author__ = 'NA'
|
||||
description = "Jezebel, Celebrity, Sex, Fashion for Women. Without Airbrushing."
|
||||
publisher = 'jezebel.com'
|
||||
category = 'news, cars, spyshots'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/jezebel.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/jezebel/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
44
resources/recipes/kotaku.recipe
Normal file
@ -0,0 +1,44 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
kotaku.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Kotaku(BasicNewsRecipe):
|
||||
title = 'Kotaku'
|
||||
__author__ = 'NA'
|
||||
description = "Kotaku, the Gamer's Guide."
|
||||
publisher = 'kotaku.com'
|
||||
category = 'news, games, Internet, xbox 360, playstation 3, tips and tricks'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/kotaku.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/kotaku/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
45
resources/recipes/lifehacker.recipe
Normal file
@ -0,0 +1,45 @@
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, NA'
|
||||
'''
|
||||
lifehacker.com
|
||||
'''
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
class Lifehacker(BasicNewsRecipe):
|
||||
title = 'Lifehacker'
|
||||
__author__ = 'NA'
|
||||
description = "Computers make us more productive. Yeah, right. Lifehacker recommends the software downloads and web sites that actually save time. Don't live to geek; geek to live."
|
||||
publisher = 'lifehacker.com'
|
||||
category = 'news, IT, Internet, gadgets, tips and tricks, howto, diy'
|
||||
oldest_article = 2
|
||||
max_articles_per_feed = 100
|
||||
no_stylesheets = True
|
||||
encoding = 'utf-8'
|
||||
use_embedded_content = False
|
||||
language = 'en'
|
||||
masthead_url = 'http://cache.gawkerassets.com/assets/lifehacker.com/img/logo.png'
|
||||
extra_css = '''
|
||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||
img{margin-bottom: 1em}
|
||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||
h2{font-family :Arial,Helvetica,sans-serif; font-size:x-small}
|
||||
'''
|
||||
conversion_options = {
|
||||
'comment' : description
|
||||
, 'tags' : category
|
||||
, 'publisher' : publisher
|
||||
, 'language' : language
|
||||
}
|
||||
|
||||
remove_attributes = ['width','height']
|
||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
||||
remove_tags_before = dict(name='h1')
|
||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
||||
|
||||
feeds = [(u'Articles', u'http://feeds.gawker.com/lifehacker/full')]
|
||||
|
||||
def preprocess_html(self, soup):
|
||||
return self.adeify_images(soup)
|
||||
|
@ -373,6 +373,7 @@ class Py2App(object):
|
||||
CFBundleName=APPNAME,
|
||||
CFBundleIdentifier='net.kovidgoyal.calibre',
|
||||
CFBundleVersion=VERSION,
|
||||
CFBundleShortVersionString=VERSION,
|
||||
CFBundlePackageType='APPL',
|
||||
CFBundleSignature='????',
|
||||
CFBundleExecutable='calibre',
|
||||
|
@ -8,7 +8,7 @@ from calibre.constants import numeric_version
|
||||
from calibre.ptempfile import PersistentTemporaryFile
|
||||
|
||||
|
||||
class Plugin(object):
|
||||
class Plugin(object): # {{{
|
||||
'''
|
||||
A calibre plugin. Useful members include:
|
||||
|
||||
@ -147,9 +147,9 @@ class Plugin(object):
|
||||
if hasattr(it, '__exit__'):
|
||||
it.__exit__(*args)
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
class FileTypePlugin(Plugin):
|
||||
class FileTypePlugin(Plugin): # {{{
|
||||
'''
|
||||
A plugin that is associated with a particular set of file types.
|
||||
'''
|
||||
@ -191,7 +191,9 @@ class FileTypePlugin(Plugin):
|
||||
# Default implementation does nothing
|
||||
return path_to_ebook
|
||||
|
||||
class MetadataReaderPlugin(Plugin):
|
||||
# }}}
|
||||
|
||||
class MetadataReaderPlugin(Plugin): # {{{
|
||||
'''
|
||||
A plugin that implements reading metadata from a set of file types.
|
||||
'''
|
||||
@ -219,8 +221,9 @@ class MetadataReaderPlugin(Plugin):
|
||||
:return: A :class:`calibre.ebooks.metadata.MetaInformation` object
|
||||
'''
|
||||
return None
|
||||
# }}}
|
||||
|
||||
class MetadataWriterPlugin(Plugin):
|
||||
class MetadataWriterPlugin(Plugin): # {{{
|
||||
'''
|
||||
A plugin that implements reading metadata from a set of file types.
|
||||
'''
|
||||
@ -249,7 +252,9 @@ class MetadataWriterPlugin(Plugin):
|
||||
'''
|
||||
pass
|
||||
|
||||
class CatalogPlugin(Plugin):
|
||||
# }}}
|
||||
|
||||
class CatalogPlugin(Plugin): # {{{
|
||||
'''
|
||||
A plugin that implements a catalog generator.
|
||||
'''
|
||||
@ -352,7 +357,9 @@ class CatalogPlugin(Plugin):
|
||||
raise NotImplementedError('CatalogPlugin.generate_catalog() default '
|
||||
'method, should be overridden in subclass')
|
||||
|
||||
class InterfaceActionBase(Plugin):
|
||||
# }}}
|
||||
|
||||
class InterfaceActionBase(Plugin): # {{{
|
||||
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
author = 'Kovid Goyal'
|
||||
@ -360,3 +367,44 @@ class InterfaceActionBase(Plugin):
|
||||
can_be_disabled = False
|
||||
|
||||
actual_plugin = None
|
||||
# }}}
|
||||
|
||||
class PreferencesPlugin(Plugin): # {{{
|
||||
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
author = 'Kovid Goyal'
|
||||
type = _('Preferences')
|
||||
can_be_disabled = False
|
||||
|
||||
#: Import path to module that contains a class named ConfigWidget
|
||||
#: which implements the ConfigWidgetInterface. Used by
|
||||
#: :meth:`create_widget`.
|
||||
config_widget = None
|
||||
|
||||
#: Where in the list of categories the :attr:`category` of this plugin should be.
|
||||
category_order = 100
|
||||
|
||||
#: Where in the list of names in a category, the :attr:`gui_name` of this
|
||||
#: plugin should be
|
||||
name_order = 100
|
||||
|
||||
#: The category this plugin should be in
|
||||
category = None
|
||||
|
||||
#: The name displayed to the user for this plugin
|
||||
gui_name = None
|
||||
|
||||
def create_widget(self, parent=None):
|
||||
'''
|
||||
Create and return the actual Qt widget used for setting this group of
|
||||
preferences. The widget must implement the ConfigWidgetInterface.
|
||||
|
||||
The default implementation uses :attr:`config_widget` to instantiate
|
||||
the widget.
|
||||
'''
|
||||
base = __import__(self.config_widget, fromlist=[1])
|
||||
widget = base.ConfigWidget(parent)
|
||||
return widget
|
||||
|
||||
# }}}
|
||||
|
||||
|
@ -7,7 +7,8 @@ from contextlib import closing
|
||||
|
||||
from calibre.customize import Plugin, CatalogPlugin, FileTypePlugin, \
|
||||
MetadataReaderPlugin, MetadataWriterPlugin, \
|
||||
InterfaceActionBase as InterfaceAction
|
||||
InterfaceActionBase as InterfaceAction, \
|
||||
PreferencesPlugin
|
||||
from calibre.customize.conversion import InputFormatPlugin, OutputFormatPlugin
|
||||
from calibre.customize.profiles import InputProfile, OutputProfile
|
||||
from calibre.customize.builtins import plugins as builtin_plugins
|
||||
@ -257,6 +258,17 @@ def interface_actions():
|
||||
yield plugin
|
||||
# }}}
|
||||
|
||||
# Preferences Plugins # {{{
|
||||
|
||||
def preferences_plugins():
|
||||
customization = config['plugin_customization']
|
||||
for plugin in _initialized_plugins:
|
||||
if isinstance(plugin, PreferencesPlugin):
|
||||
if not is_disabled(plugin):
|
||||
plugin.site_customization = customization.get(plugin.name, '')
|
||||
yield plugin
|
||||
# }}}
|
||||
|
||||
# Metadata read/write {{{
|
||||
_metadata_readers = {}
|
||||
_metadata_writers = {}
|
||||
|
@ -20,7 +20,7 @@ class ANDROID(USBMS):
|
||||
VENDOR_ID = {
|
||||
# HTC
|
||||
0x0bb4 : { 0x0c02 : [0x100, 0x0227], 0x0c01 : [0x100, 0x0227], 0x0ff9
|
||||
: [0x0100, 0x0227, 0x0226]},
|
||||
: [0x0100, 0x0227, 0x0226], 0x0c87: [0x0100, 0x0227, 0x0226]},
|
||||
|
||||
# Motorola
|
||||
0x22b8 : { 0x41d9 : [0x216], 0x2d67 : [0x100], 0x41db : [0x216],
|
||||
|
@ -16,7 +16,7 @@ class FOLDER_DEVICE_FOR_CONFIG(USBMS):
|
||||
description = _('Use an arbitrary folder as a device.')
|
||||
author = 'John Schember/Charles Haley'
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
FORMATS = ['epub', 'fb2', 'mobi', 'lrf', 'tcr', 'pmlz', 'lit', 'rtf', 'rb', 'pdf', 'oeb', 'txt', 'pdb']
|
||||
FORMATS = ['epub', 'fb2', 'mobi', 'azw', 'lrf', 'tcr', 'pmlz', 'lit', 'rtf', 'rb', 'pdf', 'oeb', 'txt', 'pdb']
|
||||
VENDOR_ID = 0xffff
|
||||
PRODUCT_ID = 0xffff
|
||||
BCD = 0xffff
|
||||
@ -30,7 +30,7 @@ class FOLDER_DEVICE(USBMS):
|
||||
description = _('Use an arbitrary folder as a device.')
|
||||
author = 'John Schember/Charles Haley'
|
||||
supported_platforms = ['windows', 'osx', 'linux']
|
||||
FORMATS = ['epub', 'fb2', 'mobi', 'lrf', 'tcr', 'pmlz', 'lit', 'rtf', 'rb', 'pdf', 'oeb', 'txt', 'pdb']
|
||||
FORMATS = ['epub', 'fb2', 'mobi', 'azw', 'lrf', 'tcr', 'pmlz', 'lit', 'rtf', 'rb', 'pdf', 'oeb', 'txt', 'pdb']
|
||||
|
||||
VENDOR_ID = 0xffff
|
||||
PRODUCT_ID = 0xffff
|
||||
|
@ -354,19 +354,22 @@ class XMLCache(object):
|
||||
root = self.record_roots[i]
|
||||
lpath_map = self.build_lpath_map(root)
|
||||
gtz_count = ltz_count = 0
|
||||
use_tz_var = False
|
||||
for book in booklist:
|
||||
path = os.path.join(self.prefixes[i], *(book.lpath.split('/')))
|
||||
record = lpath_map.get(book.lpath, None)
|
||||
if record is None:
|
||||
record = self.create_text_record(root, i, book.lpath)
|
||||
(gtz_count, ltz_count) = self.update_text_record(record, book,
|
||||
path, i, gtz_count, ltz_count)
|
||||
(gtz_count, ltz_count, use_tz_var) = \
|
||||
self.update_text_record(record, book, path, i,
|
||||
gtz_count, ltz_count, use_tz_var)
|
||||
# Ensure the collections in the XML database are recorded for
|
||||
# this book
|
||||
if book.device_collections is None:
|
||||
book.device_collections = []
|
||||
book.device_collections = playlist_map.get(book.lpath, [])
|
||||
debug_print('Timezone votes: %d GMT, %d LTZ'%(gtz_count, ltz_count))
|
||||
debug_print('Timezone votes: %d GMT, %d LTZ, use_tz_var='%
|
||||
(gtz_count, ltz_count, use_tz_var))
|
||||
self.update_playlists(i, root, booklist, collections_attributes)
|
||||
# Update the device collections because update playlist could have added
|
||||
# some new ones.
|
||||
@ -464,21 +467,27 @@ class XMLCache(object):
|
||||
root.append(ans)
|
||||
return ans
|
||||
|
||||
def update_text_record(self, record, book, path, bl_index, gtz_count, ltz_count):
|
||||
def update_text_record(self, record, book, path, bl_index,
|
||||
gtz_count, ltz_count, use_tz_var):
|
||||
'''
|
||||
Update the Sony database from the book. This is done if the timestamp in
|
||||
the db differs from the timestamp on the file.
|
||||
'''
|
||||
|
||||
# It seems that a Sony device can sometimes know what timezone it is in,
|
||||
# and apparently converts the dates to GMT when it writes them to the
|
||||
# db. Unfortunately, we can't tell when it does this, so we use a
|
||||
# horrible heuristic. First, set dates only for new books, trying to
|
||||
# avoid upsetting the sony. Use the timezone determined through the
|
||||
# voting described next. Second, voting: if a book is not new, compare
|
||||
# its Sony DB date against localtime and gmtime. Count the matches. When
|
||||
# we must set a date, use the one with the most matches. Use localtime
|
||||
# if the case of a tie, and hope it is right.
|
||||
# and apparently converts the dates to GMT when it writes them to its
|
||||
# DB. We can detect that a device is timezone-aware because there is a
|
||||
# 'tz' variable in the Sony DB, which we can set to "0" to tell the
|
||||
# device to ignore its own timezone when comparing mtime to the date in
|
||||
# the DB.
|
||||
|
||||
# Unfortunately, if there is no tz variable in the DB, then we can't
|
||||
# tell when the device applies a timezone conversion. We use a horrible
|
||||
# heuristic to work around this problem. First, set dates only for new
|
||||
# books, trying to avoid upsetting the sony. Second, voting: if a book
|
||||
# is not new, compare its Sony DB date against localtime and gmtime.
|
||||
# Count the matches. When we must set a date, use the one with the most
|
||||
# matches. Use localtime if the case of a tie, and hope it is right.
|
||||
timestamp = os.path.getmtime(path)
|
||||
rec_date = record.get('date', None)
|
||||
|
||||
@ -489,20 +498,25 @@ class XMLCache(object):
|
||||
return x
|
||||
|
||||
if not getattr(book, '_new_book', False): # book is not new
|
||||
if strftime(timestamp, zone=time.gmtime) == rec_date:
|
||||
gtz_count += 1
|
||||
elif strftime(timestamp, zone=time.localtime) == rec_date:
|
||||
ltz_count += 1
|
||||
if record.get('tz', None) is not None:
|
||||
use_tz_var = True
|
||||
if strftime(timestamp, zone=time.gmtime) == rec_date:
|
||||
gtz_count += 1
|
||||
elif strftime(timestamp, zone=time.localtime) == rec_date:
|
||||
ltz_count += 1
|
||||
else: # book is new. Set the time using the current votes
|
||||
if ltz_count >= gtz_count:
|
||||
if use_tz_var:
|
||||
tz = time.localtime
|
||||
debug_print("Using localtime TZ for new book", book.lpath)
|
||||
record.set('tz', '0')
|
||||
debug_print("Use localtime TZ and tz='0' for new book", book.lpath)
|
||||
elif ltz_count >= gtz_count:
|
||||
tz = time.localtime
|
||||
debug_print("Use localtime TZ for new book", book.lpath)
|
||||
else:
|
||||
tz = time.gmtime
|
||||
debug_print("Using GMT TZ for new book", book.lpath)
|
||||
debug_print("Use GMT TZ for new book", book.lpath)
|
||||
date = strftime(timestamp, zone=tz)
|
||||
record.set('date', clean(date))
|
||||
|
||||
record.set('size', clean(str(os.stat(path).st_size)))
|
||||
title = book.title if book.title else _('Unknown')
|
||||
record.set('title', clean(title))
|
||||
@ -532,7 +546,7 @@ class XMLCache(object):
|
||||
if 'id' not in record.attrib:
|
||||
num = self.max_id(record.getroottree().getroot())
|
||||
record.set('id', str(num+1))
|
||||
return (gtz_count, ltz_count)
|
||||
return (gtz_count, ltz_count, use_tz_var)
|
||||
# }}}
|
||||
|
||||
# Writing the XML files {{{
|
||||
|
@ -491,7 +491,7 @@ class HTMLInput(InputFormatPlugin):
|
||||
return (None, raw)
|
||||
|
||||
def preprocess_html(self, html):
|
||||
print "********* Preprocessing HTML *********\n"
|
||||
self.log("********* Preprocessing HTML *********")
|
||||
# Detect Chapters to match the xpath in the GUI
|
||||
chapdetect = re.compile(r'(?=</?(br|p|span))(</?(br|p|span)[^>]*>)?\s*(?P<chap>(<(i|b)><(i|b)>|<(i|b)>)?(.?Chapter|Epilogue|Prologue|Book|Part|Dedication)\s*([\d\w-]+(\s\w+)?)?(</(i|b)></(i|b)>|</(i|b)>)?)(</?(p|br|span)[^>]*>)', re.IGNORECASE)
|
||||
html = chapdetect.sub('<h2>'+'\g<chap>'+'</h2>\n', html)
|
||||
@ -500,7 +500,7 @@ class HTMLInput(InputFormatPlugin):
|
||||
# Insert extra line feeds so the line length regex functions properly
|
||||
html = re.sub(r"</p>", "</p>\n", html)
|
||||
length = line_length('html', html, 0.4)
|
||||
print "*** Median length is " + str(length) + " ***\n"
|
||||
self.log.debug("*** Median length is " + str(length) + " ***")
|
||||
unwrap = re.compile(r"(?<=.{%i}[a-z,;:\IA])\s*</(span|p|div)>\s*(</(p|span|div)>)?\s*(?P<up2threeblanks><(p|span|div)[^>]*>\s*(<(p|span|div)[^>]*>\s*</(span|p|div)>\s*)</(span|p|div)>\s*){0,3}\s*<(span|div|p)[^>]*>\s*(<(span|div|p)[^>]*>)?\s*" % length, re.UNICODE)
|
||||
if length < 150:
|
||||
html = unwrap.sub(' ', html)
|
||||
|
@ -22,6 +22,7 @@ class LITInput(InputFormatPlugin):
|
||||
accelerators):
|
||||
from calibre.ebooks.lit.reader import LitReader
|
||||
from calibre.ebooks.conversion.plumber import create_oebbook
|
||||
self.log = log
|
||||
return create_oebbook(log, stream, options, self, reader=LitReader)
|
||||
|
||||
def postprocess_book(self, oeb, opts, log):
|
||||
@ -54,7 +55,7 @@ class LITInput(InputFormatPlugin):
|
||||
|
||||
|
||||
def preprocess_html(self, html):
|
||||
print "********* Preprocessing HTML *********\n"
|
||||
self.log("********* Preprocessing HTML *********")
|
||||
# Detect Chapters to match the xpath in the GUI
|
||||
chapdetect = re.compile(r'(?=</?(br|p|span))(</?(br|p|span)[^>]*>)?\s*(?P<chap>(<(i|b)><(i|b)>|<(i|b)>)?(.?Chapter|Epilogue|Prologue|Book|Part|Dedication)\s*([\d\w-]+(\s\w+)?)?(</(i|b)></(i|b)>|</(i|b)>)?)(</?(p|br|span)[^>]*>)', re.IGNORECASE)
|
||||
html = chapdetect.sub('<h2>'+'\g<chap>'+'</h2>\n', html)
|
||||
@ -63,7 +64,7 @@ class LITInput(InputFormatPlugin):
|
||||
# Insert extra line feeds so the line length regex functions properly
|
||||
html = re.sub(r"</p>", "</p>\n", html)
|
||||
length = line_length('html', html, 0.4)
|
||||
print "*** Median length is " + str(length) + " ***\n"
|
||||
self.log("*** Median length is " + str(length) + " ***")
|
||||
unwrap = re.compile(r"(?<=.{%i}[a-z,;:\IA])\s*</(span|p|div)>\s*(</(p|span|div)>)?\s*(?P<up2threeblanks><(p|span|div)[^>]*>\s*(<(p|span|div)[^>]*>\s*</(span|p|div)>\s*)</(span|p|div)>\s*){0,3}\s*<(span|div|p)[^>]*>\s*(<(span|div|p)[^>]*>)?\s*" % length, re.UNICODE)
|
||||
if length < 150:
|
||||
html = unwrap.sub(' ', html)
|
||||
|
@ -46,8 +46,12 @@ def authors_to_sort_string(authors):
|
||||
return ' & '.join(map(author_to_author_sort, authors))
|
||||
|
||||
_title_pat = re.compile('^(A|The|An)\s+', re.IGNORECASE)
|
||||
_ignore_starts = u'\'"'+u''.join(unichr(x) for x in range(0x2018, 0x201e)+[0x2032, 0x2033])
|
||||
|
||||
def title_sort(title):
|
||||
title = title.strip()
|
||||
if title and title[0] in _ignore_starts:
|
||||
title = title[1:]
|
||||
match = _title_pat.search(title)
|
||||
if match:
|
||||
prep = match.group(1)
|
||||
|
@ -168,12 +168,18 @@ class Stylizer(object):
|
||||
item.href))
|
||||
continue
|
||||
stylesheets.append(sitem.data)
|
||||
for x in (extra_css, user_css):
|
||||
csses = {'extra_css':extra_css, 'user_css':user_css}
|
||||
for w, x in csses.items():
|
||||
if x:
|
||||
text = XHTML_CSS_NAMESPACE + x
|
||||
stylesheet = parser.parseString(text, href=cssname)
|
||||
stylesheet.namespaces['h'] = XHTML_NS
|
||||
stylesheets.append(stylesheet)
|
||||
try:
|
||||
text = XHTML_CSS_NAMESPACE + x
|
||||
stylesheet = parser.parseString(text, href=cssname)
|
||||
stylesheet.namespaces['h'] = XHTML_NS
|
||||
stylesheets.append(stylesheet)
|
||||
except:
|
||||
self.logger.exception('Failed to parse %s, ignoring.'%w)
|
||||
self.logger.debug('Bad css: ')
|
||||
self.logger.debug(x)
|
||||
rules = []
|
||||
index = 0
|
||||
self.stylesheets = set()
|
||||
|
@ -229,13 +229,13 @@ class RTFInput(InputFormatPlugin):
|
||||
res = transform.tostring(result)
|
||||
res = res[:100].replace('xmlns:html', 'xmlns') + res[100:]
|
||||
if self.options.preprocess_html:
|
||||
print "********* Preprocessing HTML *********\n"
|
||||
self.log("********* Preprocessing HTML *********")
|
||||
# Detect Chapters to match the xpath in the GUI
|
||||
chapdetect = re.compile(r'<p[^>]*>\s*<span[^>]*>\s*(?P<chap>(<(i|b)>(<(i|b)>)?)?(.?Chapter|Epilogue|Prologue|Book|Part|Dedication)\s*([\d\w-]+(\s\w+)?)?(</(i|b)>(<(/i|b)>)?)?)\s*</span>\s*</p>', re.IGNORECASE)
|
||||
res = chapdetect.sub('<h2>'+'\g<chap>'+'</h2>\n', res)
|
||||
# Unwrap lines using punctation if the median length of all lines is less than 150
|
||||
length = line_length('html', res, 0.4)
|
||||
print "*** Median length is " + str(length) + " ***\n"
|
||||
self.log("*** Median length is " + str(length) + " ***")
|
||||
unwrap = re.compile(r"(?<=.{%i}[a-z,;:\IA])\s*</span>\s*</p>\s*(?P<up2threeblanks><p[^>]*>\s*(<span[^>]*>\s*</span>\s*)</p>\s*){0,3}\s*<p[^>]*>\s*<span[^>]*>\s*" % length, re.UNICODE)
|
||||
if length < 150:
|
||||
res = unwrap.sub(' ', res)
|
||||
|
@ -19,8 +19,35 @@ from calibre.ebooks.metadata.meta import get_metadata, metadata_from_formats
|
||||
from calibre.ebooks.metadata import MetaInformation
|
||||
from calibre.utils.date import UNDEFINED_DATE
|
||||
|
||||
# Setup gprefs {{{
|
||||
gprefs = JSONConfig('gui')
|
||||
|
||||
gprefs.defaults['action-layout-toolbar'] = (
|
||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
|
||||
'Choose Library', 'Donate', None, 'Fetch News', 'Save To Disk',
|
||||
'Connect Share', None, 'Remove Books', None, 'Help', 'Preferences',
|
||||
)
|
||||
|
||||
gprefs.defaults['action-layout-toolbar-device'] = (
|
||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View',
|
||||
'Send To Device', None, None, 'Location Manager', None, None,
|
||||
'Fetch News', 'Save To Disk', 'Connect Share', None,
|
||||
'Remove Books', None, 'Help', 'Preferences',
|
||||
)
|
||||
|
||||
gprefs.defaults['action-layout-context-menu'] = (
|
||||
'Edit Metadata', 'Send To Device', 'Save To Disk',
|
||||
'Connect Share', 'Copy To Library', None,
|
||||
'Convert Books', 'View', 'Open Folder', 'Show Book Details',
|
||||
'Similar Books', None, 'Remove Books',
|
||||
)
|
||||
|
||||
gprefs.defaults['action-layout-context-menu-device'] = (
|
||||
'View', 'Save To Disk', None, 'Remove Books', None,
|
||||
'Add To Library', 'Edit Collections',
|
||||
)
|
||||
# }}}
|
||||
|
||||
NONE = QVariant() #: Null value to return from the data function of item models
|
||||
UNDEFINED_QDATE = QDate(UNDEFINED_DATE)
|
||||
|
||||
@ -66,8 +93,6 @@ def _config():
|
||||
c.add_opt('default_send_to_device_action', default=None,
|
||||
help=_('Default action to perform when send to device button is '
|
||||
'clicked'))
|
||||
c.add_opt('show_donate_button', default=True,
|
||||
help='Show donation button')
|
||||
c.add_opt('asked_library_thing_password', default=False,
|
||||
help='Asked library thing password at least once.')
|
||||
c.add_opt('search_as_you_type', default=True,
|
||||
|
@ -60,6 +60,17 @@ class InterfaceAction(QObject):
|
||||
#: shortcut must be a translated string if not None
|
||||
action_spec = ('text', 'icon', None, None)
|
||||
|
||||
#: Set of locations to which this action must not be added.
|
||||
#: See :attr:`all_locations` for a list of possible locations
|
||||
dont_add_to = frozenset([])
|
||||
|
||||
#: Set of locations from which this action must not be removed.
|
||||
#: See :attr:`all_locations` for a list of possible locations
|
||||
dont_remove_from = frozenset([])
|
||||
|
||||
all_locations = frozenset(['toolbar', 'toolbar-device', 'context-menu',
|
||||
'context-menu-device'])
|
||||
|
||||
def __init__(self, parent, site_customization):
|
||||
QObject.__init__(self, parent)
|
||||
self.setObjectName(self.name)
|
||||
|
@ -22,7 +22,9 @@ from calibre.gui2.actions import InterfaceAction
|
||||
class AddAction(InterfaceAction):
|
||||
|
||||
name = 'Add Books'
|
||||
action_spec = (_('Add books'), 'add_book.svg', None, _('A'))
|
||||
action_spec = (_('Add books'), 'add_book.svg',
|
||||
_('Add books to the calibre library/device from files on your computer')
|
||||
, _('A'))
|
||||
|
||||
def genesis(self):
|
||||
self._add_filesystem_book = self.Dispatcher(self.__add_filesystem_book)
|
||||
|
@ -10,7 +10,9 @@ from calibre.gui2.actions import InterfaceAction
|
||||
class AddToLibraryAction(InterfaceAction):
|
||||
|
||||
name = 'Add To Library'
|
||||
action_spec = (_('Add books to library'), 'add_book.svg', None, None)
|
||||
action_spec = (_('Add books to library'), 'add_book.svg',
|
||||
_('Add books to your calibre library from the connected device'), None)
|
||||
dont_add_to = frozenset(['toolbar', 'context-menu'])
|
||||
|
||||
def location_selected(self, loc):
|
||||
enabled = loc != 'library'
|
||||
|
@ -18,6 +18,7 @@ class GenerateCatalogAction(InterfaceAction):
|
||||
|
||||
name = 'Generate Catalog'
|
||||
action_spec = (_('Create catalog of books in your calibre library'), None, None, None)
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def generate_catalog(self):
|
||||
rows = self.gui.library_view.selectionModel().selectedRows()
|
||||
|
@ -8,12 +8,12 @@ __docformat__ = 'restructuredtext en'
|
||||
import os
|
||||
from functools import partial
|
||||
|
||||
from PyQt4.Qt import QMenu
|
||||
from PyQt4.Qt import QMenu, Qt
|
||||
|
||||
from calibre import isbytestring
|
||||
from calibre.constants import filesystem_encoding
|
||||
from calibre.utils.config import prefs
|
||||
from calibre.gui2 import gprefs, warning_dialog
|
||||
from calibre.gui2 import gprefs, warning_dialog, Dispatcher
|
||||
from calibre.gui2.actions import InterfaceAction
|
||||
|
||||
class LibraryUsageStats(object):
|
||||
@ -72,15 +72,18 @@ class ChooseLibraryAction(InterfaceAction):
|
||||
name = 'Choose Library'
|
||||
action_spec = (_('%d books'), 'lt.png',
|
||||
_('Choose calibre library to work with'), None)
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def genesis(self):
|
||||
self.count_changed(0)
|
||||
self.qaction.triggered.connect(self.choose_library)
|
||||
self.qaction.triggered.connect(self.choose_library,
|
||||
type=Qt.QueuedConnection)
|
||||
|
||||
self.stats = LibraryUsageStats()
|
||||
self.create_action(spec=(_('Switch to library...'), 'lt.png', None,
|
||||
None), attr='action_choose')
|
||||
self.action_choose.triggered.connect(self.choose_library)
|
||||
self.action_choose.triggered.connect(self.choose_library,
|
||||
type=Qt.QueuedConnection)
|
||||
self.choose_menu = QMenu(self.gui)
|
||||
self.choose_menu.addAction(self.action_choose)
|
||||
self.qaction.setMenu(self.choose_menu)
|
||||
@ -94,7 +97,8 @@ class ChooseLibraryAction(InterfaceAction):
|
||||
attr='switch_action%d'%i)
|
||||
self.switch_actions.append(ac)
|
||||
ac.setVisible(False)
|
||||
ac.triggered.connect(partial(self.qs_requested, i))
|
||||
ac.triggered.connect(partial(self.qs_requested, i),
|
||||
type=Qt.QueuedConnection)
|
||||
self.choose_menu.addAction(ac)
|
||||
|
||||
def library_name(self):
|
||||
@ -120,8 +124,8 @@ class ChooseLibraryAction(InterfaceAction):
|
||||
self.quick_menu.clear()
|
||||
self.qs_locations = [i[1] for i in locations]
|
||||
for name, loc in locations:
|
||||
self.quick_menu.addAction(name, partial(self.switch_requested,
|
||||
loc))
|
||||
self.quick_menu.addAction(name, Dispatcher(partial(self.switch_requested,
|
||||
loc)))
|
||||
|
||||
for i, x in enumerate(locations[:len(self.switch_actions)]):
|
||||
name, loc = x
|
||||
|
@ -20,6 +20,7 @@ class ConvertAction(InterfaceAction):
|
||||
|
||||
name = 'Convert Books'
|
||||
action_spec = (_('Convert books'), 'convert.svg', None, _('C'))
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def genesis(self):
|
||||
cm = QMenu()
|
||||
|
@ -63,6 +63,7 @@ class CopyToLibraryAction(InterfaceAction):
|
||||
action_spec = (_('Copy to library'), 'lt.png',
|
||||
_('Copy selected books to the specified library'), None)
|
||||
popup_type = QToolButton.InstantPopup
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def genesis(self):
|
||||
self.menu = QMenu(self.gui)
|
||||
|
@ -19,6 +19,7 @@ class ShareConnMenu(QMenu): # {{{
|
||||
connect_to_itunes = pyqtSignal()
|
||||
config_email = pyqtSignal()
|
||||
toggle_server = pyqtSignal()
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def __init__(self, parent=None):
|
||||
QMenu.__init__(self, parent)
|
||||
@ -95,6 +96,8 @@ class SendToDeviceAction(InterfaceAction):
|
||||
|
||||
name = 'Send To Device'
|
||||
action_spec = (_('Send to device'), 'sync.svg', None, _('D'))
|
||||
dont_remove_from = frozenset(['toolbar-device'])
|
||||
dont_add_to = frozenset(['toolbar', 'context-menu'])
|
||||
|
||||
def genesis(self):
|
||||
self.qaction.triggered.connect(self.do_sync)
|
||||
|
@ -10,7 +10,9 @@ from calibre.gui2.actions import InterfaceAction
|
||||
class EditCollectionsAction(InterfaceAction):
|
||||
|
||||
name = 'Edit Collections'
|
||||
action_spec = (_('Manage collections'), None, None, None)
|
||||
action_spec = (_('Manage collections'), None,
|
||||
_('Manage the collections on this device'), None)
|
||||
dont_add_to = frozenset(['toolbar', 'context-menu'])
|
||||
|
||||
def location_selected(self, loc):
|
||||
enabled = loc != 'library'
|
||||
|
@ -13,6 +13,7 @@ class OpenFolderAction(InterfaceAction):
|
||||
name = 'Open Folder'
|
||||
action_spec = (_('Open containing folder'), 'document_open.svg', None,
|
||||
_('O'))
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def genesis(self):
|
||||
self.qaction.triggered.connect(self.gui.iactions['View'].view_folder)
|
||||
|
@ -15,6 +15,7 @@ class PreferencesAction(InterfaceAction):
|
||||
|
||||
name = 'Preferences'
|
||||
action_spec = (_('Preferences'), 'config.svg', None, _('Ctrl+P'))
|
||||
dont_remove_from = frozenset(['toolbar'])
|
||||
|
||||
def genesis(self):
|
||||
pm = QMenu()
|
||||
@ -55,6 +56,8 @@ class PreferencesAction(InterfaceAction):
|
||||
self.gui.tags_view.recount()
|
||||
self.gui.create_device_menu()
|
||||
self.gui.set_device_menu_items_state(bool(self.gui.device_connected))
|
||||
self.gui.tool_bar.build_bar()
|
||||
self.gui.build_context_menus()
|
||||
self.gui.tool_bar.apply_settings()
|
||||
|
||||
|
||||
|
@ -15,6 +15,7 @@ class ShowBookDetailsAction(InterfaceAction):
|
||||
name = 'Show Book Details'
|
||||
action_spec = (_('Show book details'), 'dialog_information.svg', None,
|
||||
_('I'))
|
||||
dont_add_to = frozenset(['toolbar-device', 'context-menu-device'])
|
||||
|
||||
def genesis(self):
|
||||
self.qaction.triggered.connect(self.show_book_info)
|
||||
|
@ -550,9 +550,7 @@ class BulkText(BulkBase):
|
||||
remove_all, adding, rtext = self.gui_val
|
||||
remove = set()
|
||||
if remove_all:
|
||||
for book_id in book_ids:
|
||||
remove |= set(self.db.get_custom(book_id, num=self.col_id,
|
||||
index_is_id=True))
|
||||
remove = set(self.db.all_custom(num=self.col_id))
|
||||
else:
|
||||
txt = rtext
|
||||
if txt:
|
||||
|
@ -14,6 +14,7 @@ from PyQt4.Qt import QDialog, QListWidgetItem, QIcon, \
|
||||
from calibre.constants import iswindows, isosx
|
||||
from calibre.gui2.dialogs.config.config_ui import Ui_Dialog
|
||||
from calibre.gui2.dialogs.config.create_custom_column import CreateCustomColumn
|
||||
from calibre.gui2.dialogs.config.toolbar import ToolbarLayout
|
||||
from calibre.gui2 import error_dialog, config, gprefs, \
|
||||
open_url, open_local_file, \
|
||||
ALL_COLUMNS, NONE, info_dialog, choose_files, \
|
||||
@ -503,7 +504,6 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
|
||||
idx = w.findText(self.db.prefs.get(x+'_restriction', ''))
|
||||
w.setCurrentIndex(0 if idx < 0 else idx)
|
||||
self.opt_disable_animations.setChecked(config['disable_animations'])
|
||||
self.opt_show_donate_button.setChecked(config['show_donate_button'])
|
||||
idx = 0
|
||||
for i, x in enumerate([(_('Small'), 'small'), (_('Medium'), 'medium'),
|
||||
(_('Large'), 'large')]):
|
||||
@ -524,6 +524,9 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
|
||||
self.current_tweaks.setPlainText(curt.decode('utf-8'))
|
||||
self.default_tweaks.setPlainText(deft.decode('utf-8'))
|
||||
self.restore_tweaks_to_default_button.clicked.connect(self.restore_tweaks_to_default)
|
||||
self.toolbar_cm_widget = ToolbarLayout(parent, parent)
|
||||
self.toolbar_cm_tab.addTab(self.toolbar_cm_widget,
|
||||
_('Toolbars/Context menus'))
|
||||
|
||||
self.category_view.setCurrentIndex(self.category_view.model().index_for_name(initial_category))
|
||||
|
||||
@ -888,6 +891,7 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
|
||||
wl = self.opt_worker_limit.value()
|
||||
if wl%2 != 0:
|
||||
wl += 1
|
||||
self.toolbar_cm_widget.commit()
|
||||
config['worker_limit'] = wl
|
||||
|
||||
config['use_roman_numerals_for_series_number'] = bool(self.roman_numerals.isChecked())
|
||||
@ -923,7 +927,6 @@ class ConfigDialog(ResizableDialog, Ui_Dialog):
|
||||
config['overwrite_author_title_metadata'] = self.opt_overwrite_author_title_metadata.isChecked()
|
||||
config['enforce_cpu_limit'] = bool(self.opt_enforce_cpu_limit.isChecked())
|
||||
config['disable_animations'] = bool(self.opt_disable_animations.isChecked())
|
||||
config['show_donate_button'] = bool(self.opt_show_donate_button.isChecked())
|
||||
gprefs['show_splash_screen'] = bool(self.show_splash_screen.isChecked())
|
||||
for x in ('toolbar_icon_size', 'toolbar_text'):
|
||||
w = getattr(self, 'opt_'+x)
|
||||
|
@ -294,361 +294,364 @@
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="page">
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="roman_numerals">
|
||||
<property name="text">
|
||||
<string>Use &Roman numerals for series number</string>
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="toolbar_cm_tab">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="systray_icon">
|
||||
<property name="text">
|
||||
<string>Enable system &tray icon (needs restart)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="systray_notifications">
|
||||
<property name="text">
|
||||
<string>Show &notifications in system tray</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="show_splash_screen">
|
||||
<property name="text">
|
||||
<string>Show &splash screen at startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="separate_cover_flow">
|
||||
<property name="text">
|
||||
<string>Show cover &browser in a separate window (needs restart)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="show_avg_rating">
|
||||
<property name="text">
|
||||
<string>Show &average ratings in the tags browser</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="search_as_you_type">
|
||||
<property name="text">
|
||||
<string>Search as you type</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="sync_news">
|
||||
<property name="text">
|
||||
<string>Automatically send downloaded &news to ebook reader</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="delete_news">
|
||||
<property name="text">
|
||||
<string>&Delete news from library when it is automatically sent to reader</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>&Number of covers to show in browse mode (needs restart):</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>cover_browse</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="cover_browse"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Select visible &columns in library view</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QListWidget" name="columns">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
<widget class="QWidget" name="tab_3">
|
||||
<attribute name="title">
|
||||
<string>&Miscellaneous</string>
|
||||
</attribute>
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="text">
|
||||
<string>User Interface &layout (needs restart):</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_gui_layout</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="opt_gui_layout">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>&Number of covers to show in browse mode (needs restart):</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>cover_browse</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="cover_browse"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_170">
|
||||
<property name="text">
|
||||
<string>Restriction to apply when the current library is opened:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_gui_restriction</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="opt_gui_restriction">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Apply this restriction on calibre startup if the current library is being used. Also applied when switching to this library. Note that this setting is per library. </string>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
|
||||
</property>
|
||||
<property name="minimumContentsLength">
|
||||
<number>15</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="opt_disable_animations">
|
||||
<property name="toolTip">
|
||||
<string>Disable all animations. Useful if you have a slow/old computer.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Disable &animations</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>&Toolbar</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="opt_toolbar_icon_size"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>&Icon size:</string>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
<property name="buddy">
|
||||
<cstring>opt_toolbar_icon_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="opt_toolbar_text"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Show &text under icons:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_toolbar_text</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="delete_news">
|
||||
<property name="text">
|
||||
<string>&Delete news from library when it is automatically sent to reader</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Select visible &columns in library view</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<item>
|
||||
<widget class="QToolButton" name="column_up">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/arrow-up.svg</normaloff>:/images/arrow-up.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QListWidget" name="columns">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionBehavior">
|
||||
<enum>QAbstractItemView::SelectRows</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QToolButton" name="column_up">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/arrow-up.svg</normaloff>:/images/arrow-up.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="del_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Remove a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/minus.svg</normaloff>:/images/minus.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="add_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Add a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/plus.svg</normaloff>:/images/plus.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="edit_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Edit settings of a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/edit_input.svg</normaloff>:/images/edit_input.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="column_down">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/arrow-down.svg</normaloff>:/images/arrow-down.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Use internal &viewer for:</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="viewer">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="del_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Remove a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/minus.svg</normaloff>:/images/minus.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="add_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Add a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/plus.svg</normaloff>:/images/plus.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="edit_custcol_button">
|
||||
<property name="toolTip">
|
||||
<string>Edit settings of a user-defined column</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/edit_input.svg</normaloff>:/images/edit_input.svg</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="column_down">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../../resources/images.qrc">
|
||||
<normaloff>:/images/arrow-down.svg</normaloff>:/images/arrow-down.svg</iconset>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
<string>Use internal &viewer for:</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="viewer">
|
||||
<property name="alternatingRowColors">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="selectionMode">
|
||||
<enum>QAbstractItemView::NoSelection</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_17">
|
||||
<property name="text">
|
||||
<string>User Interface &layout (needs restart):</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_gui_layout</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="opt_gui_layout">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_170">
|
||||
<property name="text">
|
||||
<string>Restriction to apply when the current library is opened:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_gui_restriction</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="opt_gui_restriction">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Apply this restriction on calibre startup if the current library is being used. Also applied when switching to this library. Note that this setting is per library. </string>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
|
||||
</property>
|
||||
<property name="minimumContentsLength">
|
||||
<number>20</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="opt_disable_animations">
|
||||
<property name="toolTip">
|
||||
<string>Disable all animations. Useful if you have a slow/old computer.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Disable &animations</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="opt_show_donate_button">
|
||||
<property name="text">
|
||||
<string>Show &donate button (restart)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="title">
|
||||
<string>&Toolbar</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="opt_toolbar_icon_size"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>&Icon size:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_toolbar_icon_size</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="opt_toolbar_text"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Show &text under icons:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>opt_toolbar_text</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QCheckBox" name="search_as_you_type">
|
||||
<property name="text">
|
||||
<string>Search as you type</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QCheckBox" name="roman_numerals">
|
||||
<property name="text">
|
||||
<string>Use &Roman numerals for series</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="systray_icon">
|
||||
<property name="text">
|
||||
<string>Enable system &tray icon (needs restart)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="show_avg_rating">
|
||||
<property name="text">
|
||||
<string>Show &average ratings in the tags browser</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="sync_news">
|
||||
<property name="text">
|
||||
<string>Automatically send downloaded &news to ebook reader</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QCheckBox" name="show_splash_screen">
|
||||
<property name="text">
|
||||
<string>Show &splash screen at startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="separate_cover_flow">
|
||||
<property name="text">
|
||||
<string>Show cover &browser in a separate window (needs restart)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="systray_notifications">
|
||||
<property name="text">
|
||||
<string>Show &notifications in system tray</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -11,41 +11,29 @@ from PyQt4.Qt import QWidget, QAbstractListModel, Qt, QIcon, \
|
||||
QVariant, QItemSelectionModel
|
||||
|
||||
from calibre.gui2.dialogs.config.toolbar_ui import Ui_Form
|
||||
from calibre.gui2.layout import TOOLBAR_NO_DEVICE, TOOLBAR_DEVICE
|
||||
from calibre.gui2.init import LIBRARY_CONTEXT_MENU, DEVICE_CONTEXT_MENU
|
||||
from calibre.gui2 import gprefs, NONE
|
||||
from calibre.gui2 import gprefs, NONE, warning_dialog
|
||||
|
||||
DEFAULTS = {
|
||||
'toolbar': TOOLBAR_NO_DEVICE,
|
||||
'toolbar-device': TOOLBAR_DEVICE,
|
||||
'context-menu': LIBRARY_CONTEXT_MENU,
|
||||
'context-menu-device': DEVICE_CONTEXT_MENU,
|
||||
}
|
||||
|
||||
UNREMOVABLE = {
|
||||
'toolbar': ['Preferences'],
|
||||
'toolbar-device': ['Send To Device', 'Location Manager'],
|
||||
}
|
||||
|
||||
UNADDABLE = {
|
||||
'toolbar': ['Location Manager'],
|
||||
'context-menu': ['Location Manager'],
|
||||
'context-menu-device': ['Location Manager'],
|
||||
}
|
||||
|
||||
class FakeAction(object):
|
||||
|
||||
def __init__(self, name, icon, tooltip=None):
|
||||
def __init__(self, name, icon, tooltip=None,
|
||||
dont_add_to=frozenset([]), dont_remove_from=frozenset([])):
|
||||
self.name = name
|
||||
self.action_spec = (name, icon, tooltip, None)
|
||||
self.dont_remove_from = dont_remove_from
|
||||
self.dont_add_to = dont_add_to
|
||||
|
||||
class BaseModel(QAbstractListModel):
|
||||
|
||||
def name_to_action(self, name, gui):
|
||||
if name == 'Donate':
|
||||
return FakeAction(name, 'donate.svg')
|
||||
return FakeAction(name, 'donate.svg',
|
||||
dont_add_to=frozenset(['context-menu',
|
||||
'context-menu-device']))
|
||||
if name == 'Location Manager':
|
||||
return FakeAction(name, None)
|
||||
return FakeAction(name, None,
|
||||
_('Switch between library and device views'),
|
||||
dont_remove_from=set(['toolbar-device']))
|
||||
if name is None:
|
||||
return FakeAction('--- '+_('Separator')+' ---', None)
|
||||
return gui.iactions[name]
|
||||
@ -86,19 +74,25 @@ class AllModel(BaseModel):
|
||||
|
||||
def __init__(self, key, gui):
|
||||
BaseModel.__init__(self)
|
||||
current = gprefs.get('action-layout-'+key, DEFAULTS[key])
|
||||
all = list(gui.iactions.keys()) + ['Donate']
|
||||
all = [x for x in all if x not in current] + [None]
|
||||
all = [self.name_to_action(x, gui) for x in all]
|
||||
all.sort()
|
||||
self.gprefs_name = 'action-layout-'+key
|
||||
current = gprefs[self.gprefs_name]
|
||||
self.gui = gui
|
||||
self.key = key
|
||||
self._data = self.get_all_actions(current)
|
||||
|
||||
self._data = all
|
||||
def get_all_actions(self, current):
|
||||
all = list(self.gui.iactions.keys()) + ['Donate']
|
||||
all = [x for x in all if x not in current] + [None]
|
||||
all = [self.name_to_action(x, self.gui) for x in all]
|
||||
all = [x for x in all if self.key not in x.dont_add_to]
|
||||
all.sort()
|
||||
return all
|
||||
|
||||
def add(self, names):
|
||||
actions = []
|
||||
for name in actions:
|
||||
for name in names:
|
||||
if name is None or name.startswith('---'): continue
|
||||
actions.append(self.name_to_action(name))
|
||||
actions.append(self.name_to_action(name, self.gui))
|
||||
self._data.extend(actions)
|
||||
self._data.sort()
|
||||
self.reset()
|
||||
@ -118,14 +112,20 @@ class AllModel(BaseModel):
|
||||
self._data = ndata
|
||||
self.reset()
|
||||
|
||||
def restore_defaults(self):
|
||||
current = gprefs.defaults[self.gprefs_name]
|
||||
self._data = self.get_all_actions(current)
|
||||
self.reset()
|
||||
|
||||
class CurrentModel(BaseModel):
|
||||
|
||||
def __init__(self, key, gui):
|
||||
BaseModel.__init__(self)
|
||||
current = gprefs.get('action-layout-'+key, DEFAULTS[key])
|
||||
self.gprefs_name = 'action-layout-'+key
|
||||
current = gprefs[self.gprefs_name]
|
||||
self._data = [self.name_to_action(x, gui) for x in current]
|
||||
self.key = key
|
||||
self.gui = gui
|
||||
|
||||
def move(self, idx, delta):
|
||||
row = idx.row()
|
||||
@ -145,11 +145,12 @@ class CurrentModel(BaseModel):
|
||||
def add(self, names):
|
||||
actions = []
|
||||
reject = set([])
|
||||
for name in actions:
|
||||
if name in UNADDABLE[self.key]:
|
||||
reject.add(name)
|
||||
continue
|
||||
actions.append(self.name_to_action(name))
|
||||
for name in names:
|
||||
ac = self.name_to_action(name, self.gui)
|
||||
if self.key in ac.dont_add_to:
|
||||
reject.add(ac)
|
||||
else:
|
||||
actions.append(ac)
|
||||
|
||||
self._data.extend(actions)
|
||||
self.reset()
|
||||
@ -157,19 +158,41 @@ class CurrentModel(BaseModel):
|
||||
|
||||
def remove(self, indices):
|
||||
rows = [i.row() for i in indices]
|
||||
r = UNREMOVABLE[self.key]
|
||||
remove, removed = set([]), set([])
|
||||
remove, rejected = set([]), set([])
|
||||
for row in rows:
|
||||
ac = self._data[row]
|
||||
if ac.name in r: continue
|
||||
if self.key in ac.dont_remove_from:
|
||||
rejected.add(ac)
|
||||
continue
|
||||
remove.add(row)
|
||||
removed.add(ac.name)
|
||||
ndata = []
|
||||
for i, ac in enumerate(self._data):
|
||||
if i not in remove:
|
||||
ndata.append(ac)
|
||||
self._data = ndata
|
||||
self.reset()
|
||||
return rejected
|
||||
|
||||
def commit(self):
|
||||
old = gprefs[self.gprefs_name]
|
||||
new = []
|
||||
for x in self._data:
|
||||
n = x.name
|
||||
if n.startswith('---'):
|
||||
n = None
|
||||
new.append(n)
|
||||
new = tuple(new)
|
||||
if new != old:
|
||||
defaults = gprefs.defaults[self.gprefs_name]
|
||||
if defaults == new:
|
||||
del gprefs[self.gprefs_name]
|
||||
else:
|
||||
gprefs[self.gprefs_name] = new
|
||||
|
||||
def restore_defaults(self):
|
||||
current = gprefs.defaults[self.gprefs_name]
|
||||
self._data = [self.name_to_action(x, self.gui) for x in current]
|
||||
self.reset()
|
||||
|
||||
|
||||
class ToolbarLayout(QWidget, Ui_Form):
|
||||
@ -199,6 +222,7 @@ class ToolbarLayout(QWidget, Ui_Form):
|
||||
|
||||
self.add_action_button.clicked.connect(self.add_action)
|
||||
self.remove_action_button.clicked.connect(self.remove_action)
|
||||
self.restore_defaults_button.clicked.connect(self.restore_defaults)
|
||||
self.action_up_button.clicked.connect(partial(self.move, -1))
|
||||
self.action_down_button.clicked.connect(partial(self.move, 1))
|
||||
|
||||
@ -212,15 +236,32 @@ class ToolbarLayout(QWidget, Ui_Form):
|
||||
names = self.all_actions.model().names(x)
|
||||
if names:
|
||||
not_added = self.current_actions.model().add(names)
|
||||
added = set(names) - not_added
|
||||
ns = set([x.name for x in not_added])
|
||||
added = set(names) - ns
|
||||
self.all_actions.model().remove(x, added)
|
||||
if not_added:
|
||||
warning_dialog(self, _('Cannot add'),
|
||||
_('Cannot add the actions %s to this location') %
|
||||
','.join([a.action_spec[0] for a in not_added]),
|
||||
show=True)
|
||||
if added:
|
||||
ca = self.current_actions
|
||||
idx = ca.model().index(ca.model().rowCount(None)-1)
|
||||
ca.scrollTo(idx)
|
||||
|
||||
def remove_action(self, *args):
|
||||
x = self.current_actions.selectionModel().selectedIndexes()
|
||||
names = self.current_actions.model().names(x)
|
||||
if names:
|
||||
self.current_actions.model().remove(x)
|
||||
self.all_actions.model().add(names)
|
||||
not_removed = self.current_actions.model().remove(x)
|
||||
ns = set([x.name for x in not_removed])
|
||||
removed = set(names) - ns
|
||||
self.all_actions.model().add(removed)
|
||||
if not_removed:
|
||||
warning_dialog(self, _('Cannot remove'),
|
||||
_('Cannot remove the actions %s from this location') %
|
||||
','.join([a.action_spec[0] for a in not_removed]),
|
||||
show=True)
|
||||
|
||||
def move(self, delta, *args):
|
||||
ci = self.current_actions.currentIndex()
|
||||
@ -232,6 +273,16 @@ class ToolbarLayout(QWidget, Ui_Form):
|
||||
self.current_actions.selectionModel().select(ni,
|
||||
QItemSelectionModel.ClearAndSelect)
|
||||
|
||||
def commit(self):
|
||||
for am, cm in self.models.values():
|
||||
cm.commit()
|
||||
|
||||
def restore_defaults(self, *args):
|
||||
for am, cm in self.models.values():
|
||||
cm.restore_defaults()
|
||||
am.restore_defaults()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from PyQt4.Qt import QApplication
|
||||
from calibre.gui2.ui import Main
|
||||
@ -240,4 +291,5 @@ if __name__ == '__main__':
|
||||
a = ToolbarLayout(m)
|
||||
a.show()
|
||||
app.exec_()
|
||||
a.commit()
|
||||
|
||||
|
@ -207,6 +207,13 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="restore_defaults_button">
|
||||
<property name="text">
|
||||
<string>Restore to &default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
|
@ -199,7 +199,10 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog):
|
||||
for w in getattr(self, 'custom_column_widgets', []):
|
||||
w.gui_val
|
||||
|
||||
remove = unicode(self.remove_tags.text()).strip().split(',')
|
||||
if self.remove_all_tags.isChecked():
|
||||
remove = self.db.all_tags()
|
||||
else:
|
||||
remove = unicode(self.remove_tags.text()).strip().split(',')
|
||||
add = unicode(self.tags.text()).strip().split(',')
|
||||
au = unicode(self.authors.text())
|
||||
aus = unicode(self.author_sort.text())
|
||||
|
@ -140,7 +140,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="EnComboBox" name="publisher">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
@ -191,14 +191,23 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<item row="6" column="1">
|
||||
<widget class="TagsLineEdit" name="remove_tags">
|
||||
<property name="toolTip">
|
||||
<string>Comma separated list of tags to remove from the books. </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="6" column="2">
|
||||
<widget class="QCheckBox" name="remove_all_tags">
|
||||
<property name="text">
|
||||
<string>Remove all</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Check this box to remove all tags from the books.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item><item row="7" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>&Series:</string>
|
||||
|
@ -613,12 +613,9 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="cover_button">
|
||||
<property name="toolTip">
|
||||
<string>Browse for an image to use as the cover of this book.</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="cover_button">
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
<string>&Browse</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
@ -750,7 +747,6 @@
|
||||
<tabstop>button_set_metadata</tabstop>
|
||||
<tabstop>formats</tabstop>
|
||||
<tabstop>cover_path</tabstop>
|
||||
<tabstop>cover_button</tabstop>
|
||||
<tabstop>reset_cover</tabstop>
|
||||
<tabstop>fetch_cover_button</tabstop>
|
||||
<tabstop>generate_cover_button</tabstop>
|
||||
|
@ -13,7 +13,7 @@ from PyQt4.Qt import Qt, QStackedWidget, QMenu, \
|
||||
from calibre.utils.config import prefs
|
||||
from calibre.constants import isosx, __appname__, preferred_encoding, \
|
||||
__version__
|
||||
from calibre.gui2 import config, is_widescreen
|
||||
from calibre.gui2 import config, is_widescreen, gprefs
|
||||
from calibre.gui2.library.views import BooksView, DeviceBooksView
|
||||
from calibre.gui2.widgets import Splitter
|
||||
from calibre.gui2.tag_view import TagBrowserWidget
|
||||
@ -27,35 +27,10 @@ def partial(*args, **kwargs):
|
||||
_keep_refs.append(ans)
|
||||
return ans
|
||||
|
||||
LIBRARY_CONTEXT_MENU = (
|
||||
'Edit Metadata', 'Send To Device', 'Save To Disk',
|
||||
'Connect Share', 'Copy To Library', None,
|
||||
'Convert Books', 'View', 'Open Folder', 'Show Book Details',
|
||||
'Similar Books', None, 'Remove Books',
|
||||
)
|
||||
|
||||
DEVICE_CONTEXT_MENU = ('View', 'Save To Disk', None, 'Remove Books', None,
|
||||
'Add To Library', 'Edit Collections',
|
||||
)
|
||||
|
||||
class LibraryViewMixin(object): # {{{
|
||||
|
||||
def __init__(self, db):
|
||||
lm = QMenu(self)
|
||||
def populate_menu(m, items):
|
||||
for what in items:
|
||||
if what is None:
|
||||
m.addSeparator()
|
||||
elif what in self.iactions:
|
||||
m.addAction(self.iactions[what].qaction)
|
||||
populate_menu(lm, LIBRARY_CONTEXT_MENU)
|
||||
dm = QMenu(self)
|
||||
populate_menu(dm, DEVICE_CONTEXT_MENU)
|
||||
ec = self.iactions['Edit Collections'].qaction
|
||||
self.library_view.set_context_menu(lm, ec)
|
||||
for v in (self.memory_view, self.card_a_view, self.card_b_view):
|
||||
v.set_context_menu(dm, ec)
|
||||
|
||||
self.library_view.files_dropped.connect(self.iactions['Add Books'].files_dropped, type=Qt.QueuedConnection)
|
||||
for func, args in [
|
||||
('connect_to_search_box', (self.search,
|
||||
@ -85,6 +60,23 @@ class LibraryViewMixin(object): # {{{
|
||||
view = getattr(self, view+'_view')
|
||||
view.verticalHeader().sectionDoubleClicked.connect(self.iactions['View'].view_specific_book)
|
||||
|
||||
self.build_context_menus()
|
||||
|
||||
def build_context_menus(self):
|
||||
lm = QMenu(self)
|
||||
def populate_menu(m, items):
|
||||
for what in items:
|
||||
if what is None:
|
||||
m.addSeparator()
|
||||
elif what in self.iactions:
|
||||
m.addAction(self.iactions[what].qaction)
|
||||
populate_menu(lm, gprefs['action-layout-context-menu'])
|
||||
dm = QMenu(self)
|
||||
populate_menu(dm, gprefs['action-layout-context-menu-device'])
|
||||
ec = self.iactions['Edit Collections'].qaction
|
||||
self.library_view.set_context_menu(lm, ec)
|
||||
for v in (self.memory_view, self.card_a_view, self.card_b_view):
|
||||
v.set_context_menu(dm, ec)
|
||||
|
||||
|
||||
def search_done(self, view, ok):
|
||||
|
@ -15,23 +15,10 @@ from PyQt4.Qt import QIcon, Qt, QWidget, QToolBar, QSize, \
|
||||
from calibre.constants import __appname__
|
||||
from calibre.gui2.search_box import SearchBox2, SavedSearchBox
|
||||
from calibre.gui2.throbber import ThrobbingButton
|
||||
from calibre.gui2 import config, gprefs
|
||||
from calibre.gui2 import gprefs
|
||||
from calibre.gui2.widgets import ComboBoxWithHelp
|
||||
from calibre import human_readable
|
||||
|
||||
TOOLBAR_NO_DEVICE = (
|
||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View', None,
|
||||
'Choose Library', 'Donate', None, 'Fetch News', 'Save To Disk',
|
||||
'Connect Share', None, 'Remove Books', None, 'Help', 'Preferences',
|
||||
)
|
||||
|
||||
TOOLBAR_DEVICE = (
|
||||
'Add Books', 'Edit Metadata', None, 'Convert Books', 'View',
|
||||
'Send To Device', None, None, 'Location Manager', None, None,
|
||||
'Fetch News', 'Save To Disk', 'Connect Share', None,
|
||||
'Remove Books', None, 'Help', 'Preferences',
|
||||
)
|
||||
|
||||
class LocationManager(QObject): # {{{
|
||||
|
||||
locations_changed = pyqtSignal()
|
||||
@ -110,6 +97,7 @@ class LocationManager(QObject): # {{{
|
||||
self.free[2] = fs[2] if fs[2] is not None and cpb is not None else -1
|
||||
self.update_tooltips()
|
||||
if self.has_device != had_device:
|
||||
self.location_library.setChecked(True)
|
||||
self.locations_changed.emit()
|
||||
if not self.has_device:
|
||||
self.location_library.trigger()
|
||||
@ -220,14 +208,11 @@ class ToolBar(QToolBar): # {{{
|
||||
self.setOrientation(Qt.Horizontal)
|
||||
self.setAllowedAreas(Qt.TopToolBarArea|Qt.BottomToolBarArea)
|
||||
self.setStyleSheet('QToolButton:checked { font-weight: bold }')
|
||||
self.donate = donate
|
||||
self.donate_button = donate
|
||||
self.apply_settings()
|
||||
|
||||
self.location_manager = location_manager
|
||||
self.location_manager.locations_changed.connect(self.build_bar)
|
||||
self.d_widget = QWidget()
|
||||
self.d_widget.setLayout(QVBoxLayout())
|
||||
self.d_widget.layout().addWidget(donate)
|
||||
donate.setAutoRaise(True)
|
||||
donate.setCursor(Qt.PointingHandCursor)
|
||||
self.build_bar()
|
||||
@ -241,14 +226,15 @@ class ToolBar(QToolBar): # {{{
|
||||
if gprefs.get('toolbar_text', 'auto') == 'never':
|
||||
style = Qt.ToolButtonIconOnly
|
||||
self.setToolButtonStyle(style)
|
||||
self.donate.set_normal_icon_size(sz, sz)
|
||||
self.donate_button.set_normal_icon_size(sz, sz)
|
||||
|
||||
def contextMenuEvent(self, *args):
|
||||
pass
|
||||
|
||||
def build_bar(self):
|
||||
showing_device = self.location_manager.has_device
|
||||
actions = TOOLBAR_DEVICE if showing_device else TOOLBAR_NO_DEVICE
|
||||
actions = '-device' if showing_device else ''
|
||||
actions = gprefs['action-layout-toolbar'+actions]
|
||||
|
||||
self.clear()
|
||||
|
||||
@ -259,7 +245,10 @@ class ToolBar(QToolBar): # {{{
|
||||
for ac in self.location_manager.available_actions:
|
||||
self.addAction(ac)
|
||||
self.setup_tool_button(ac, QToolButton.MenuButtonPopup)
|
||||
elif what == 'Donate' and config['show_donate_button']:
|
||||
elif what == 'Donate':
|
||||
self.d_widget = QWidget()
|
||||
self.d_widget.setLayout(QVBoxLayout())
|
||||
self.d_widget.layout().addWidget(self.donate_button)
|
||||
self.addWidget(self.d_widget)
|
||||
elif what in self.gui.iactions:
|
||||
action = self.gui.iactions[what]
|
||||
@ -290,7 +279,7 @@ class ToolBar(QToolBar): # {{{
|
||||
|
||||
# }}}
|
||||
|
||||
class MainWindowMixin(object):
|
||||
class MainWindowMixin(object): # {{{
|
||||
|
||||
def __init__(self, db):
|
||||
self.setObjectName('MainWindow')
|
||||
@ -316,7 +305,7 @@ class MainWindowMixin(object):
|
||||
l = self.centralwidget.layout()
|
||||
l.addWidget(self.search_bar)
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
|
||||
|
@ -98,14 +98,14 @@ class DateDelegate(QStyledItemDelegate): # {{{
|
||||
d = val.toDate()
|
||||
if d <= UNDEFINED_QDATE:
|
||||
return ''
|
||||
return format_date(d.toPyDate(), 'dd MMM yyyy')
|
||||
format = tweaks['gui_timestamp_display_format']
|
||||
if format is None:
|
||||
format = 'dd MMM yyyy'
|
||||
return format_date(d.toPyDate(), format)
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
qde = QStyledItemDelegate.createEditor(self, parent, option, index)
|
||||
stdformat = unicode(qde.displayFormat())
|
||||
if 'yyyy' not in stdformat:
|
||||
stdformat = stdformat.replace('yy', 'yyyy')
|
||||
qde.setDisplayFormat(stdformat)
|
||||
qde.setDisplayFormat('dd MMM yyyy')
|
||||
qde.setMinimumDate(UNDEFINED_QDATE)
|
||||
qde.setSpecialValueText(_('Undefined'))
|
||||
qde.setCalendarPopup(True)
|
||||
|
73
src/calibre/gui2/preferences/__init__.py
Normal file
@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python
|
||||
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||
|
||||
__license__ = 'GPL v3'
|
||||
__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from PyQt4.Qt import QWidget, pyqtSignal
|
||||
|
||||
from calibre.customize.ui import preferences_plugins
|
||||
|
||||
class ConfigWidgetInterface(object):
|
||||
|
||||
changed_signal = None
|
||||
|
||||
def genesis(self, gui):
|
||||
raise NotImplementedError()
|
||||
|
||||
def restore_defaults(self):
|
||||
pass
|
||||
|
||||
def commit(self):
|
||||
pass
|
||||
|
||||
|
||||
class ConfigWidgetBase(QWidget, ConfigWidgetInterface):
|
||||
|
||||
changed_signal = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
if hasattr(self, 'setupUi'):
|
||||
self.setupUi(self)
|
||||
|
||||
def get_plugin(category, name):
|
||||
for plugin in preferences_plugins():
|
||||
if plugin.category == category and plugin.name == name:
|
||||
return plugin
|
||||
raise ValueError(
|
||||
'No Preferences PLugin with category: %s and name: %s found' %
|
||||
(category, name))
|
||||
|
||||
def test_widget(category, name, gui=None): # {{{
|
||||
from PyQt4.Qt import QDialog, QVBoxLayout, QDialogButtonBox
|
||||
pl = get_plugin(category, name)
|
||||
d = QDialog()
|
||||
d.resize(750, 550)
|
||||
bb = QDialogButtonBox(d)
|
||||
bb.setStandardButtons(bb.Apply|bb.Cancel|bb.RestoreDefaults)
|
||||
bb.accepted.connect(d.accept)
|
||||
bb.rejected.connect(d.reject)
|
||||
w = pl.create_widget(d)
|
||||
bb.button(bb.RestoreDefaults).clicked.connect(w.restore_defaults)
|
||||
bb.button(bb.Apply).setEnabled(False)
|
||||
w.changed_signal.connect(lambda : bb.button(bb.Apply).setEnable(True))
|
||||
l = QVBoxLayout()
|
||||
pl.setLayout(l)
|
||||
l.addWidget(w)
|
||||
if gui is None:
|
||||
from calibre.gui2.ui import Main
|
||||
from calibre.gui2.main import option_parser
|
||||
from calibre.library.db import db
|
||||
parser = option_parser()
|
||||
opts, args = parser.parse_args([])
|
||||
actions = tuple(Main.create_application_menubar())
|
||||
db = db()
|
||||
gui = Main(opts)
|
||||
gui.initialize(db.library_path, db, None, actions)
|
||||
w.genesis(gui)
|
||||
if d.exec_() == QDialog.Accepted:
|
||||
w.commit()
|
||||
# }}}
|
||||
|
@ -50,6 +50,8 @@ class Listener(Thread): # {{{
|
||||
self.start()
|
||||
|
||||
def run(self):
|
||||
if self.listener is None:
|
||||
return
|
||||
while self._run:
|
||||
try:
|
||||
conn = self.listener.accept()
|
||||
|
@ -112,6 +112,6 @@ class cmd_commit(_cmd_commit):
|
||||
server = xmlrpclib.ServerProxy(url)
|
||||
server.ticket.update(int(bug), msg,
|
||||
{'status':'closed', 'resolution':'fixed'},
|
||||
False)
|
||||
True)
|
||||
|
||||
bzrlib.commands.register_command(cmd_commit)
|
||||
|
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-18 22:24+0000\n"
|
||||
"PO-Revision-Date: 2010-08-19 19:17+0000\n"
|
||||
"POT-Creation-Date: 2010-08-20 20:19+0000\n"
|
||||
"PO-Revision-Date: 2010-08-21 08:43+0000\n"
|
||||
"Last-Translator: Glenn <Unknown>\n"
|
||||
"Language-Team: Danish <da@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-20 03:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-22 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -27,7 +27,7 @@ msgstr "Gør absolut ingenting"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100
|
||||
@ -136,10 +136,10 @@ msgstr "Gør absolut ingenting"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1762
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1885
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:201
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:137
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:139
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
|
||||
@ -763,7 +763,11 @@ msgstr "Kommunikér med Booq Avant"
|
||||
msgid "Communicate with the Sweex MM300"
|
||||
msgstr "Kommunikér med Sweex MM300"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:79
|
||||
msgid "Communicate with the Kogan"
|
||||
msgstr "Kommunikér med Kogan"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:87
|
||||
msgid "Communicate with the Pandigital Novel"
|
||||
msgstr "Kommunikér med Pandigital Novel"
|
||||
|
||||
@ -807,7 +811,7 @@ msgstr ""
|
||||
"Komma separeret liste af metadata felter som oversættes til collections på "
|
||||
"enheden. Muligheder omfatter: "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68
|
||||
msgid "Unnamed"
|
||||
msgstr "Unavngivet"
|
||||
@ -1671,7 +1675,11 @@ msgstr "Udfører transformationer på e-bog..."
|
||||
msgid "Creating"
|
||||
msgstr "Opretter"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20
|
||||
msgid "Failed to parse: %s with error: %s"
|
||||
msgstr "Fejlede med at parse: %s med fejl: %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:26
|
||||
msgid "ePub Fixer"
|
||||
msgstr "ePub-fixer"
|
||||
|
||||
@ -1692,7 +1700,7 @@ msgstr ""
|
||||
"Dette kan forårsage omfattende ændringer til din epub, klag til epubcheck-"
|
||||
"projektet."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:19
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21
|
||||
msgid ""
|
||||
"%prog [options] file.epub\n"
|
||||
"\n"
|
||||
@ -1710,7 +1718,7 @@ msgstr ""
|
||||
"By default, no fixing is done and messages are printed out for each error "
|
||||
"detected. Use the options to control which errors are automatically fixed."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:52
|
||||
msgid "You must specify an epub file"
|
||||
msgstr "Du skal angive en epub-fil"
|
||||
|
||||
@ -2103,7 +2111,7 @@ msgstr "Tegneserie"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:887
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:569
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
@ -3151,7 +3159,7 @@ msgid ""
|
||||
"directory, assumes every ebook file is the same book in a different format)"
|
||||
msgstr ""
|
||||
"Tilføj bøger fra mapper, inklusiv undermapper (Én e-bog per mappe, formoder "
|
||||
"hver e-bogsfil er den samme e-bog i forskellge formater)"
|
||||
"hver e-bogsfil er den samme e-bog i forskellige formater)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:36
|
||||
msgid ""
|
||||
@ -3293,6 +3301,7 @@ msgstr "Kun brugernoter genereret fra arbejdsbibliotek"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176
|
||||
@ -3368,7 +3377,8 @@ msgid "Select destination for %s.%s"
|
||||
msgstr "Gem destination for %s.%s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d books"
|
||||
msgstr "%d bøger"
|
||||
|
||||
@ -3435,14 +3445,45 @@ msgstr "Kan ikke konvertere"
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr "Starter konvertering af %d bog/bøger"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:63
|
||||
msgid "Copy to library"
|
||||
msgstr "Kopiér til bibliotek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:64
|
||||
msgid "Copy selected books to the specified library"
|
||||
msgstr "Kopiér udvalgte bøger til det angivne bibliotek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97
|
||||
msgid "Cannot copy"
|
||||
msgstr "Kan ikke kopiere"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102
|
||||
msgid "No library"
|
||||
msgstr "Intet bibliotek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103
|
||||
msgid "No library found at %s"
|
||||
msgstr "Intet bibliotek fundet ved %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110
|
||||
msgid "Copying"
|
||||
msgstr "Kopiérer"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
msgid "Could not copy books: "
|
||||
msgstr "Kunne ikke kopiere bøger: "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Fejlede"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123
|
||||
msgid "Copied %d books to %s"
|
||||
msgstr "Kopiéret %d bøger til %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:18
|
||||
msgid "Del"
|
||||
msgstr "Slet"
|
||||
@ -3875,35 +3916,35 @@ msgstr "Ingen detaljeret information tilgængelig om bøger på enheden."
|
||||
msgid "Similar books..."
|
||||
msgstr "Lignende bøger..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Alt+A"
|
||||
msgstr "Alt+A"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Books by same author"
|
||||
msgstr "Bøger af samme forfatter"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Alt+S"
|
||||
msgstr "Alt+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Books in this series"
|
||||
msgstr "Bøger i denne serie"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Alt+P"
|
||||
msgstr "Alt+P"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Books by this publisher"
|
||||
msgstr "Bøger fra denne udgiver"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Alt+T"
|
||||
msgstr "Alt+T"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Books with the same tags"
|
||||
msgstr "Bøger med samme mærker"
|
||||
|
||||
@ -4121,6 +4162,10 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||
@ -4286,6 +4331,7 @@ msgstr "output"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
@ -5559,11 +5605,6 @@ msgstr "Kommunikationsfejl med enheden"
|
||||
msgid "Select folder to open as device"
|
||||
msgstr "Vælg mappe til at åbne som enhed"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Fejlede"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684
|
||||
msgid "Error talking to device"
|
||||
msgstr "Fejl ved kommunikation med enhed"
|
||||
@ -6746,7 +6787,7 @@ msgstr "Tal"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Date"
|
||||
msgstr "Dato"
|
||||
|
||||
@ -6940,6 +6981,63 @@ msgstr "Tilgængelige variable:"
|
||||
msgid "Downloading social metadata, please wait..."
|
||||
msgstr "Downloader sociale metadata, vent venligst..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50
|
||||
msgid "Separator"
|
||||
msgstr "Separator"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63
|
||||
msgid "Choose library"
|
||||
msgstr "Vælg bibliotek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113
|
||||
msgid "The main toolbar"
|
||||
msgstr "Hovedværktøjslinjen"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114
|
||||
msgid "The main toolbar when a device is connected"
|
||||
msgstr "Hovedværktøjslinjen når en enhed er forbundet"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115
|
||||
msgid "The context menu for the books in the calibre library"
|
||||
msgstr "Kontekstmenuen til bøgerne i calibre-biblioteket"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117
|
||||
msgid "The context menu for the books on the device"
|
||||
msgstr "Kontekstmenuen til bøgerne i enheden"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94
|
||||
msgid "Customize the actions in:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95
|
||||
msgid "A&vailable actions"
|
||||
msgstr "&Tilgængelige aktioner"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96
|
||||
msgid "&Current actions"
|
||||
msgstr "&Aktuelle aktioner"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97
|
||||
msgid "Move selected action up"
|
||||
msgstr "Flyt udvalgte aktion op"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99
|
||||
msgid "Move selected action down"
|
||||
msgstr "Flyt udvalgte aktion ned"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102
|
||||
msgid "Add selected actions to toolbar"
|
||||
msgstr "Tilføj udvalgte aktioner til værktøjslinjen"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr "Fjern udvalgte aktioner fra værktøjslinjen"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||
msgid "&Show this warning again"
|
||||
msgstr "&Vis denne advarsel igen"
|
||||
@ -7911,10 +8009,6 @@ msgstr ""
|
||||
msgid "Rename the item in every book where it is used."
|
||||
msgstr "Omdøb emnet i bøger hvor det er brugt."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51
|
||||
msgid "Test email settings"
|
||||
msgstr "Test e-mail indstillinger"
|
||||
@ -8228,48 +8322,48 @@ msgstr "ISBN:"
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr "Regulært udtryk (?P<isbn>)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
|
||||
msgid "Cover Browser"
|
||||
msgstr "omslags-browser"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110
|
||||
msgid "Shift+Alt+B"
|
||||
msgstr "Shift+Alt+B"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
|
||||
msgid "Tag Browser"
|
||||
msgstr "Mærke-browser"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:125
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126
|
||||
msgid "Shift+Alt+T"
|
||||
msgstr "Shift+Alt+T"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
msgid "version"
|
||||
msgstr "version"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147
|
||||
msgid "created by Kovid Goyal"
|
||||
msgstr "skabt af Kovid Goyal"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165
|
||||
msgid "Connected "
|
||||
msgstr "Forbundet "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174
|
||||
msgid "Update found"
|
||||
msgstr "Opdatering fundet"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:217
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228
|
||||
msgid "Book Details"
|
||||
msgstr "bog detaljer"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:219
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220
|
||||
msgid "Alt+D"
|
||||
msgstr "Alt+D"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:229
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230
|
||||
msgid "Shift+Alt+D"
|
||||
msgstr "Shift+Alt+D"
|
||||
|
||||
@ -8341,7 +8435,7 @@ msgid "Eject this device"
|
||||
msgstr "Skub denne enhed ud"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:192
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194
|
||||
msgid "Library"
|
||||
msgstr "Bibliotek"
|
||||
|
||||
@ -10604,7 +10698,52 @@ msgstr "Spørger/spørg ikke efter bekræftelse"
|
||||
msgid "Error: You must specify a column label"
|
||||
msgstr "Fejl: Du skal specificere en kolonne label"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:809
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:803
|
||||
msgid ""
|
||||
"\n"
|
||||
" %prog saved_searches [options] list\n"
|
||||
" %prog saved_searches add name search\n"
|
||||
" %prog saved_searches remove name\n"
|
||||
"\n"
|
||||
" Manage the saved searches stored in this database.\n"
|
||||
" If you try to add a query with a name that already exists, it will be\n"
|
||||
" replaced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:821
|
||||
msgid "Error: You must specify an action (add|remove|list)"
|
||||
msgstr "Fejl: Du skal angive en aktion (tilføj|fjern|liste)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:829
|
||||
msgid "Name:"
|
||||
msgstr "Navn:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:830
|
||||
msgid "Search string:"
|
||||
msgstr "Søgestreng:"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:836
|
||||
msgid "Error: You must specify a name and a search string"
|
||||
msgstr "Fejl: Du skal angive et navn og en søgestreng"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:839
|
||||
msgid "added"
|
||||
msgstr "tilføjet"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:844
|
||||
msgid "Error: You must specify a name"
|
||||
msgstr "Fejl: Du skal angive et navn"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:847
|
||||
msgid "removed"
|
||||
msgstr "fjernet"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:851
|
||||
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
|
||||
msgstr "Fejl: Aktion %s ikke genkendt, skal være en af: (tilføj|fjern|liste)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
|
||||
msgid ""
|
||||
"%%prog command [options] [arguments]\n"
|
||||
"\n"
|
||||
@ -10644,27 +10783,27 @@ msgstr "%sMiddel vurderingen er %3.1f"
|
||||
msgid "Main"
|
||||
msgstr "Main/hjem/primær"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1911
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1915
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr "<p>Flytter gammel database til e-bogsbibliotek i %s<br><center>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1940
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1944
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "Kopierer <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1961
|
||||
msgid "Compacting database"
|
||||
msgstr "Komprimerer database"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2050
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2054
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr "Checker SQL integritet..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2091
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2095
|
||||
msgid "Checking for missing files."
|
||||
msgstr "Checker for manglende filer."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2113
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2117
|
||||
msgid "Checked id"
|
||||
msgstr "Checket id"
|
||||
|
||||
@ -10897,35 +11036,39 @@ msgstr ""
|
||||
"Angiv en restriktion som skal anvendes til denne aktivering. Denne mulighed "
|
||||
"overstyrer enhver per-biblioteksindstilling angivet i GUI-en"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:127
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d book"
|
||||
msgstr "%d bog"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129
|
||||
msgid "%d items"
|
||||
msgstr "%d emner"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:146
|
||||
msgid "RATING: %s<br />"
|
||||
msgstr "VURDERING: %s<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:147
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:149
|
||||
msgid "TAGS: %s<br />"
|
||||
msgstr "MÆRKATER: %s<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:151
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:153
|
||||
msgid "SERIES: %s [%s]<br />"
|
||||
msgstr "SERIER: %s [%s]<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:233
|
||||
msgid "Books in your library"
|
||||
msgstr "Bøger i dit bibliotek"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:237
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:239
|
||||
msgid "By "
|
||||
msgstr "Af/efter "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:238
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:240
|
||||
msgid "Books sorted by "
|
||||
msgstr "Bøger sorteret efter "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Newest"
|
||||
msgstr "Nyeste"
|
||||
|
||||
|
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-18 22:24+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 02:58+0000\n"
|
||||
"POT-Creation-Date: 2010-08-20 20:19+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 22:07+0000\n"
|
||||
"Last-Translator: Eleftherios Kosmas <elkosmas@gmail.com>\n"
|
||||
"Language-Team: Greek <el@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-20 03:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-22 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -27,7 +27,7 @@ msgstr "Δεν κάνει τίποτα"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100
|
||||
@ -136,10 +136,10 @@ msgstr "Δεν κάνει τίποτα"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1762
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1885
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:201
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:137
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:139
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
|
||||
@ -755,7 +755,11 @@ msgstr "Επικοινωνία με το Booq Avant"
|
||||
msgid "Communicate with the Sweex MM300"
|
||||
msgstr "Επικοινωνία με το Sweex MM300"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:79
|
||||
msgid "Communicate with the Kogan"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:87
|
||||
msgid "Communicate with the Pandigital Novel"
|
||||
msgstr "Επικοινωνία με το Pandigital Novel"
|
||||
|
||||
@ -799,7 +803,7 @@ msgstr ""
|
||||
"Κατάλογος πεδίων συνδεδομένων, χωρισμένων με κόμμα, στη συσκευή, προς "
|
||||
"μετατροπή σε συλλογές. Οι πιθανότητες συμπεριλαμβάνουν: "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68
|
||||
msgid "Unnamed"
|
||||
msgstr "Χωρίς όνομα"
|
||||
@ -1636,7 +1640,11 @@ msgstr ""
|
||||
msgid "Creating"
|
||||
msgstr "Δημιουργία"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20
|
||||
msgid "Failed to parse: %s with error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:26
|
||||
msgid "ePub Fixer"
|
||||
msgstr ""
|
||||
|
||||
@ -1652,7 +1660,7 @@ msgid ""
|
||||
"cause significant changes to your epub, complain to the epubcheck project."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:19
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21
|
||||
msgid ""
|
||||
"%prog [options] file.epub\n"
|
||||
"\n"
|
||||
@ -1663,7 +1671,7 @@ msgid ""
|
||||
"detected. Use the options to control which errors are automatically fixed."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:52
|
||||
msgid "You must specify an epub file"
|
||||
msgstr ""
|
||||
|
||||
@ -1994,7 +2002,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:887
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:569
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
@ -3037,6 +3045,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176
|
||||
@ -3110,7 +3119,8 @@ msgid "Select destination for %s.%s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d books"
|
||||
msgstr ""
|
||||
|
||||
@ -3175,14 +3185,45 @@ msgstr ""
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:63
|
||||
msgid "Copy to library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:64
|
||||
msgid "Copy selected books to the specified library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97
|
||||
msgid "Cannot copy"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102
|
||||
msgid "No library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103
|
||||
msgid "No library found at %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110
|
||||
msgid "Copying"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
msgid "Could not copy books: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Απέτυχε"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123
|
||||
msgid "Copied %d books to %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:18
|
||||
msgid "Del"
|
||||
msgstr "Διαγραφή"
|
||||
@ -3596,35 +3637,35 @@ msgstr ""
|
||||
msgid "Similar books..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Alt+A"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Books by same author"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Alt+S"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Books in this series"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Alt+P"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Books by this publisher"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Alt+T"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Books with the same tags"
|
||||
msgstr ""
|
||||
|
||||
@ -3825,6 +3866,10 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||
@ -3987,6 +4032,7 @@ msgstr "έξοδος"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
@ -5198,11 +5244,6 @@ msgstr ""
|
||||
msgid "Select folder to open as device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Απέτυχε"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684
|
||||
msgid "Error talking to device"
|
||||
msgstr ""
|
||||
@ -6295,7 +6336,7 @@ msgstr "Αριθμός"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Date"
|
||||
msgstr "Ημερομηνία"
|
||||
|
||||
@ -6473,6 +6514,63 @@ msgstr ""
|
||||
msgid "Downloading social metadata, please wait..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50
|
||||
msgid "Separator"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63
|
||||
msgid "Choose library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113
|
||||
msgid "The main toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114
|
||||
msgid "The main toolbar when a device is connected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115
|
||||
msgid "The context menu for the books in the calibre library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117
|
||||
msgid "The context menu for the books on the device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94
|
||||
msgid "Customize the actions in:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95
|
||||
msgid "A&vailable actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96
|
||||
msgid "&Current actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97
|
||||
msgid "Move selected action up"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99
|
||||
msgid "Move selected action down"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+Ε"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102
|
||||
msgid "Add selected actions to toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||
msgid "&Show this warning again"
|
||||
msgstr ""
|
||||
@ -7396,10 +7494,6 @@ msgstr ""
|
||||
msgid "Rename the item in every book where it is used."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+Ε"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51
|
||||
msgid "Test email settings"
|
||||
msgstr ""
|
||||
@ -7678,48 +7772,48 @@ msgstr ""
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
|
||||
msgid "Cover Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110
|
||||
msgid "Shift+Alt+B"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
|
||||
msgid "Tag Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:125
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126
|
||||
msgid "Shift+Alt+T"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
msgid "version"
|
||||
msgstr "έκδοση"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147
|
||||
msgid "created by Kovid Goyal"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165
|
||||
msgid "Connected "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174
|
||||
msgid "Update found"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:217
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228
|
||||
msgid "Book Details"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:219
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220
|
||||
msgid "Alt+D"
|
||||
msgstr "Alt+Π"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:229
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230
|
||||
msgid "Shift+Alt+D"
|
||||
msgstr ""
|
||||
|
||||
@ -7791,7 +7885,7 @@ msgid "Eject this device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:192
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194
|
||||
msgid "Library"
|
||||
msgstr "Βιβλιοθήκη"
|
||||
|
||||
@ -9780,7 +9874,52 @@ msgstr ""
|
||||
msgid "Error: You must specify a column label"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:809
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:803
|
||||
msgid ""
|
||||
"\n"
|
||||
" %prog saved_searches [options] list\n"
|
||||
" %prog saved_searches add name search\n"
|
||||
" %prog saved_searches remove name\n"
|
||||
"\n"
|
||||
" Manage the saved searches stored in this database.\n"
|
||||
" If you try to add a query with a name that already exists, it will be\n"
|
||||
" replaced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:821
|
||||
msgid "Error: You must specify an action (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:829
|
||||
msgid "Name:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:830
|
||||
msgid "Search string:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:836
|
||||
msgid "Error: You must specify a name and a search string"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:839
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:844
|
||||
msgid "Error: You must specify a name"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:847
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:851
|
||||
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
|
||||
msgid ""
|
||||
"%%prog command [options] [arguments]\n"
|
||||
"\n"
|
||||
@ -9810,27 +9949,27 @@ msgstr ""
|
||||
msgid "Main"
|
||||
msgstr "Κύριο"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1911
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1915
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1940
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1944
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1961
|
||||
msgid "Compacting database"
|
||||
msgstr "Συμπίεση βάσης δεδομένων"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2050
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2054
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2091
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2095
|
||||
msgid "Checking for missing files."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2113
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2117
|
||||
msgid "Checked id"
|
||||
msgstr ""
|
||||
|
||||
@ -10026,35 +10165,39 @@ msgid ""
|
||||
"overrides any per-library settings specified in the GUI"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:127
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d book"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129
|
||||
msgid "%d items"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:146
|
||||
msgid "RATING: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:147
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:149
|
||||
msgid "TAGS: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:151
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:153
|
||||
msgid "SERIES: %s [%s]<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:233
|
||||
msgid "Books in your library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:237
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:239
|
||||
msgid "By "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:238
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:240
|
||||
msgid "Books sorted by "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Newest"
|
||||
msgstr "Νεώτερη"
|
||||
|
||||
|
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-18 22:24+0000\n"
|
||||
"PO-Revision-Date: 2010-08-19 22:29+0000\n"
|
||||
"Last-Translator: Bingen Markes <Unknown>\n"
|
||||
"POT-Creation-Date: 2010-08-20 20:19+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 21:29+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||
"Language-Team: Basque <eu@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-20 03:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-21 03:49+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -27,7 +27,7 @@ msgstr "Ez du ezer egiten"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100
|
||||
@ -136,10 +136,10 @@ msgstr "Ez du ezer egiten"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1762
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1885
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:201
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:137
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:139
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
|
||||
@ -772,7 +772,11 @@ msgstr "Jar zaitez harremanetan \"Booq Avant\" horrekin."
|
||||
msgid "Communicate with the Sweex MM300"
|
||||
msgstr "Jar zaitez harremanetan \"Sweex MM300\" horrekin."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:79
|
||||
msgid "Communicate with the Kogan"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:87
|
||||
msgid "Communicate with the Pandigital Novel"
|
||||
msgstr "Jar zaitez harremanetan \"Pandigital Novel\" horrekin."
|
||||
|
||||
@ -816,7 +820,7 @@ msgstr ""
|
||||
"Komez bereiziriko meta-datuen eremuen zerrenda gailuan bildumak bihurtzeko "
|
||||
"modukoak. Aukeren artean hauek: "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68
|
||||
msgid "Unnamed"
|
||||
msgstr "Identifikatu gabea"
|
||||
@ -1756,7 +1760,11 @@ msgstr ""
|
||||
msgid "Creating"
|
||||
msgstr "Sortzen"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20
|
||||
msgid "Failed to parse: %s with error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:26
|
||||
msgid "ePub Fixer"
|
||||
msgstr "ePub Fixer (ePUB formatuan doitzeko tresna)"
|
||||
|
||||
@ -1778,7 +1786,7 @@ msgstr ""
|
||||
"fitxategiari aldaketa nabarmenak ekar liezazkioke... Horrela izan bada, "
|
||||
"kexak \"ePUB Project\" horretara bideratu."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:19
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21
|
||||
msgid ""
|
||||
"%prog [options] file.epub\n"
|
||||
"\n"
|
||||
@ -1797,7 +1805,7 @@ msgstr ""
|
||||
"detektaturiko akats bakoitzari buruzko mezu bana. Erabil itzazu aukerak "
|
||||
"kontrolatzeko zeintzuk akats izan dira automatikoki eraldatuak."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:52
|
||||
msgid "You must specify an epub file"
|
||||
msgstr "ePUB fitxategi bat zehaztu beharko duzu"
|
||||
|
||||
@ -2129,6 +2137,7 @@ msgstr ""
|
||||
"%prog [options] mybook.lrf\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"\n"
|
||||
"Erakutsi/Editatu metadatuak LRF fitxategian.\n"
|
||||
"\n"
|
||||
|
||||
@ -2219,7 +2228,7 @@ msgstr "Komikia"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:887
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:569
|
||||
msgid "Title"
|
||||
msgstr "Izenburua"
|
||||
|
||||
@ -3442,6 +3451,7 @@ msgstr "Liburutegi nagusian erabiltzaileak sortu dituen oharrak bakarrik"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176
|
||||
@ -3517,7 +3527,8 @@ msgid "Select destination for %s.%s"
|
||||
msgstr "Aukeratu helburua honentzat: %s.%s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d books"
|
||||
msgstr "%d books"
|
||||
|
||||
@ -3586,14 +3597,45 @@ msgstr "Ezin da bihurtu"
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr "%d liburu(ar)en bihurketa abiatzen"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:63
|
||||
msgid "Copy to library"
|
||||
msgstr "Liburutegira kopiatu."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:64
|
||||
msgid "Copy selected books to the specified library"
|
||||
msgstr "Kopiatu hautatutako liburuak adierazitako liburutegian"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97
|
||||
msgid "Cannot copy"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102
|
||||
msgid "No library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103
|
||||
msgid "No library found at %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110
|
||||
msgid "Copying"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
msgid "Could not copy books: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Huts egin du"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123
|
||||
msgid "Copied %d books to %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:18
|
||||
msgid "Del"
|
||||
msgstr "Del"
|
||||
@ -4028,35 +4070,35 @@ msgstr "No detailed information is available for books on the device."
|
||||
msgid "Similar books..."
|
||||
msgstr "Similar books..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Alt+A"
|
||||
msgstr "Alt+A"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Books by same author"
|
||||
msgstr "Books by same author"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Alt+S"
|
||||
msgstr "Alt+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Books in this series"
|
||||
msgstr "Books in this series"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Alt+P"
|
||||
msgstr "Alt+P"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Books by this publisher"
|
||||
msgstr "Books by this publisher"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Alt+T"
|
||||
msgstr "Alt+T"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Books with the same tags"
|
||||
msgstr "Books with the same tags"
|
||||
|
||||
@ -4278,6 +4320,10 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||
@ -4445,6 +4491,7 @@ msgstr "outputa, helburua"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
@ -5727,11 +5774,6 @@ msgstr "Irakurgailuarekin komunikatzeko saioak huts egin du"
|
||||
msgid "Select folder to open as device"
|
||||
msgstr "Aukeratu karpeta bat irakurgailua izango balitz bezala zabaltzeko"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Huts egin du"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684
|
||||
msgid "Error talking to device"
|
||||
msgstr "Akatsen bat irakurgailuarekin komunikatzerakoan"
|
||||
@ -6899,7 +6941,7 @@ msgstr "Number"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
@ -7092,6 +7134,63 @@ msgstr "Available variables:"
|
||||
msgid "Downloading social metadata, please wait..."
|
||||
msgstr "Downloading social metadata, please wait..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50
|
||||
msgid "Separator"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63
|
||||
msgid "Choose library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113
|
||||
msgid "The main toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114
|
||||
msgid "The main toolbar when a device is connected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115
|
||||
msgid "The context menu for the books in the calibre library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117
|
||||
msgid "The context menu for the books on the device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94
|
||||
msgid "Customize the actions in:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95
|
||||
msgid "A&vailable actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96
|
||||
msgid "&Current actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97
|
||||
msgid "Move selected action up"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99
|
||||
msgid "Move selected action down"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102
|
||||
msgid "Add selected actions to toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||
msgid "&Show this warning again"
|
||||
msgstr "&Show this warning again"
|
||||
@ -8057,10 +8156,6 @@ msgstr ""
|
||||
msgid "Rename the item in every book where it is used."
|
||||
msgstr "Rename the item in every book where it is used."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51
|
||||
msgid "Test email settings"
|
||||
msgstr "Test email settings"
|
||||
@ -8371,48 +8466,48 @@ msgstr "ISBN:"
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr "Regular expression (?P<isbn>)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
|
||||
msgid "Cover Browser"
|
||||
msgstr "Cover Browser"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110
|
||||
msgid "Shift+Alt+B"
|
||||
msgstr "Shift+Alt+B"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
|
||||
msgid "Tag Browser"
|
||||
msgstr "Tag Browser"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:125
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126
|
||||
msgid "Shift+Alt+T"
|
||||
msgstr "Shift+Alt+T"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
msgid "version"
|
||||
msgstr "version"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147
|
||||
msgid "created by Kovid Goyal"
|
||||
msgstr "created by Kovid Goyal"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165
|
||||
msgid "Connected "
|
||||
msgstr "Connected "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174
|
||||
msgid "Update found"
|
||||
msgstr "Update found"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:217
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228
|
||||
msgid "Book Details"
|
||||
msgstr "Book Details"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:219
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220
|
||||
msgid "Alt+D"
|
||||
msgstr "Alt+D"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:229
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230
|
||||
msgid "Shift+Alt+D"
|
||||
msgstr "Shift+Alt+D"
|
||||
|
||||
@ -8484,7 +8579,7 @@ msgid "Eject this device"
|
||||
msgstr "Eject this device"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:192
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194
|
||||
msgid "Library"
|
||||
msgstr "Library"
|
||||
|
||||
@ -10744,7 +10839,52 @@ msgstr "Do not ask for confirmation"
|
||||
msgid "Error: You must specify a column label"
|
||||
msgstr "Error: You must specify a column label"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:809
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:803
|
||||
msgid ""
|
||||
"\n"
|
||||
" %prog saved_searches [options] list\n"
|
||||
" %prog saved_searches add name search\n"
|
||||
" %prog saved_searches remove name\n"
|
||||
"\n"
|
||||
" Manage the saved searches stored in this database.\n"
|
||||
" If you try to add a query with a name that already exists, it will be\n"
|
||||
" replaced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:821
|
||||
msgid "Error: You must specify an action (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:829
|
||||
msgid "Name:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:830
|
||||
msgid "Search string:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:836
|
||||
msgid "Error: You must specify a name and a search string"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:839
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:844
|
||||
msgid "Error: You must specify a name"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:847
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:851
|
||||
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
|
||||
msgid ""
|
||||
"%%prog command [options] [arguments]\n"
|
||||
"\n"
|
||||
@ -10784,27 +10924,27 @@ msgstr "%sAverage rating is %3.1f"
|
||||
msgid "Main"
|
||||
msgstr "Main"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1911
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1915
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1940
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1944
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "Copying <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1961
|
||||
msgid "Compacting database"
|
||||
msgstr "Compacting database"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2050
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2054
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr "Checking SQL integrity..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2091
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2095
|
||||
msgid "Checking for missing files."
|
||||
msgstr "Checking for missing files."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2113
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2117
|
||||
msgid "Checked id"
|
||||
msgstr "Checked id"
|
||||
|
||||
@ -11036,35 +11176,39 @@ msgid ""
|
||||
"overrides any per-library settings specified in the GUI"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:127
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d book"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129
|
||||
msgid "%d items"
|
||||
msgstr "%d items"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:146
|
||||
msgid "RATING: %s<br />"
|
||||
msgstr "RATING: %s<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:147
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:149
|
||||
msgid "TAGS: %s<br />"
|
||||
msgstr "TAGS: %s<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:151
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:153
|
||||
msgid "SERIES: %s [%s]<br />"
|
||||
msgstr "SERIES: %s [%s]<br />"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:233
|
||||
msgid "Books in your library"
|
||||
msgstr "Books in your library"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:237
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:239
|
||||
msgid "By "
|
||||
msgstr "By "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:238
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:240
|
||||
msgid "Books sorted by "
|
||||
msgstr "Books sorted by "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Newest"
|
||||
msgstr "Newest"
|
||||
|
||||
|
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-18 22:24+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 00:46+0000\n"
|
||||
"Last-Translator: Marcos X. <Unknown>\n"
|
||||
"POT-Creation-Date: 2010-08-20 20:19+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 22:29+0000\n"
|
||||
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||
"Language-Team: Galician <gl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-20 03:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-22 03:44+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -27,7 +27,7 @@ msgstr "Non facer nada"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100
|
||||
@ -136,10 +136,10 @@ msgstr "Non facer nada"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1762
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1885
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:201
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:137
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:139
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
|
||||
@ -762,7 +762,11 @@ msgstr "Comunicar co Booq Avant"
|
||||
msgid "Communicate with the Sweex MM300"
|
||||
msgstr "Conectar co Sweex MM300"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:79
|
||||
msgid "Communicate with the Kogan"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:87
|
||||
msgid "Communicate with the Pandigital Novel"
|
||||
msgstr "Conectar co Pandigital Novel"
|
||||
|
||||
@ -806,7 +810,7 @@ msgstr ""
|
||||
"Lista separada por comas de campos de metadatos para convertelos en "
|
||||
"coleccións no dispositivo. As posibilidades son: "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68
|
||||
msgid "Unnamed"
|
||||
msgstr "Sen nome"
|
||||
@ -1690,7 +1694,11 @@ msgstr "Aplicando transformacións ao libro electrónico..."
|
||||
msgid "Creating"
|
||||
msgstr "A crear"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20
|
||||
msgid "Failed to parse: %s with error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:26
|
||||
msgid "ePub Fixer"
|
||||
msgstr "Corrector de ePub"
|
||||
|
||||
@ -1711,7 +1719,7 @@ msgstr ""
|
||||
"provoar mudanzas significantes no epub. Dirixa as súas queixas ao proxecto "
|
||||
"epubcheck."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:19
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21
|
||||
msgid ""
|
||||
"%prog [options] file.epub\n"
|
||||
"\n"
|
||||
@ -1722,7 +1730,7 @@ msgid ""
|
||||
"detected. Use the options to control which errors are automatically fixed."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:52
|
||||
msgid "You must specify an epub file"
|
||||
msgstr "Debe especificar un ficheiro de epub"
|
||||
|
||||
@ -2115,7 +2123,7 @@ msgstr "Cómic"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:887
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:569
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
@ -3324,6 +3332,7 @@ msgstr "Usar as anotacións xeradas só dende a biblioteca principal"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176
|
||||
@ -3399,7 +3408,8 @@ msgid "Select destination for %s.%s"
|
||||
msgstr "Escoller o destino para %s %s"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d books"
|
||||
msgstr "%d libros"
|
||||
|
||||
@ -3466,14 +3476,45 @@ msgstr "Non se pode converter"
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr "Esta a comezar a conversión de %d libros(s)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:63
|
||||
msgid "Copy to library"
|
||||
msgstr "Copiar á biblioteca"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:64
|
||||
msgid "Copy selected books to the specified library"
|
||||
msgstr "Copiar os libros seleccionados á biblioteca especificada"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97
|
||||
msgid "Cannot copy"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102
|
||||
msgid "No library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103
|
||||
msgid "No library found at %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110
|
||||
msgid "Copying"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
msgid "Could not copy books: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Fallou"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123
|
||||
msgid "Copied %d books to %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:18
|
||||
msgid "Del"
|
||||
msgstr "Supr"
|
||||
@ -3902,35 +3943,35 @@ msgstr "Non hai dispoñíbel información detallada dos libros no dispositivo."
|
||||
msgid "Similar books..."
|
||||
msgstr "Libros semellantes..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Alt+A"
|
||||
msgstr "Alt+A"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Books by same author"
|
||||
msgstr "Libros coa mesma autoría"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Alt+S"
|
||||
msgstr "Alt+S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Books in this series"
|
||||
msgstr "Libros con esta serie"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Alt+P"
|
||||
msgstr "Alt+P"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Books by this publisher"
|
||||
msgstr "Libros por editorial"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Alt+T"
|
||||
msgstr "Alt+T"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Books with the same tags"
|
||||
msgstr "Libros coas mesmas etiquetas"
|
||||
|
||||
@ -4150,6 +4191,10 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||
@ -4316,6 +4361,7 @@ msgstr "saída"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
@ -5561,11 +5607,6 @@ msgstr "Erro ao conectar co dispositivo"
|
||||
msgid "Select folder to open as device"
|
||||
msgstr "Escoller o cartafol para abrir co como dispositivo"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr "Fallou"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684
|
||||
msgid "Error talking to device"
|
||||
msgstr "Erro ao conectar co dispositivo"
|
||||
@ -6749,7 +6790,7 @@ msgstr "Número"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
@ -6941,6 +6982,63 @@ msgstr "Variábeis dispoñíbeis"
|
||||
msgid "Downloading social metadata, please wait..."
|
||||
msgstr "A descargar os metadatos sociais, agarde..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50
|
||||
msgid "Separator"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63
|
||||
msgid "Choose library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113
|
||||
msgid "The main toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114
|
||||
msgid "The main toolbar when a device is connected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115
|
||||
msgid "The context menu for the books in the calibre library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117
|
||||
msgid "The context menu for the books on the device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94
|
||||
msgid "Customize the actions in:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95
|
||||
msgid "A&vailable actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96
|
||||
msgid "&Current actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97
|
||||
msgid "Move selected action up"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99
|
||||
msgid "Move selected action down"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl + S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102
|
||||
msgid "Add selected actions to toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||
msgid "&Show this warning again"
|
||||
msgstr "&Amosar este aviso outra vez"
|
||||
@ -7913,10 +8011,6 @@ msgstr ""
|
||||
msgid "Rename the item in every book where it is used."
|
||||
msgstr "Cambiar o nome ao elemento en cada libro que o emprega."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr "Ctrl + S"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51
|
||||
msgid "Test email settings"
|
||||
msgstr "Probar a configuración do correo de proba"
|
||||
@ -8231,48 +8325,48 @@ msgstr "ISBN:"
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr "Expresión regular (?P<isbn>)"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
|
||||
msgid "Cover Browser"
|
||||
msgstr "Navegador de capas"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110
|
||||
msgid "Shift+Alt+B"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
|
||||
msgid "Tag Browser"
|
||||
msgstr "Navegador de etiquetas"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:125
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126
|
||||
msgid "Shift+Alt+T"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
msgid "version"
|
||||
msgstr "versión"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147
|
||||
msgid "created by Kovid Goyal"
|
||||
msgstr "creado por Kovid Goyal"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165
|
||||
msgid "Connected "
|
||||
msgstr "Conectado "
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174
|
||||
msgid "Update found"
|
||||
msgstr "Actualización atopada"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:217
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228
|
||||
msgid "Book Details"
|
||||
msgstr "Detalles do libro"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:219
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220
|
||||
msgid "Alt+D"
|
||||
msgstr "Alt+D"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:229
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230
|
||||
msgid "Shift+Alt+D"
|
||||
msgstr ""
|
||||
|
||||
@ -8344,7 +8438,7 @@ msgid "Eject this device"
|
||||
msgstr "Extraer o dispositivo"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:192
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194
|
||||
msgid "Library"
|
||||
msgstr "Biblioteca"
|
||||
|
||||
@ -10360,7 +10454,52 @@ msgstr ""
|
||||
msgid "Error: You must specify a column label"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:809
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:803
|
||||
msgid ""
|
||||
"\n"
|
||||
" %prog saved_searches [options] list\n"
|
||||
" %prog saved_searches add name search\n"
|
||||
" %prog saved_searches remove name\n"
|
||||
"\n"
|
||||
" Manage the saved searches stored in this database.\n"
|
||||
" If you try to add a query with a name that already exists, it will be\n"
|
||||
" replaced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:821
|
||||
msgid "Error: You must specify an action (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:829
|
||||
msgid "Name:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:830
|
||||
msgid "Search string:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:836
|
||||
msgid "Error: You must specify a name and a search string"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:839
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:844
|
||||
msgid "Error: You must specify a name"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:847
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:851
|
||||
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
|
||||
msgid ""
|
||||
"%%prog command [options] [arguments]\n"
|
||||
"\n"
|
||||
@ -10390,27 +10529,27 @@ msgstr ""
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1911
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1915
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1940
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1944
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr "A copiar <b>%s</b>"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1961
|
||||
msgid "Compacting database"
|
||||
msgstr "A compactar a base de datos"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2050
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2054
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr "A comprobar a integridade SQL..."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2091
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2095
|
||||
msgid "Checking for missing files."
|
||||
msgstr "A comprobar os ficheiros perdidos."
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2113
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2117
|
||||
msgid "Checked id"
|
||||
msgstr "id comprobada"
|
||||
|
||||
@ -10606,35 +10745,39 @@ msgid ""
|
||||
"overrides any per-library settings specified in the GUI"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:127
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d book"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129
|
||||
msgid "%d items"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:146
|
||||
msgid "RATING: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:147
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:149
|
||||
msgid "TAGS: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:151
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:153
|
||||
msgid "SERIES: %s [%s]<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:233
|
||||
msgid "Books in your library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:237
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:239
|
||||
msgid "By "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:238
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:240
|
||||
msgid "Books sorted by "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Newest"
|
||||
msgstr ""
|
||||
|
||||
|
10449
src/calibre/translations/mr.po
Normal file
@ -7,14 +7,14 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2010-08-18 22:24+0000\n"
|
||||
"PO-Revision-Date: 2010-08-19 10:53+0000\n"
|
||||
"POT-Creation-Date: 2010-08-20 20:19+0000\n"
|
||||
"PO-Revision-Date: 2010-08-20 22:26+0000\n"
|
||||
"Last-Translator: ppanhh <ppanhh@gmail.com>\n"
|
||||
"Language-Team: Vietnamese <vi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-20 03:34+0000\n"
|
||||
"X-Launchpad-Export-Date: 2010-08-22 03:46+0000\n"
|
||||
"X-Generator: Launchpad (build Unknown)\n"
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43
|
||||
@ -27,7 +27,7 @@ msgstr "hoàn toàn không thực thi"
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100
|
||||
@ -136,10 +136,10 @@ msgstr "hoàn toàn không thực thi"
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1762
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1885
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:201
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:137
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:139
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:70
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
|
||||
@ -750,7 +750,11 @@ msgstr ""
|
||||
msgid "Communicate with the Sweex MM300"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:79
|
||||
msgid "Communicate with the Kogan"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/misc.py:87
|
||||
msgid "Communicate with the Pandigital Novel"
|
||||
msgstr ""
|
||||
|
||||
@ -792,7 +796,7 @@ msgid ""
|
||||
"device. Possibilities include: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68
|
||||
msgid "Unnamed"
|
||||
msgstr "Chưa được đặt tên"
|
||||
@ -1539,7 +1543,11 @@ msgstr ""
|
||||
msgid "Creating"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20
|
||||
msgid "Failed to parse: %s with error: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:26
|
||||
msgid "ePub Fixer"
|
||||
msgstr ""
|
||||
|
||||
@ -1555,7 +1563,7 @@ msgid ""
|
||||
"cause significant changes to your epub, complain to the epubcheck project."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:19
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21
|
||||
msgid ""
|
||||
"%prog [options] file.epub\n"
|
||||
"\n"
|
||||
@ -1566,7 +1574,7 @@ msgid ""
|
||||
"detected. Use the options to control which errors are automatically fixed."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:50
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:52
|
||||
msgid "You must specify an epub file"
|
||||
msgstr ""
|
||||
|
||||
@ -1899,7 +1907,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:887
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:569
|
||||
msgid "Title"
|
||||
msgstr "Tựa"
|
||||
|
||||
@ -2965,6 +2973,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176
|
||||
@ -3038,7 +3047,8 @@ msgid "Select destination for %s.%s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d books"
|
||||
msgstr ""
|
||||
|
||||
@ -3103,14 +3113,45 @@ msgstr ""
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:15
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:63
|
||||
msgid "Copy to library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:64
|
||||
msgid "Copy selected books to the specified library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97
|
||||
msgid "Cannot copy"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102
|
||||
msgid "No library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103
|
||||
msgid "No library found at %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110
|
||||
msgid "Copying"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
msgid "Could not copy books: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123
|
||||
msgid "Copied %d books to %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:18
|
||||
msgid "Del"
|
||||
msgstr ""
|
||||
@ -3524,35 +3565,35 @@ msgstr ""
|
||||
msgid "Similar books..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Alt+A"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:22
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
msgid "Books by same author"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Alt+S"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:23
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
msgid "Books in this series"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Alt+P"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:24
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
msgid "Books by this publisher"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Alt+T"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:25
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:26
|
||||
msgid "Books with the same tags"
|
||||
msgstr ""
|
||||
|
||||
@ -3753,6 +3794,10 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384
|
||||
@ -3915,6 +3960,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
@ -5126,11 +5172,6 @@ msgstr ""
|
||||
msgid "Select folder to open as device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:684
|
||||
msgid "Error talking to device"
|
||||
msgstr ""
|
||||
@ -6223,7 +6264,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:889
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
@ -6401,6 +6442,63 @@ msgstr ""
|
||||
msgid "Downloading social metadata, please wait..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50
|
||||
msgid "Separator"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63
|
||||
msgid "Choose library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113
|
||||
msgid "The main toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114
|
||||
msgid "The main toolbar when a device is connected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115
|
||||
msgid "The context menu for the books in the calibre library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117
|
||||
msgid "The context menu for the books on the device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94
|
||||
msgid "Customize the actions in:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95
|
||||
msgid "A&vailable actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96
|
||||
msgid "&Current actions"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97
|
||||
msgid "Move selected action up"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99
|
||||
msgid "Move selected action down"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102
|
||||
msgid "Add selected actions to toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104
|
||||
msgid "Remove selected actions from toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50
|
||||
msgid "&Show this warning again"
|
||||
msgstr ""
|
||||
@ -7325,10 +7423,6 @@ msgstr ""
|
||||
msgid "Rename the item in every book where it is used."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78
|
||||
msgid "Ctrl+S"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51
|
||||
msgid "Test email settings"
|
||||
msgstr ""
|
||||
@ -7607,48 +7701,48 @@ msgstr ""
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
|
||||
msgid "Cover Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110
|
||||
msgid "Shift+Alt+B"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
|
||||
msgid "Tag Browser"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:125
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126
|
||||
msgid "Shift+Alt+T"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
msgid "version"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147
|
||||
msgid "created by Kovid Goyal"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:164
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165
|
||||
msgid "Connected "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174
|
||||
msgid "Update found"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:217
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:227
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228
|
||||
msgid "Book Details"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:219
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220
|
||||
msgid "Alt+D"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:229
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230
|
||||
msgid "Shift+Alt+D"
|
||||
msgstr ""
|
||||
|
||||
@ -7720,7 +7814,7 @@ msgid "Eject this device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:192
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194
|
||||
msgid "Library"
|
||||
msgstr ""
|
||||
|
||||
@ -9709,7 +9803,52 @@ msgstr ""
|
||||
msgid "Error: You must specify a column label"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:809
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:803
|
||||
msgid ""
|
||||
"\n"
|
||||
" %prog saved_searches [options] list\n"
|
||||
" %prog saved_searches add name search\n"
|
||||
" %prog saved_searches remove name\n"
|
||||
"\n"
|
||||
" Manage the saved searches stored in this database.\n"
|
||||
" If you try to add a query with a name that already exists, it will be\n"
|
||||
" replaced.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:821
|
||||
msgid "Error: You must specify an action (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:829
|
||||
msgid "Name:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:830
|
||||
msgid "Search string:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:836
|
||||
msgid "Error: You must specify a name and a search string"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:839
|
||||
msgid "added"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:844
|
||||
msgid "Error: You must specify a name"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:847
|
||||
msgid "removed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:851
|
||||
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
|
||||
msgid ""
|
||||
"%%prog command [options] [arguments]\n"
|
||||
"\n"
|
||||
@ -9739,27 +9878,27 @@ msgstr ""
|
||||
msgid "Main"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1911
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1915
|
||||
msgid "<p>Migrating old database to ebook library in %s<br><center>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1940
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1944
|
||||
msgid "Copying <b>%s</b>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1957
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1961
|
||||
msgid "Compacting database"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2050
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2054
|
||||
msgid "Checking SQL integrity..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2091
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2095
|
||||
msgid "Checking for missing files."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2113
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2117
|
||||
msgid "Checked id"
|
||||
msgstr ""
|
||||
|
||||
@ -9955,35 +10094,39 @@ msgid ""
|
||||
"overrides any per-library settings specified in the GUI"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:127
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110
|
||||
msgid "%d book"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:129
|
||||
msgid "%d items"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:146
|
||||
msgid "RATING: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:147
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:149
|
||||
msgid "TAGS: %s<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:151
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:153
|
||||
msgid "SERIES: %s [%s]<br />"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:231
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:233
|
||||
msgid "Books in your library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:237
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:239
|
||||
msgid "By "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:238
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:240
|
||||
msgid "Books sorted by "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:549
|
||||
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:568
|
||||
msgid "Newest"
|
||||
msgstr ""
|
||||
|
||||
|
@ -496,6 +496,7 @@ class DynamicConfig(dict):
|
||||
def __init__(self, name='dynamic'):
|
||||
dict.__init__(self, {})
|
||||
self.name = name
|
||||
self.defaults = {}
|
||||
self.file_path = os.path.join(config_dir, name+'.pickle')
|
||||
self.refresh()
|
||||
|
||||
@ -520,7 +521,13 @@ class DynamicConfig(dict):
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
except KeyError:
|
||||
return None
|
||||
return self.defaults.get(key, None)
|
||||
|
||||
def get(self, key, default=None):
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
except KeyError:
|
||||
return self.defaults.get(key, default)
|
||||
|
||||
def __setitem__(self, key, val):
|
||||
dict.__setitem__(self, key, val)
|
||||
@ -555,6 +562,7 @@ class XMLConfig(dict):
|
||||
|
||||
def __init__(self, rel_path_to_cf_file):
|
||||
dict.__init__(self)
|
||||
self.defaults = {}
|
||||
self.file_path = os.path.join(config_dir,
|
||||
*(rel_path_to_cf_file.split('/')))
|
||||
self.file_path = os.path.abspath(self.file_path)
|
||||
@ -592,7 +600,16 @@ class XMLConfig(dict):
|
||||
ans = ans.data
|
||||
return ans
|
||||
except KeyError:
|
||||
return None
|
||||
return self.defaults.get(key, None)
|
||||
|
||||
def get(self, key, default=None):
|
||||
try:
|
||||
ans = dict.__getitem__(self, key)
|
||||
if isinstance(ans, plistlib.Data):
|
||||
ans = ans.data
|
||||
return ans
|
||||
except KeyError:
|
||||
return self.defaults.get(key, default)
|
||||
|
||||
def __setitem__(self, key, val):
|
||||
if isinstance(val, (bytes, str)):
|
||||
@ -604,8 +621,9 @@ class XMLConfig(dict):
|
||||
self.__setitem__(key, val)
|
||||
|
||||
def __delitem__(self, key):
|
||||
dict.__delitem__(self, key)
|
||||
self.commit()
|
||||
if dict.has_key(self, key):
|
||||
dict.__delitem__(self, key)
|
||||
self.commit()
|
||||
|
||||
def commit(self):
|
||||
if hasattr(self, 'file_path') and self.file_path:
|
||||
@ -648,7 +666,16 @@ class JSONConfig(XMLConfig):
|
||||
return json.dumps(self, indent=2, default=to_json)
|
||||
|
||||
def __getitem__(self, key):
|
||||
return dict.__getitem__(self, key)
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
except KeyError:
|
||||
return self.defaults[key]
|
||||
|
||||
def get(self, key, default=None):
|
||||
try:
|
||||
return dict.__getitem__(self, key)
|
||||
except KeyError:
|
||||
return self.defaults.get(key, default)
|
||||
|
||||
def __setitem__(self, key, val):
|
||||
dict.__setitem__(self, key, val)
|
||||
|