From fe7876189cf792cb80bc1de3989635dba5e1e42b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 25 May 2009 20:31:00 -0700 Subject: [PATCH 01/22] Updated recipe for The New Yorker --- .../web/feeds/recipes/recipe_new_yorker.py | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/calibre/web/feeds/recipes/recipe_new_yorker.py b/src/calibre/web/feeds/recipes/recipe_new_yorker.py index 3ebc275d99..a3c01df8e9 100644 --- a/src/calibre/web/feeds/recipes/recipe_new_yorker.py +++ b/src/calibre/web/feeds/recipes/recipe_new_yorker.py @@ -1,53 +1,57 @@ #!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2008, Darko Miletic ' +__copyright__ = '2008-2009, Darko Miletic ' ''' newyorker.com ''' from calibre.web.feeds.news import BasicNewsRecipe +from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag class NewYorker(BasicNewsRecipe): - - title = u'The New Yorker' + title = 'The New Yorker' __author__ = 'Darko Miletic' - description = 'The best of US journalism' + description = 'The best of US journalism' oldest_article = 7 language = _('English') max_articles_per_feed = 100 - no_stylesheets = False + no_stylesheets = True use_embedded_content = False - extra_css = ''' - .calibre_feed_list {font-size:xx-small} - .calibre_article_list {font-size:xx-small} - .calibre_feed_title {font-size:normal} - .calibre_recipe_title {font-size:normal} - .calibre_feed_description {font-size:xx-small} - ''' + publisher = 'Conde Nast Publications' + category = 'news, politics, USA' + encoding = 'cp1252' + + html2lrf_options = [ + '--comment', description + , '--category', category + , '--publisher', publisher + ] + + html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' - - keep_only_tags = [ - dict(name='div' , attrs={'id':'printbody' }) - ] + keep_only_tags = [dict(name='div', attrs={'id':'printbody'})] + remove_tags_after = dict(name='div',attrs={'id':'articlebody'}) remove_tags = [ - dict(name='div' , attrs={'class':'utils' }) - ,dict(name='div' , attrs={'id':'bottomFeatures' }) - ,dict(name='div' , attrs={'id':'articleBottom' }) + dict(name='div', attrs={'class':['utils','articleRailLinks','icons'] }) + ,dict(name='link') ] - feeds = [ - (u'The New Yorker', u'http://feeds.newyorker.com/services/rss/feeds/everything.xml') - ] + feeds = [(u'The New Yorker', u'http://feeds.newyorker.com/services/rss/feeds/everything.xml')] def print_version(self, url): return url + '?printable=true' + def get_article_url(self, article): + return article.get('guid', None) + def postprocess_html(self, soup, x): body = soup.find('body') if body: html = soup.find('html') if html: body.extract() - html.insert(-1, body) + html.insert(2, body) + mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=utf-8")]) + soup.head.insert(1,mcharset) return soup From e35acbf1047b236e58a8a71a861269bb30611a80 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 26 May 2009 08:59:38 -0700 Subject: [PATCH 02/22] Fix title of Sueddeutsche recipe and fix generation of MAN pages in unicode environments --- src/calibre/utils/help2man.py | 17 ++++++++++------- .../web/feeds/recipes/recipe_sueddeutsche.py | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/calibre/utils/help2man.py b/src/calibre/utils/help2man.py index 9777ea24cd..173d760864 100644 --- a/src/calibre/utils/help2man.py +++ b/src/calibre/utils/help2man.py @@ -16,7 +16,7 @@ def create_man_page(prog, parser): else: usage[i] = line.replace('%prog', prog) lines = [ - '.TH ' + prog.upper() + ' "1" ' + time.strftime('"%B %Y"') + + '.TH ' + prog.upper() + ' "1" ' + time.strftime('"%B %Y"') + ' "%s (%s %s)" "%s"'%(prog, __appname__, __version__, __appname__), '.SH NAME', prog + r' \- part of '+__appname__, @@ -25,7 +25,7 @@ def create_man_page(prog, parser): '.SH DESCRIPTION', ] lines += usage[1:] - + lines += [ '.SH OPTIONS' ] @@ -39,7 +39,7 @@ def create_man_page(prog, parser): help = opt.help if opt.help else '' ans.append(help.replace('%prog', prog).replace('%default', str(opt.default))) return ans - + for opt in parser.option_list: lines.extend(format_option(opt)) for group in parser.option_groups: @@ -48,12 +48,15 @@ def create_man_page(prog, parser): lines.extend(['.PP', group.description]) for opt in group.option_list: lines.extend(format_option(opt)) - - lines += ['.SH SEE ALSO', + + lines += ['.SH SEE ALSO', 'The User Manual is available at ' 'http://calibre.kovidgoyal.net/user_manual', '.PP', '.B Created by '+__author__] - - return bz2.compress('\n'.join(lines)) + + lines = [x if isinstance(x, unicode) else unicode(x, 'utf-8', 'replace') for + x in lines] + + return bz2.compress((u'\n'.join(lines)).encode('utf-8')) diff --git a/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py b/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py index ab84f0b1a5..ae2cb86cfa 100644 --- a/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py +++ b/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py @@ -9,7 +9,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class Sueddeutsche(BasicNewsRecipe): - title = u'S\xc3\xbcddeutsche' + title = u'S\xfcddeutsche' description = 'News from Germany' __author__ = 'Oliver Niesner' use_embedded_content = False From 857d114ab939ceb97dc9093bcf823485a181d594 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 27 May 2009 10:31:27 -0700 Subject: [PATCH 03/22] New recipe for Electrolese by Oliver Niesner. Also updated recipes for Heise, Sueddeutsche and ZDnet --- COPYRIGHT | 2 +- src/calibre/gui2/images/news/elektrolese.png | Bin 0 -> 3535 bytes src/calibre/trac/plugins/download.py | 1 + .../plugins/htdocs/images/gentoo_logo.png | Bin 28862 -> 29484 bytes src/calibre/web/feeds/recipes/__init__.py | 2 +- .../web/feeds/recipes/recipe_elektrolese.py | 35 ++++++++++++++++++ src/calibre/web/feeds/recipes/recipe_heise.py | 33 +++++++++-------- .../web/feeds/recipes/recipe_sueddeutsche.py | 4 +- src/calibre/web/feeds/recipes/recipe_zdnet.py | 25 ++++++------- 9 files changed, 70 insertions(+), 32 deletions(-) create mode 100644 src/calibre/gui2/images/news/elektrolese.png create mode 100644 src/calibre/web/feeds/recipes/recipe_elektrolese.py diff --git a/COPYRIGHT b/COPYRIGHT index 16f64b7d09..1d8f7a5793 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -352,7 +352,7 @@ License: other Liberation Fonts ----------------- calibre includes a copy of the liberation fonts, available from -https://fedorahosted.org/liberation-fonts +https://calibre.kovidgoyal.net/downloads/liberation-fonts BSD License (for all the BSD licensed code indicated above) ----------------------------------------------------------- diff --git a/src/calibre/gui2/images/news/elektrolese.png b/src/calibre/gui2/images/news/elektrolese.png new file mode 100644 index 0000000000000000000000000000000000000000..a614cf6934d3c979aa022b818bce42f04beb74f1 GIT binary patch literal 3535 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 JPDHLkV1j8u#LEBx literal 0 HcmV?d00001 diff --git a/src/calibre/trac/plugins/download.py b/src/calibre/trac/plugins/download.py index dd25279071..ecf44ebfb5 100644 --- a/src/calibre/trac/plugins/download.py +++ b/src/calibre/trac/plugins/download.py @@ -39,6 +39,7 @@ def get_linux_data(version='1.0.0'): ('debian', 'Debian Sid'), ('exherbo', 'Exherbo'), ('foresight', 'Foresight 2.1'), + ('gentoo', 'Gentoo'), ('ubuntu', 'Ubuntu Jaunty Jackalope'), ('linux_mint', 'Linux Mint Gloria'), ]: diff --git a/src/calibre/trac/plugins/htdocs/images/gentoo_logo.png b/src/calibre/trac/plugins/htdocs/images/gentoo_logo.png index b0892849a9977e3dae9cd8929c180bb820fd2a69..d5b4564e351494ec8085f332454d5e2937f33a72 100644 GIT binary patch literal 29484 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 P00000NkvXXu0mjfm#iz4 literal 28862 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

&*8(bJ}DtD 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 diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index bd1b5098d9..6793c2864d 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -43,7 +43,7 @@ recipe_modules = ['recipe_' + r for r in ( 'seattle_times', 'scott_hanselman', 'coding_horror', 'twitchfilms', 'stackoverflow', 'telepolis_artikel', 'zaobao', 'usnews', 'straitstimes', 'index_hu', 'pcworld_hu', 'hrt', 'rts', - 'h1', 'h2', 'h3', 'phd_comics', 'woz_die', + 'h1', 'h2', 'h3', 'phd_comics', 'woz_die', 'elektrolese', )] import re, imp, inspect, time, os diff --git a/src/calibre/web/feeds/recipes/recipe_elektrolese.py b/src/calibre/web/feeds/recipes/recipe_elektrolese.py new file mode 100644 index 0000000000..46101f3a39 --- /dev/null +++ b/src/calibre/web/feeds/recipes/recipe_elektrolese.py @@ -0,0 +1,35 @@ +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal ' + +''' +Fetch elektrolese. +''' + +from calibre.web.feeds.news import BasicNewsRecipe + + +class elektrolese(BasicNewsRecipe): + + title = u'elektrolese' + description = 'News about electronic publishing' + __author__ = 'Oliver Niesner' + use_embedded_content = False + timefmt = ' [%a %d %b %Y]' + language = _('German') + oldest_article = 14 + max_articles_per_feed = 50 + no_stylesheets = True + #html2epub_options = 'linearize_tables = True\nbase_font_size2=14' + encoding = 'utf-8' + + + remove_tags_after = [dict(id='comments')] + filter_regexps = [r'ad\.doubleclick\.net'] + + remove_tags = [dict(name='div', attrs={'class':'bannerSuperBanner'}), + dict(id='comments')] + + + + feeds = [ (u'electrolese', u'http://elektrolese.blogspot.com/feeds/posts/default?alt=rss') ] + diff --git a/src/calibre/web/feeds/recipes/recipe_heise.py b/src/calibre/web/feeds/recipes/recipe_heise.py index 7dffa9b092..199bee4135 100644 --- a/src/calibre/web/feeds/recipes/recipe_heise.py +++ b/src/calibre/web/feeds/recipes/recipe_heise.py @@ -8,7 +8,7 @@ Fetch heise. from calibre.web.feeds.news import BasicNewsRecipe -class HeiseDe(BasicNewsRecipe): +class heiseDe(BasicNewsRecipe): title = 'heise' description = 'Computernews from Germany' @@ -20,23 +20,26 @@ class HeiseDe(BasicNewsRecipe): no_stylesheets = True remove_tags = [dict(id='navi_top'), - dict(id='navi_bottom'), - dict(id='logo'), - dict(id='login_suche'), - dict(id='navi_login'), - dict(id='navigation'), - dict(id='breadcrumb'), - dict(id=''), - dict(id='sitemap'), - dict(id='bannerzone'), - dict(name='span', attrs={'class':'rsaquo'}), - dict(name='div', attrs={'class':'news_logo'}), - dict(name='p', attrs={'class':'news_option'}), - dict(name='p', attrs={'class':'news_navi'}), - dict(name='p', attrs={'class':'news_foren'})] + dict(id='navi_bottom'), + dict(id='logo'), + dict(id='login_suche'), + dict(id='navi_login'), + dict(id='navigation'), + dict(id='breadcrumb'), + dict(id=''), + dict(id='sitemap'), + dict(id='bannerzone'), + dict(name='span', attrs={'class':'rsaquo'}), + dict(name='div', attrs={'class':'news_logo'}), + dict(name='div', attrs={'class':'bcadv ISI_IGNORE'}), + dict(name='p', attrs={'class':'news_option'}), + dict(name='p', attrs={'class':'news_navi'}), + dict(name='p', attrs={'class':'news_foren'})] remove_tags_after = [dict(name='p', attrs={'class':'news_foren'})] feeds = [ ('heise', 'http://www.heise.de/newsticker/heise.rdf') ] + + diff --git a/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py b/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py index ae2cb86cfa..07a8b10fa3 100644 --- a/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py +++ b/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py @@ -13,11 +13,11 @@ class Sueddeutsche(BasicNewsRecipe): description = 'News from Germany' __author__ = 'Oliver Niesner' use_embedded_content = False - language = _('German') timefmt = ' [%d %b %Y]' oldest_article = 7 max_articles_per_feed = 50 no_stylesheets = True + language = _('German') encoding = 'iso-8859-15' remove_javascript = True @@ -89,3 +89,5 @@ class Sueddeutsche(BasicNewsRecipe): def print_version(self, url): return url.replace('/text/', '/text/print.html') + + diff --git a/src/calibre/web/feeds/recipes/recipe_zdnet.py b/src/calibre/web/feeds/recipes/recipe_zdnet.py index 2297427b50..6bfc324379 100644 --- a/src/calibre/web/feeds/recipes/recipe_zdnet.py +++ b/src/calibre/web/feeds/recipes/recipe_zdnet.py @@ -6,11 +6,10 @@ Fetch zdnet. ''' from calibre.web.feeds.news import BasicNewsRecipe -import re class cdnet(BasicNewsRecipe): - + title = 'zdnet' description = 'zdnet security' __author__ = 'Oliver Niesner' @@ -19,16 +18,10 @@ class cdnet(BasicNewsRecipe): timefmt = ' [%d %b %Y]' max_articles_per_feed = 40 no_stylesheets = True - encoding = 'iso-8859-1' + encoding = 'latin1' + + - #preprocess_regexps = \ -# [(re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in -# [ -# (r'<84>', lambda match: ''), -# (r'<93>', lambda match: ''), -# ] -# ] - remove_tags = [dict(id='eyebrows'), dict(id='header'), dict(id='search'), @@ -36,12 +29,16 @@ class cdnet(BasicNewsRecipe): dict(id=''), dict(name='div', attrs={'class':'banner'}), dict(name='p', attrs={'class':'tags'}), + dict(name='a', attrs={'href':'http://www.twitter.com/ryanaraine'}), dict(name='div', attrs={'class':'special1'})] remove_tags_after = [dict(name='div', attrs={'class':'bloggerDesc clear'})] - - feeds = [ ('zdnet', 'http://feeds.feedburner.com/zdnet/security') ] - + + feeds = [ ('zdnet', 'http://feeds.feedburner.com/zdnet/security') ] + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + return soup From 8072415891ff100a74cbfaf07a9445b398e18a7a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 00:11:59 -0700 Subject: [PATCH 04/22] Welcome wizard --- src/calibre/__init__.py | 7 + src/calibre/gui2/convert/page_setup.py | 2 +- src/calibre/gui2/dialogs/config.py | 117 +----- src/calibre/gui2/dialogs/config.ui | 235 +----------- src/calibre/gui2/main.py | 92 ++--- src/calibre/gui2/wizard/__init__.py | 500 +++++++++++++++++++++++++ src/calibre/gui2/wizard/device.ui | 75 ++++ src/calibre/gui2/wizard/finish.ui | 108 ++++++ src/calibre/gui2/wizard/kindle.ui | 80 ++++ src/calibre/gui2/wizard/library.ui | 74 ++++ src/calibre/gui2/wizard/send_email.py | 143 +++++++ src/calibre/gui2/wizard/send_email.ui | 234 ++++++++++++ src/calibre/gui2/wizard/stanza.ui | 97 +++++ src/calibre/library/database2.py | 18 +- src/calibre/library/move.py | 63 ++++ src/calibre/library/static/calibre.png | Bin 27150 -> 25399 bytes src/calibre/trac/plugins/download.py | 4 +- src/calibre/utils/ipc/worker.py | 5 + src/calibre/web/fetch/simple.py | 2 +- todo | 2 - 20 files changed, 1466 insertions(+), 392 deletions(-) create mode 100644 src/calibre/gui2/wizard/__init__.py create mode 100644 src/calibre/gui2/wizard/device.ui create mode 100644 src/calibre/gui2/wizard/finish.ui create mode 100644 src/calibre/gui2/wizard/kindle.ui create mode 100644 src/calibre/gui2/wizard/library.ui create mode 100644 src/calibre/gui2/wizard/send_email.py create mode 100644 src/calibre/gui2/wizard/send_email.ui create mode 100644 src/calibre/gui2/wizard/stanza.ui create mode 100644 src/calibre/library/move.py diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index a08f0417ee..79dc659f34 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -45,6 +45,13 @@ def to_unicode(raw, encoding='utf-8', errors='strict'): return raw return raw.decode(encoding, errors) +def patheq(p1, p2): + p = os.path + d = lambda x : p.normcase(p.normpath(p.realpath(p.normpath(x)))) + if not p1 or not p2: + return False + return d(p1) == d(p2) + def unicode_path(path, abs=False): if not isinstance(path, unicode): path = path.decode(sys.getfilesystemencoding()) diff --git a/src/calibre/gui2/convert/page_setup.py b/src/calibre/gui2/convert/page_setup.py index 0d2ce91dd1..3f59537db0 100644 --- a/src/calibre/gui2/convert/page_setup.py +++ b/src/calibre/gui2/convert/page_setup.py @@ -35,7 +35,7 @@ class PageSetupWidget(Widget, Ui_Form): TITLE = _('Page Setup') def __init__(self, parent, get_option, get_help, db=None, book_id=None): - Widget.__init__(self, parent, 'lrf_output', + Widget.__init__(self, parent, 'page_setup', ['margin_top', 'margin_left', 'margin_right', 'margin_bottom', 'input_profile', 'output_profile'] ) diff --git a/src/calibre/gui2/dialogs/config.py b/src/calibre/gui2/dialogs/config.py index 8b1e61f546..0493ce73aa 100644 --- a/src/calibre/gui2/dialogs/config.py +++ b/src/calibre/gui2/dialogs/config.py @@ -1,7 +1,6 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import os, re, time, textwrap, sys, cStringIO -from binascii import hexlify, unhexlify +import os, re, time, textwrap from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \ QDesktopServices, QVBoxLayout, QLabel, QPlainTextEdit, \ @@ -12,7 +11,6 @@ from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \ from calibre.constants import islinux, iswindows from calibre.gui2.dialogs.config_ui import Ui_Dialog -from calibre.gui2.dialogs.test_email_ui import Ui_Dialog as TE_Dialog from calibre.gui2 import qstring_to_unicode, choose_dir, error_dialog, config, \ ALL_COLUMNS, NONE, info_dialog, choose_files from calibre.utils.config import prefs @@ -202,34 +200,6 @@ class CategoryModel(QStringListModel): return self.icons[index.row()] return QStringListModel.data(self, index, role) -class TestEmail(QDialog, TE_Dialog): - - def __init__(self, accounts, parent): - QDialog.__init__(self, parent) - TE_Dialog.__init__(self) - self.setupUi(self) - opts = smtp_prefs().parse() - self.test_func = parent.test_email_settings - self.connect(self.test_button, SIGNAL('clicked(bool)'), self.test) - self.from_.setText(unicode(self.from_.text())%opts.from_) - if accounts: - self.to.setText(list(accounts.keys())[0]) - if opts.relay_host: - self.label.setText(_('Using: %s:%s@%s:%s and %s encryption')% - (opts.relay_username, unhexlify(opts.relay_password), - opts.relay_host, opts.relay_port, opts.encryption)) - - def test(self): - self.log.setPlainText(_('Sending...')) - self.test_button.setEnabled(False) - try: - tb = self.test_func(unicode(self.to.text())) - if not tb: - tb = _('Mail successfully sent') - self.log.setPlainText(tb) - finally: - self.test_button.setEnabled(True) - class EmailAccounts(QAbstractTableModel): def __init__(self, accounts): @@ -477,32 +447,19 @@ class ConfigDialog(QDialog, Ui_Dialog): self.stackedWidget.insertWidget(2, self.conversion_options) def setup_email_page(self): - opts = smtp_prefs().parse() - if opts.from_: - self.email_from.setText(opts.from_) + def x(): + if self._email_accounts.account_order: + return self._email_accounts.account_order[0] + self.send_email_widget.initialize(x) + opts = self.send_email_widget.smtp_opts self._email_accounts = EmailAccounts(opts.accounts) self.email_view.setModel(self._email_accounts) - if opts.relay_host: - self.relay_host.setText(opts.relay_host) - self.relay_port.setValue(opts.relay_port) - if opts.relay_username: - self.relay_username.setText(opts.relay_username) - if opts.relay_password: - self.relay_password.setText(unhexlify(opts.relay_password)) - (self.relay_tls if opts.encryption == 'TLS' else self.relay_ssl).setChecked(True) - self.connect(self.relay_use_gmail, SIGNAL('clicked(bool)'), - self.create_gmail_relay) - self.connect(self.relay_show_password, SIGNAL('stateChanged(int)'), - lambda - state:self.relay_password.setEchoMode(self.relay_password.Password if - state == 0 else self.relay_password.Normal)) + self.connect(self.email_add, SIGNAL('clicked(bool)'), self.add_email_account) self.connect(self.email_make_default, SIGNAL('clicked(bool)'), lambda c: self._email_accounts.make_default(self.email_view.currentIndex())) self.email_view.resizeColumnsToContents() - self.connect(self.test_email_button, SIGNAL('clicked(bool)'), - self.test_email) self.connect(self.email_remove, SIGNAL('clicked()'), self.remove_email_account) @@ -516,68 +473,14 @@ class ConfigDialog(QDialog, Ui_Dialog): idx = self.email_view.currentIndex() self._email_accounts.remove(idx) - def create_gmail_relay(self, *args): - self.relay_username.setText('@gmail.com') - self.relay_password.setText('') - self.relay_host.setText('smtp.gmail.com') - self.relay_port.setValue(587) - self.relay_tls.setChecked(True) - - info_dialog(self, _('Finish gmail setup'), - _('Dont forget to enter your gmail username and password')).exec_() - self.relay_username.setFocus(Qt.OtherFocusReason) - self.relay_username.setCursorPosition(0) - def set_email_settings(self): - from_ = unicode(self.email_from.text()).strip() - if self._email_accounts.accounts and not from_: - error_dialog(self, _('Bad configuration'), - _('You must set the From email address')).exec_() - return False - username = unicode(self.relay_username.text()).strip() - password = unicode(self.relay_password.text()).strip() - host = unicode(self.relay_host.text()).strip() - if host and not (username and password): - error_dialog(self, _('Bad configuration'), - _('You must set the username and password for ' - 'the mail server.')).exec_() + to_set = bool(self._email_accounts.accounts) + if not self.send_email_widget.set_email_settings(to_set): return False conf = smtp_prefs() - conf.set('from_', from_) conf.set('accounts', self._email_accounts.accounts) - conf.set('relay_host', host if host else None) - conf.set('relay_port', self.relay_port.value()) - conf.set('relay_username', username if username else None) - conf.set('relay_password', hexlify(password)) - conf.set('encryption', 'TLS' if self.relay_tls.isChecked() else 'SSL') return True - def test_email(self, *args): - if self.set_email_settings(): - TestEmail(self._email_accounts.accounts, self).exec_() - - def test_email_settings(self, to): - opts = smtp_prefs().parse() - from calibre.utils.smtp import sendmail, create_mail - buf = cStringIO.StringIO() - oout, oerr = sys.stdout, sys.stderr - sys.stdout = sys.stderr = buf - tb = None - try: - msg = create_mail(opts.from_, to, 'Test mail from calibre', - 'Test mail from calibre') - sendmail(msg, from_=opts.from_, to=[to], - verbose=3, timeout=30, relay=opts.relay_host, - username=opts.relay_username, - password=unhexlify(opts.relay_password), - encryption=opts.encryption, port=opts.relay_port) - except: - import traceback - tb = traceback.format_exc() - tb += '\n\nLog:\n' + buf.getvalue() - finally: - sys.stdout, sys.stderr = oout, oerr - return tb def add_plugin(self): path = unicode(self.plugin_path.text()) @@ -722,7 +625,7 @@ class ConfigDialog(QDialog, Ui_Dialog): def browse(self): dir = choose_dir(self, 'database location dialog', - _('Select database location')) + _('Select location for books')) if dir: self.location.setText(dir) diff --git a/src/calibre/gui2/dialogs/config.ui b/src/calibre/gui2/dialogs/config.ui index 0ee6629f91..90a53364ca 100644 --- a/src/calibre/gui2/dialogs/config.ui +++ b/src/calibre/gui2/dialogs/config.ui @@ -541,38 +541,7 @@ - - - - calibre can send your books to you (or your reader) by email - - - true - - - - - - - - Send email &from: - - - email_from - - - - - - - <p>This is what will be present in the From: field of emails sent by calibre.<br> Set it to your email address - - - - - - @@ -640,195 +609,18 @@ - - - - <p>A mail server is useful if the service you are sending mail to only accepts email from well know mail services. + + + + calibre can send your books to you (or your reader) by email - - Mail &Server + + true - - - - - calibre can <b>optionally</b> use a server to send mail - - - true - - - - - - - &Hostname: - - - relay_host - - - - - - - The hostname of your mail server. For e.g. smtp.gmail.com - - - - - - - - - &Port: - - - relay_port - - - - - - - The port your mail server listens for connections on. The default is 25 - - - 1 - - - 65555 - - - 25 - - - - - - - - - &Username: - - - relay_username - - - - - - - Your username on the mail server - - - - - - - &Password: - - - relay_password - - - - - - - Your password on the mail server - - - QLineEdit::Password - - - - - - - &Show - - - - - - - &Encryption: - - - relay_tls - - - - - - - Use TLS encryption when connecting to the mail server. This is the most common. - - - &TLS - - - true - - - - - - - Use SSL encryption when connecting to the mail server. - - - &SSL - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - Use Gmail - - - - :/images/gmail_logo.png:/images/gmail_logo.png - - - - 48 - 48 - - - - Qt::ToolButtonTextUnderIcon - - - - - - - &Test email - - - - + + @@ -1062,7 +854,8 @@ - If you want to use the content server to access your ebook collection on your iphone with Stanza, you will need to add the URL http://myhostname:8080/stanza as a new catalog in the stanza reader on your iphone. Here myhostname should be the fully qualified hostname or the IP address of this computer. + <p>Remember to leave calibre running as the server only runs as long as calibre is running. +<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on. true @@ -1216,6 +1009,14 @@ + + + SendEmail + QWidget +

calibre/gui2/wizard/send_email.h
+ 1 + + diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 03c5f1dbdf..af04207863 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -11,11 +11,11 @@ from PyQt4.Qt import Qt, SIGNAL, QObject, QCoreApplication, QUrl, QTimer, \ QModelIndex, QPixmap, QColor, QPainter, QMenu, QIcon, \ QToolButton, QDialog, QDesktopServices, QFileDialog, \ QSystemTrayIcon, QApplication, QKeySequence, QAction, \ - QProgressDialog, QMessageBox, QStackedLayout + QMessageBox, QStackedLayout from PyQt4.QtSvg import QSvgRenderer from calibre import __version__, __appname__, sanitize_file_name, \ - iswindows, isosx, prints + iswindows, isosx, prints, patheq from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.config import prefs, dynamic from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \ @@ -27,6 +27,7 @@ from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \ available_width, GetMetadata from calibre.gui2.cover_flow import CoverFlow, DatabaseImages, pictureflowerror from calibre.gui2.widgets import ProgressIndicator +from calibre.gui2.wizard import move_library from calibre.gui2.dialogs.scheduler import Scheduler from calibre.gui2.update import CheckForUpdates from calibre.gui2.main_window import MainWindow, option_parser as _option_parser @@ -297,6 +298,14 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): QObject.connect(self.action_convert, SIGNAL('triggered(bool)'), self.convert_single) self.convert_menu = cm + pm = QMenu() + pm.addAction(self.action_preferences) + pm.addAction(_('Run welcome wizard')) + self.connect(pm.actions()[1], SIGNAL('triggered(bool)'), + self.run_wizard) + self.action_preferences.setMenu(pm) + self.preferences_menu = pm + self.tool_bar.widgetForAction(self.action_news).\ setPopupMode(QToolButton.MenuButtonPopup) self.tool_bar.widgetForAction(self.action_edit).\ @@ -311,6 +320,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): setPopupMode(QToolButton.MenuButtonPopup) self.tool_bar.widgetForAction(self.action_view).\ setPopupMode(QToolButton.MenuButtonPopup) + self.tool_bar.widgetForAction(self.action_preferences).\ + setPopupMode(QToolButton.MenuButtonPopup) self.tool_bar.setContextMenuPolicy(Qt.PreventContextMenu) self.connect(self.preferences_action, SIGNAL('triggered(bool)'), @@ -1376,56 +1387,27 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.save_menu.actions()[2].setText( _('Save only %s format to disk')% prefs['output_format'].upper()) - if self.library_path != d.database_location: - try: - newloc = d.database_location - if not os.path.exists(os.path.join(newloc, 'metadata.db')): - if os.access(self.library_path, os.R_OK): - pd = QProgressDialog('', '', 0, 100, self) - pd.setWindowModality(Qt.ApplicationModal) - pd.setCancelButton(None) - pd.setWindowTitle(_('Copying database')) - pd.show() - self.status_bar.showMessage( - _('Copying library to ')+newloc) - self.setCursor(Qt.BusyCursor) - self.library_view.setEnabled(False) - self.library_view.model().db.move_library_to( - newloc, pd) - else: - try: - db = LibraryDatabase2(newloc) - self.library_view.set_database(db) - except Exception, err: - traceback.print_exc() - d = error_dialog(self, _('Invalid database'), - _('

An invalid database already exists at ' - '%s, delete it before trying to move the ' - 'existing database.
Error: %s')%(newloc, - str(err))) - d.exec_() - self.library_path = \ - self.library_view.model().db.library_path - prefs['library_path'] = self.library_path - except Exception, err: - traceback.print_exc() - d = error_dialog(self, _('Could not move database'), - unicode(err)) - d.exec_() - finally: - self.unsetCursor() - self.library_view.setEnabled(True) - self.status_bar.clearMessage() - self.search.clear_to_help() - self.status_bar.reset_info() - self.library_view.sortByColumn(3, Qt.DescendingOrder) - self.library_view.resizeRowsToContents() if hasattr(d, 'directories'): set_sidebar_directories(d.directories) self.library_view.model().read_config() self.create_device_menu() + if not patheq(self.library_path, d.database_location): + newloc = d.database_location + move_library(self.library_path, newloc, self, + self.library_moved) + + + def library_moved(self, newloc): + if newloc is None: return + db = LibraryDatabase2(newloc) + self.library_view.set_database(db) + self.status_bar.clearMessage() + self.search.clear_to_help() + self.status_bar.reset_info() + self.library_view.sortByColumn(3, Qt.DescendingOrder) + ############################################################################ ################################ Book info ################################# @@ -1652,6 +1634,17 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.hide() return True + def run_wizard(self, *args): + if self.confirm_quit(): + self.run_wizard_b4_shutdown = True + self.restart_after_quit = True + try: + self.shutdown(write_settings=False) + except: + pass + QApplication.instance().quit() + + def closeEvent(self, e): self.write_settings() @@ -1726,12 +1719,19 @@ def init_qt(args): def run_gui(opts, args, actions, listener, app): initialize_file_icon_provider() + if not dynamic.get('welcome_wizard_was_run', False): + from calibre.gui2.wizard import wizard + wizard().exec_() + dynamic.set('welcome_wizard_was_run', True) main = Main(listener, opts, actions) sys.excepthook = main.unhandled_exception if len(args) > 1: args[1] = os.path.abspath(args[1]) main.add_filesystem_book(args[1]) ret = app.exec_() + if getattr(main, 'run_wizard_b4_shutdown', False): + from calibre.gui2.wizard import wizard + wizard().exec_() if getattr(main, 'restart_after_quit', False): e = sys.executable if getattr(sys, 'froze', False) else sys.argv[0] print 'Restarting with:', e, sys.argv diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py new file mode 100644 index 0000000000..3e18a638aa --- /dev/null +++ b/src/calibre/gui2/wizard/__init__.py @@ -0,0 +1,500 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import with_statement + +__license__ = 'GPL v3' +__copyright__ = '2009, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import os, traceback, re +from Queue import Empty, Queue +from contextlib import closing + + +from PyQt4.Qt import QWizard, QWizardPage, QPixmap, Qt, QAbstractListModel, \ + QVariant, QItemSelectionModel, SIGNAL, QObject, QTimer +from calibre import __appname__, patheq +from calibre.library.database2 import LibraryDatabase2 +from calibre.library.move import MoveLibrary +from calibre.resources import server_resources +from calibre.gui2.wizard.send_email import smtp_prefs +from calibre.gui2.wizard.device_ui import Ui_WizardPage as DeviceUI +from calibre.gui2.wizard.library_ui import Ui_WizardPage as LibraryUI +from calibre.gui2.wizard.finish_ui import Ui_WizardPage as FinishUI +from calibre.gui2.wizard.kindle_ui import Ui_WizardPage as KindleUI +from calibre.gui2.wizard.stanza_ui import Ui_WizardPage as StanzaUI + +from calibre.utils.config import dynamic, prefs +from calibre.gui2 import NONE, choose_dir, error_dialog +from calibre.gui2.dialogs.progress import ProgressDialog + +class Device(object): + + output_profile = 'default' + output_format = 'EPUB' + name = _('Default') + manufacturer = _('Default') + id = 'default' + + @classmethod + def set_output_profile(cls): + if cls.output_profile: + from calibre.ebooks.conversion.config import load_defaults, save_defaults + recs = load_defaults('page_setup') + recs['output_profile'] = cls.output_profile + save_defaults('page_setup', recs) + + @classmethod + def set_output_format(cls): + if cls.output_format: + prefs.set('output_format', cls.output_format) + + @classmethod + def commit(cls): + cls.set_output_profile() + cls.set_output_format() + +class Kindle(Device): + + output_profile = 'kindle' + output_format = 'MOBI' + name = 'Kindle 1 or 2' + manufacturer = 'Amazon' + id = 'kindle' + +class Sony500(Device): + + output_profile = 'sony' + name = 'SONY PRS 500' + output_format = 'LRF' + manufacturer = 'SONY' + id = 'prs500' + +class Sony505(Sony500): + + output_format = 'EPUB' + name = 'SONY PRS 505/700' + id = 'prs505' + +class CybookG3(Device): + + name = 'Cybook Gen 3' + output_format = 'MOBI' + output_profile = 'cybookg3' + manufacturer = 'Booken' + id = 'cybookg3' + +class BeBook(Device): + + name = 'BeBook or BeBook Mini' + output_format = 'EPUB' + output_profile = 'sony' + manufacturer = 'Endless Ideas' + id = 'bebook' + +class iPhone(Device): + + name = 'iPhone/iTouch + Stanza' + output_format = 'EPUB' + manufacturer = 'Apple' + id = 'iphone' + +class Hanlin(Device): + + name = 'Hanlin V3' + output_format = 'MOBI' + output_profile = 'hanlinv3' + manufacturer = 'Hanlin' + id = 'hanlinv3' + +def get_devices(): + for x in globals().values(): + if isinstance(x, type) and issubclass(x, Device): + yield x + +def get_manufacturers(): + mans = set([]) + for x in get_devices(): + mans.add(x.manufacturer) + mans.remove(_('Default')) + return [_('Default')] + sorted(mans) + +def get_devices_of(manufacturer): + ans = [d for d in get_devices() if d.manufacturer == manufacturer] + return sorted(ans, cmp=lambda x,y:cmp(x.name, y.name)) + +class ManufacturerModel(QAbstractListModel): + + def __init__(self): + QAbstractListModel.__init__(self) + self.manufacturers = get_manufacturers() + + def rowCount(self, p): + return len(self.manufacturers) + + def columnCount(self, p): + return 1 + + def data(self, index, role): + if role == Qt.DisplayRole: + return QVariant(self.manufacturers[index.row()]) + if role == Qt.UserRole: + return self.manufacturers[index.row()] + return NONE + + def index_of(self, man): + for i, x in enumerate(self.manufacturers): + if x == man: + return self.index(i) + +class DeviceModel(QAbstractListModel): + + def __init__(self, manufacturer): + QAbstractListModel.__init__(self) + self.devices = get_devices_of(manufacturer) + + def rowCount(self, p): + return len(self.devices) + + def columnCount(self, p): + return 1 + + def data(self, index, role): + if role == Qt.DisplayRole: + return QVariant(self.devices[index.row()].name) + if role == Qt.UserRole: + return self.devices[index.row()] + return NONE + + def index_of(self, dev): + for i, device in enumerate(self.devices): + if device is dev: + return self.index(i) + +class KindlePage(QWizardPage, KindleUI): + + ID = 3 + + def __init__(self): + QWizardPage.__init__(self) + self.setupUi(self) + + def initializePage(self): + opts = smtp_prefs().parse() + for x in opts.accounts.keys(): + if x.strip().endswith('@kindle.com'): + self.to_address.setText(x) + def x(): + t = unicode(self.to_address.text()) + if t.strip(): + return t.strip() + + self.send_email_widget.initialize(x) + + def commit(self): + x = unicode(self.to_address.text()).strip() + parts = x.split('@') + if len(parts) < 2 or not parts[0]: return + + if self.send_email_widget.set_email_settings(True): + conf = smtp_prefs() + accounts = conf.get('accounts', {}) + if not accounts: accounts = {} + for y in accounts.values(): + y[2] = False + accounts[x] = ['AZW, MOBI, TPZ, PRC, AZW1', True, True] + conf.set('accounts', accounts) + + def nextId(self): + return FinishPage.ID + +class StanzaPage(QWizardPage, StanzaUI): + + ID = 5 + + def __init__(self): + QWizardPage.__init__(self) + self.setupUi(self) + self.connect(self.content_server, SIGNAL('stateChanged(int)'), self.set_port) + + def initializePage(self): + from calibre.gui2 import config + yes = config['autolaunch_server'] + self.content_server.setChecked(yes) + self.set_port() + + def nextId(self): + return FinishPage.ID + + def commit(self): + p = self.set_port() + if p is not None: + from calibre.library import server_config + c = server_config() + c.set('port', p) + + + def set_port(self, *args): + if not self.content_server.isChecked(): return + import socket + s = socket.socket() + with closing(s): + for p in range(8080, 8100): + try: + s.bind(('0.0.0.0', p)) + t = unicode(self.instructions.text()) + t = re.sub(r':\d+', ':'+str(p), t) + self.instructions.setText(t) + return p + except: + continue + + + + +class DevicePage(QWizardPage, DeviceUI): + + ID = 2 + + def __init__(self): + QWizardPage.__init__(self) + self.setupUi(self) + self.registerField("manufacturer", self.manufacturer_view) + self.registerField("device", self.device_view) + + def initializePage(self): + self.man_model = ManufacturerModel() + self.manufacturer_view.setModel(self.man_model) + previous = dynamic.get('welcome_wizard_device', False) + if previous: + previous = [x for x in get_devices() if \ + x.id == previous] + if not previous: + previous = [Device] + previous = previous[0] + else: + previous = Device + idx = self.man_model.index_of(previous.manufacturer) + if idx is None: + idx = self.man_model.index_of(Device.manufacturer) + previous = Device + self.manufacturer_view.selectionModel().select(idx, + QItemSelectionModel.Select) + self.dev_model = DeviceModel(self.man_model.data(idx, Qt.UserRole)) + idx = self.dev_model.index_of(previous) + self.device_view.setModel(self.dev_model) + self.device_view.selectionModel().select(idx, + QItemSelectionModel.Select) + self.connect(self.manufacturer_view.selectionModel(), + SIGNAL('selectionChanged(QItemSelection,QItemSelection)'), + self.manufacturer_changed) + + def manufacturer_changed(self, current, previous): + new = list(current.indexes())[0] + man = self.man_model.data(new, Qt.UserRole) + self.dev_model = DeviceModel(man) + self.device_view.setModel(self.dev_model) + self.device_view.selectionModel().select(self.dev_model.index(0), + QItemSelectionModel.Select) + + def commit(self): + idx = list(self.device_view.selectionModel().selectedIndexes())[0] + dev = self.dev_model.data(idx, Qt.UserRole) + dev.commit() + dynamic.set('welcome_wizard_device', dev.id) + + def nextId(self): + idx = list(self.device_view.selectionModel().selectedIndexes())[0] + dev = self.dev_model.data(idx, Qt.UserRole) + if dev is Kindle: + return KindlePage.ID + if dev is iPhone: + return StanzaPage.ID + return FinishPage.ID + +class MoveMonitor(QObject): + + def __init__(self, worker, rq, callback, parent): + QObject.__init__(self, parent) + self.worker = worker + self.rq = rq + self.callback = callback + self.parent = parent + + self.worker.start() + self.dialog = ProgressDialog(_('Moving library...'), '', + max=self.worker.total, parent=parent) + self.dialog.button_box.setDisabled(True) + self.dialog.setModal(True) + self.dialog.show() + self.timer = QTimer(self) + self.connect(self.timer, SIGNAL('timeout()'), self.check) + self.timer.start(200) + + def check(self): + if self.worker.is_alive(): + self.update() + else: + self.timer.stop() + self.dialog.hide() + if self.worker.failed: + error_dialog(self.parent, _('Failed to move library'), + _('Failed to move library'), self.worker.details, show=True) + return self.callback(None) + else: + return self.callback(self.worker.to) + + def update(self): + try: + title = self.rq.get_nowait()[-1] + self.dialog.value += 1 + self.dialog.set_msg(_('Copied') + ' '+title) + except Empty: + pass + + +class Callback(object): + + def __init__(self, callback): + self.callback = callback + + def __call__(self, newloc): + if newloc is not None: + prefs['library_path'] = newloc + self.callback(newloc) + +_mm = None +def move_library(oldloc, newloc, parent, callback_on_complete): + callback = Callback(callback_on_complete) + try: + if not os.path.exists(os.path.join(newloc, 'metadata.db')): + if oldloc and os.access(os.path.join(oldloc, 'metadata.db'), os.R_OK): + # Move old library to new location + try: + db = LibraryDatabase2(oldloc) + except: + return move_library(None, newloc, parent, + callback) + else: + rq = Queue() + m = MoveLibrary(oldloc, newloc, db.data.count(), rq) + global _mm + _mm = MoveMonitor(m, rq, callback, parent) + return + else: + # Create new library at new location + db = LibraryDatabase2(newloc) + callback(newloc) + return + + # Try to load existing library at new location + try: + ndb = LibraryDatabase2(newloc) + except Exception, err: + det = traceback.format_exc() + error_dialog(parent, _('Invalid database'), + _('

An invalid library already exists at ' + '%s, delete it before trying to move the ' + 'existing library.
Error: %s')%(newloc, + str(err)), det, show=True) + callback(None) + return + else: + callback(newloc) + return + except Exception, err: + det = traceback.format_exc() + error_dialog(parent, _('Could not move library'), + unicode(err), det, show=True) + callback(None) + +class LibraryPage(QWizardPage, LibraryUI): + + ID = 1 + + def __init__(self): + QWizardPage.__init__(self) + self.setupUi(self) + self.registerField('library_location', self.location) + self.connect(self.button_change, SIGNAL('clicked()'), self.change) + + def change(self): + dir = choose_dir(self, 'database location dialog', + _('Select location for books')) + if dir: + self.location.setText(dir) + + def initializePage(self): + lp = prefs['library_path'] + if not lp: + lp = os.path.expanduser('~') + self.location.setText(lp) + + def isComplete(self): + lp = unicode(self.location.text()) + return lp and os.path.exists(lp) and os.path.isdir(lp) and os.access(lp, + os.W_OK) + + def commit(self, completed): + oldloc = prefs['library_path'] + newloc = unicode(self.location.text()) + if not patheq(oldloc, newloc): + move_library(oldloc, newloc, self.wizard(), completed) + return True + return False + + def nextId(self): + return DevicePage.ID + +class FinishPage(QWizardPage, FinishUI): + + ID = 4 + + def __init__(self): + QWizardPage.__init__(self) + self.setupUi(self) + + def nextId(self): + return -1 + + + +class Wizard(QWizard): + + def __init__(self, parent): + QWizard.__init__(self, parent) + self.setWindowTitle(__appname__+' '+_('welcome wizard')) + p = QPixmap() + p.loadFromData(server_resources['calibre.png']) + self.setPixmap(self.LogoPixmap, p.scaledToHeight(80, + Qt.SmoothTransformation)) + self.device_page = DevicePage() + self.library_page = LibraryPage() + self.finish_page = FinishPage() + self.kindle_page = KindlePage() + self.stanza_page = StanzaPage() + self.setPage(self.library_page.ID, self.library_page) + self.setPage(self.device_page.ID, self.device_page) + self.setPage(self.finish_page.ID, self.finish_page) + self.setPage(self.kindle_page.ID, self.kindle_page) + self.setPage(self.stanza_page.ID, self.stanza_page) + + self.device_extra_page = None + + def accept(self): + self.device_page.commit() + if not self.library_page.commit(self.completed): + self.completed(None) + + def completed(self, newloc): + return QWizard.accept(self) + +def wizard(parent=None): + w = Wizard(parent) + return w + +if __name__ == '__main__': + from PyQt4.Qt import QApplication + app = QApplication([]) + wizard().exec_() + diff --git a/src/calibre/gui2/wizard/device.ui b/src/calibre/gui2/wizard/device.ui new file mode 100644 index 0000000000..27af13b3ed --- /dev/null +++ b/src/calibre/gui2/wizard/device.ui @@ -0,0 +1,75 @@ + + + WizardPage + + + + 0 + 0 + 400 + 300 + + + + Welcome to calibre + + + + :/images/wizard.svg:/images/wizard.svg + + + Welcome to calibre + + + The one stop solution to all your e-book needs. + + + + + + Choose your book reader. This will set the conversion options to produce books optimized for your device. + + + true + + + + + + + &Manufacturers + + + + + + QAbstractItemView::SelectRows + + + + + + + + + + &Devices + + + + + + QAbstractItemView::SelectRows + + + + + + + + + + + + + diff --git a/src/calibre/gui2/wizard/finish.ui b/src/calibre/gui2/wizard/finish.ui new file mode 100644 index 0000000000..b42e8b1c32 --- /dev/null +++ b/src/calibre/gui2/wizard/finish.ui @@ -0,0 +1,108 @@ + + + WizardPage + + + + 0 + 0 + 400 + 300 + + + + WizardPage + + + Welcome to calibre + + + The one stop solution to all your e-book needs. + + + + + + <h2>Congratulations!</h2> You have succesfully setup calibre. Press the Finish button to apply your settings. + + + true + + + + + + + Qt::Vertical + + + + 20 + 56 + + + + + + + + <h2>Demo videos</h2>Videos demonstrating the various features of calibre are available <a href="http://calibre.kovidgoyal.net/downloads/videos/">online</a>. + + + true + + + true + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + + + + + + + Qt::Vertical + + + + 20 + 56 + + + + + + + + <h2>User Manual</h2>A User Manual is also available <a href="http://calibre.kovidgoyal.net/user_manual">online</a>. + + + true + + + true + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/calibre/gui2/wizard/kindle.ui b/src/calibre/gui2/wizard/kindle.ui new file mode 100644 index 0000000000..7bafc6d618 --- /dev/null +++ b/src/calibre/gui2/wizard/kindle.ui @@ -0,0 +1,80 @@ + + + WizardPage + + + + 0 + 0 + 400 + 300 + + + + WizardPage + + + Welcome to calibre + + + The one stop solution to all your e-book needs. + + + + + + <p>calibre can automatically send books by email to your Kindle. To do that you have to setup email delivery below. The easiest way is to setup a free <a href="http://gmail.com">gmail account</a> and click the Use gmail button below. You will also have to register your gmail address in your Amazon account. + + + true + + + true + + + Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse + + + + + + + &Kindle email: + + + to_address + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + SendEmail + QWidget +

calibre/gui2/wizard/send_email.h
+ 1 + + + + + diff --git a/src/calibre/gui2/wizard/library.ui b/src/calibre/gui2/wizard/library.ui new file mode 100644 index 0000000000..d3c93bbd3c --- /dev/null +++ b/src/calibre/gui2/wizard/library.ui @@ -0,0 +1,74 @@ + + + WizardPage + + + + 0 + 0 + 481 + 300 + + + + WizardPage + + + Welcome to calibre + + + The one stop solution to all your e-book needs. + + + + + + Choose a location for your books. When you add books to calibre, they will be stored here: + + + true + + + + + + + true + + + + + + + &Change + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + If you have an existing calibre library, it will be copied to the new location. If a calibre library already exists at the new location, calibre will switch to using it. + + + true + + + + + + + + diff --git a/src/calibre/gui2/wizard/send_email.py b/src/calibre/gui2/wizard/send_email.py new file mode 100644 index 0000000000..5650279c15 --- /dev/null +++ b/src/calibre/gui2/wizard/send_email.py @@ -0,0 +1,143 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import with_statement + +__license__ = 'GPL v3' +__copyright__ = '2009, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import cStringIO, sys +from binascii import hexlify, unhexlify + +from PyQt4.Qt import QWidget, SIGNAL, QDialog, Qt + +from calibre.gui2.wizard.send_email_ui import Ui_Form +from calibre.utils.smtp import config as smtp_prefs +from calibre.gui2.dialogs.test_email_ui import Ui_Dialog as TE_Dialog +from calibre.gui2 import error_dialog, info_dialog + +class TestEmail(QDialog, TE_Dialog): + + def __init__(self, pa, parent): + QDialog.__init__(self, parent) + TE_Dialog.__init__(self) + self.setupUi(self) + opts = smtp_prefs().parse() + self.test_func = parent.test_email_settings + self.connect(self.test_button, SIGNAL('clicked(bool)'), self.test) + self.from_.setText(unicode(self.from_.text())%opts.from_) + if pa: + self.to.setText(pa) + if opts.relay_host: + self.label.setText(_('Using: %s:%s@%s:%s and %s encryption')% + (opts.relay_username, unhexlify(opts.relay_password), + opts.relay_host, opts.relay_port, opts.encryption)) + + def test(self): + self.log.setPlainText(_('Sending...')) + self.test_button.setEnabled(False) + try: + tb = self.test_func(unicode(self.to.text())) + if not tb: + tb = _('Mail successfully sent') + self.log.setPlainText(tb) + finally: + self.test_button.setEnabled(True) + + +class SendEmail(QWidget, Ui_Form): + + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self.setupUi(self) + + def initialize(self, preferred_to_address): + self.preferred_to_address = preferred_to_address + opts = smtp_prefs().parse() + self.smtp_opts = opts + if opts.from_: + self.email_from.setText(opts.from_) + if opts.relay_host: + self.relay_host.setText(opts.relay_host) + self.relay_port.setValue(opts.relay_port) + if opts.relay_username: + self.relay_username.setText(opts.relay_username) + if opts.relay_password: + self.relay_password.setText(unhexlify(opts.relay_password)) + (self.relay_tls if opts.encryption == 'TLS' else self.relay_ssl).setChecked(True) + self.connect(self.relay_use_gmail, SIGNAL('clicked(bool)'), + self.create_gmail_relay) + self.connect(self.relay_show_password, SIGNAL('stateChanged(int)'), + lambda + state:self.relay_password.setEchoMode(self.relay_password.Password if + state == 0 else self.relay_password.Normal)) + self.connect(self.test_email_button, SIGNAL('clicked(bool)'), + self.test_email) + + + def test_email(self, *args): + pa = self.preferred_to_address() + to_set = pa is not None + if self.set_email_settings(to_set): + TestEmail(pa, self).exec_() + + def test_email_settings(self, to): + opts = smtp_prefs().parse() + from calibre.utils.smtp import sendmail, create_mail + buf = cStringIO.StringIO() + oout, oerr = sys.stdout, sys.stderr + sys.stdout = sys.stderr = buf + tb = None + try: + msg = create_mail(opts.from_, to, 'Test mail from calibre', + 'Test mail from calibre') + sendmail(msg, from_=opts.from_, to=[to], + verbose=3, timeout=30, relay=opts.relay_host, + username=opts.relay_username, + password=unhexlify(opts.relay_password), + encryption=opts.encryption, port=opts.relay_port) + except: + import traceback + tb = traceback.format_exc() + tb += '\n\nLog:\n' + buf.getvalue() + finally: + sys.stdout, sys.stderr = oout, oerr + return tb + + def create_gmail_relay(self, *args): + self.relay_username.setText('@gmail.com') + self.relay_password.setText('') + self.relay_host.setText('smtp.gmail.com') + self.relay_port.setValue(587) + self.relay_tls.setChecked(True) + + info_dialog(self, _('Finish gmail setup'), + _('Dont forget to enter your gmail username and password')).exec_() + self.relay_username.setFocus(Qt.OtherFocusReason) + self.relay_username.setCursorPosition(0) + + def set_email_settings(self, to_set): + from_ = unicode(self.email_from.text()).strip() + if to_set and not from_: + error_dialog(self, _('Bad configuration'), + _('You must set the From email address')).exec_() + return False + username = unicode(self.relay_username.text()).strip() + password = unicode(self.relay_password.text()).strip() + host = unicode(self.relay_host.text()).strip() + if host and not (username and password): + error_dialog(self, _('Bad configuration'), + _('You must set the username and password for ' + 'the mail server.')).exec_() + return False + conf = smtp_prefs() + conf.set('from_', from_) + conf.set('relay_host', host if host else None) + conf.set('relay_port', self.relay_port.value()) + conf.set('relay_username', username if username else None) + conf.set('relay_password', hexlify(password)) + conf.set('encryption', 'TLS' if self.relay_tls.isChecked() else 'SSL') + return True + + + diff --git a/src/calibre/gui2/wizard/send_email.ui b/src/calibre/gui2/wizard/send_email.ui new file mode 100644 index 0000000000..3802d7f451 --- /dev/null +++ b/src/calibre/gui2/wizard/send_email.ui @@ -0,0 +1,234 @@ + + + Form + + + + 0 + 0 + 585 + 238 + + + + Form + + + + + + + + Send email &from: + + + email_from + + + + + + + <p>This is what will be present in the From: field of emails sent by calibre.<br> Set it to your email address + + + + + + + + + <p>A mail server is useful if the service you are sending mail to only accepts email from well know mail services. + + + Mail &Server + + + + + + calibre can <b>optionally</b> use a server to send mail + + + true + + + + + + + &Hostname: + + + relay_host + + + + + + + The hostname of your mail server. For e.g. smtp.gmail.com + + + + + + + + + &Port: + + + relay_port + + + + + + + The port your mail server listens for connections on. The default is 25 + + + 1 + + + 65555 + + + 25 + + + + + + + + + &Username: + + + relay_username + + + + + + + Your username on the mail server + + + + + + + &Password: + + + relay_password + + + + + + + Your password on the mail server + + + QLineEdit::Password + + + + + + + &Show + + + + + + + &Encryption: + + + relay_tls + + + + + + + Use TLS encryption when connecting to the mail server. This is the most common. + + + &TLS + + + true + + + + + + + Use SSL encryption when connecting to the mail server. + + + &SSL + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Use Gmail + + + + :/images/gmail_logo.png:/images/gmail_logo.png + + + + 48 + 48 + + + + Qt::ToolButtonTextUnderIcon + + + + + + + &Test email + + + + + + + + + + + + diff --git a/src/calibre/gui2/wizard/stanza.ui b/src/calibre/gui2/wizard/stanza.ui new file mode 100644 index 0000000000..6dee91f8fc --- /dev/null +++ b/src/calibre/gui2/wizard/stanza.ui @@ -0,0 +1,97 @@ + + + WizardPage + + + + 0 + 0 + 400 + 300 + + + + WizardPage + + + Welcome to calibre + + + The one stop solution to all your e-book needs. + + + + + + <p>If you use the <a href="http://www.lexcycle.com/download">Stanza</a> e-book app on your iPhone/iTouch, you can access your calibre book collection directly on the device. To do this you have to turn on the calibre content server. + + + true + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Turn on the &content server + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + <p>Remember to leave calibre running as the server only runs as long as calibre is running. +<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on. + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 9135182258..1b373bf738 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1282,21 +1282,12 @@ class LibraryDatabase2(LibraryDatabase): if notify: self.notify('add', [id]) - def move_library_to(self, newloc, progress=None): - header = _(u'

Copying books to %s

')%newloc + def move_library_to(self, newloc, progress=lambda x: x): books = self.conn.get('SELECT id, path, title FROM books') - if progress is not None: - progress.setValue(0) - progress.setLabelText(header) - QCoreApplication.processEvents() - progress.setAutoReset(False) - progress.setRange(0, len(books)) if not os.path.exists(newloc): os.makedirs(newloc) old_dirs = set([]) for i, book in enumerate(books): - if progress is not None: - progress.setLabelText(header+_(u'Copying %s')%book[2]) path = book[1] if not path: continue @@ -1308,8 +1299,7 @@ class LibraryDatabase2(LibraryDatabase): if os.path.exists(srcdir): shutil.copytree(srcdir, tdir) old_dirs.add(srcdir) - if progress is not None: - progress.setValue(i+1) + progress(book[2]) dbpath = os.path.join(newloc, os.path.basename(self.dbpath)) shutil.copyfile(self.dbpath, dbpath) @@ -1323,10 +1313,6 @@ class LibraryDatabase2(LibraryDatabase): shutil.rmtree(dir) except: pass - if progress is not None: - progress.reset() - progress.hide() - def __iter__(self): for record in self.data._data: diff --git a/src/calibre/library/move.py b/src/calibre/library/move.py new file mode 100644 index 0000000000..d162d962fe --- /dev/null +++ b/src/calibre/library/move.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import with_statement + +__license__ = 'GPL v3' +__copyright__ = '2009, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import time, os +from threading import Thread +from Queue import Empty + +from calibre.library.database2 import LibraryDatabase2 +from calibre.utils.ipc.server import Server +from calibre.utils.ipc.job import ParallelJob + + +def move_library(from_, to, notification = lambda x:x): + time.sleep(1) + old = LibraryDatabase2(from_) + old.move_library_to(to, notification) + return True + +class MoveLibrary(Thread): + + def __init__(self, from_, to, count, result_queue): + Thread.__init__(self) + self.total = count + self.result_queue = result_queue + self.from_ = from_ + self.to = to + self.count = 0 + self.failed = False + self.details = None + + def run(self): + job = ParallelJob('move_library', + 'Move library from %s to %s'%(self.from_, self.to), + lambda x,y:x, + args=[self.from_, self.to]) + server = Server(pool_size=1) + server.add_job(job) + + while not job.is_finished: + time.sleep(0.2) + job.update(consume_notifications=False) + while True: + try: + title = job.notifications.get_nowait()[0] + self.count += 1 + self.result_queue.put((float(self.count)/self.total, title)) + except Empty: + break + + job.update() + server.close() + if not job.result: + self.failed = True + self.details = job.details + + if os.path.exists(job.log_path): + os.remove(job.log_path) + diff --git a/src/calibre/library/static/calibre.png b/src/calibre/library/static/calibre.png index f42e4926cab58d97b12c7864a22bee74a6ae8047..871a5e31a802e1fd907f3a5407cd3ddc026aa244 100644 GIT binary patch literal 25399 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', re.DOTALL).sub('', dsrc).strip()) == 0: raise ValueError('No content at URL %s'%iurl) if self.encoding is not None: - dsrc = dsrc.decode(self.encoding, 'ignore') + dsrc = dsrc.decode(self.encoding, 'replace') else: dsrc = xml_to_unicode(dsrc, self.verbose)[0] diff --git a/todo b/todo index 2777a54070..bff97ad7e8 100644 --- a/todo +++ b/todo @@ -5,7 +5,5 @@ * Testing framework -* Welcome wizard - * MOBI navigation indexing support From 23dd44edc2dbc9e7fc0ad86bf84ebe937b0614db Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 09:00:31 -0700 Subject: [PATCH 05/22] Fix #2515 (eBook Viewer cannot open TAZ epub file) --- src/calibre/ebooks/epub/iterator.py | 2 +- src/calibre/web/feeds/recipes/__init__.py | 1 + .../feeds/recipes/recipe_climate_progress.py | 47 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/calibre/web/feeds/recipes/recipe_climate_progress.py diff --git a/src/calibre/ebooks/epub/iterator.py b/src/calibre/ebooks/epub/iterator.py index a51a67b3a1..fa2e120e3f 100644 --- a/src/calibre/ebooks/epub/iterator.py +++ b/src/calibre/ebooks/epub/iterator.py @@ -94,7 +94,7 @@ class EbookIterator(object): ''' for item in self.opf.manifest: if item.mime_type and 'css' in item.mime_type.lower(): - css = open(item.path, 'rb').read().decode('utf-8') + css = open(item.path, 'rb').read().decode('utf-8', 'replace') for match in re.compile(r'@font-face\s*{([^}]+)}').finditer(css): block = match.group(1) family = re.compile(r'font-family\s*:\s*([^;]+)').search(block) diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index 6793c2864d..e522db86eb 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -44,6 +44,7 @@ recipe_modules = ['recipe_' + r for r in ( 'stackoverflow', 'telepolis_artikel', 'zaobao', 'usnews', 'straitstimes', 'index_hu', 'pcworld_hu', 'hrt', 'rts', 'h1', 'h2', 'h3', 'phd_comics', 'woz_die', 'elektrolese', + 'climate_progress', )] import re, imp, inspect, time, os diff --git a/src/calibre/web/feeds/recipes/recipe_climate_progress.py b/src/calibre/web/feeds/recipes/recipe_climate_progress.py new file mode 100644 index 0000000000..081997f7fe --- /dev/null +++ b/src/calibre/web/feeds/recipes/recipe_climate_progress.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = '2009, Darko Miletic ' +''' +climateprogress.org +''' + +from calibre.web.feeds.news import BasicNewsRecipe +from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag + +class ClimateProgress(BasicNewsRecipe): + title = 'Climate Progress' + __author__ = 'Darko Miletic' + description = "An insider's view of climate science, politics and solutions" + publisher = 'Climate Progress' + category = 'news, ecology, climate, blog' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = True + encoding = 'utf-8' + language = _("English") + lang = 'en-US' + direction = 'ltr' + + html2lrf_options = [ + '--comment', description + , '--category', category + , '--publisher', publisher + ] + + html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' + + remove_tags = [dict(name='a', attrs={'rel':'bookmark'})] + + feeds = [(u'Posts', u'http://feeds.feedburner.com/climateprogress/lCrX')] + + def preprocess_html(self, soup): + soup.html['lang'] = self.lang + soup.html['dir' ] = self.direction + mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)]) + mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=utf-8")]) + soup.head.insert(0,mlang) + soup.head.insert(1,mcharset) + return self.adeify_images(soup) + From 30fb99527ea96157abecabece81421bf7887d1ef Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 09:04:17 -0700 Subject: [PATCH 06/22] New recipe for Carta by Oliver Niesner --- src/calibre/gui2/images/news/carta.png | Bin 0 -> 3084 bytes src/calibre/web/feeds/recipes/__init__.py | 2 +- src/calibre/web/feeds/recipes/recipe_carta.py | 45 ++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/calibre/gui2/images/news/carta.png create mode 100644 src/calibre/web/feeds/recipes/recipe_carta.py diff --git a/src/calibre/gui2/images/news/carta.png b/src/calibre/gui2/images/news/carta.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a184f5d8627bf87b6b693cb161d5ffcd15fcba GIT binary patch literal 3084 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 Date: Fri, 29 May 2009 09:35:19 -0700 Subject: [PATCH 07/22] version 0.5.14 --- src/calibre/constants.py | 2 +- src/calibre/translations/ar.po | 60 +- src/calibre/translations/bg.po | 60 +- src/calibre/translations/ca.po | 62 +- src/calibre/translations/cs.po | 62 +- src/calibre/translations/da.po | 76 ++- src/calibre/translations/de.po | 256 +++---- src/calibre/translations/el.po | 100 +-- src/calibre/translations/es.po | 236 +++---- src/calibre/translations/fr.po | 60 +- src/calibre/translations/gl.po | 136 ++-- src/calibre/translations/he.po | 102 +-- src/calibre/translations/hr.po | 242 +++---- src/calibre/translations/hu.po | 730 ++++++++++---------- src/calibre/translations/it.po | 52 +- src/calibre/translations/ja.po | 62 +- src/calibre/translations/nb.po | 1130 ++++++++++++++++--------------- src/calibre/translations/nds.po | 60 +- src/calibre/translations/nl.po | 342 +++++----- src/calibre/translations/pl.po | 664 +++++++++--------- src/calibre/translations/pt.po | 60 +- src/calibre/translations/ro.po | 408 +++++------ src/calibre/translations/ru.po | 62 +- src/calibre/translations/sk.po | 562 +++++++-------- src/calibre/translations/sl.po | 60 +- src/calibre/translations/sv.po | 62 +- src/calibre/translations/te.po | 62 +- src/calibre/translations/uk.po | 86 +-- 28 files changed, 2982 insertions(+), 2874 deletions(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index d0d9c08240..52f85cc20c 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = 'calibre' -__version__ = '0.5.13' +__version__ = '0.5.14' __author__ = "Kovid Goyal " ''' Various run time constants. diff --git a/src/calibre/translations/ar.po b/src/calibre/translations/ar.po index d83f3e0c8c..cbaff2a888 100644 --- a/src/calibre/translations/ar.po +++ b/src/calibre/translations/ar.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 07:10+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "لا يفعل شيءً" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "لا يفعل شيءً" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -640,7 +640,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "دليل الخرج. الإفتراضي هو الدليل الحالي." @@ -655,7 +655,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "تم إنشاء كتاب OEB في" @@ -1646,11 +1646,11 @@ msgstr "الاستخدام: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "إنشاء ملف Mobipocket من EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3826,9 +3826,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "الأخبار" @@ -5661,20 +5661,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6118,6 +6118,7 @@ msgstr "الصربي" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6134,7 +6135,7 @@ msgstr "الصربي" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6218,15 +6219,18 @@ msgstr "" msgid "Portugese" msgstr "البرتغالي" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index b8144e9a38..64aae97c30 100644 --- a/src/calibre/translations/bg.po +++ b/src/calibre/translations/bg.po @@ -6,14 +6,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2008-05-24 06:23+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -63,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -621,7 +621,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -636,7 +636,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1592,11 +1592,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3756,9 +3756,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5583,20 +5583,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6037,6 +6037,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6053,7 +6054,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6137,15 +6138,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po index b13289e483..09379383ea 100644 --- a/src/calibre/translations/ca.po +++ b/src/calibre/translations/ca.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:18+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:19+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -66,7 +66,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -97,15 +97,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -624,7 +624,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -639,7 +639,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1638,11 +1638,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3817,9 +3817,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5650,20 +5650,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6104,6 +6104,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6120,7 +6121,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6204,15 +6205,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/cs.po b/src/calibre/translations/cs.po index 59fe479bc0..052a2a64ff 100644 --- a/src/calibre/translations/cs.po +++ b/src/calibre/translations/cs.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:13+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:19+0000\n" "Last-Translator: raduz \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "Nedělá vůbec nic" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "Nedělá vůbec nic" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -698,7 +698,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LIT_soubor" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Výstupní adresář. Standardně je použit aktuální adresář." @@ -713,7 +713,7 @@ msgid "Useful for debugging." msgstr "Užitečné pro ladění programu." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB kniha vytvořena v" @@ -1851,11 +1851,11 @@ msgstr "Použití: rb-meta soubor.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Vytvářím Mobipocket soubor z EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [možnosti] kniha.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Nezpracované MOBI HTML uložené do" @@ -4061,9 +4061,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5888,20 +5888,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6342,6 +6342,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6358,7 +6359,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6442,15 +6443,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/da.po b/src/calibre/translations/da.po index 829db59492..884d5688d4 100644 --- a/src/calibre/translations/da.po +++ b/src/calibre/translations/da.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-18 21:44+0000\n" -"Last-Translator: Martin Grønholdt \n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-29 13:36+0000\n" +"Last-Translator: Clement Østergaard \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "Gør absolut ingenting" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "Gør absolut ingenting" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -712,7 +712,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [indstillinger] LITFIL" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Output-mappe. Standardværdien er den nuværende mappe." @@ -729,7 +729,7 @@ msgid "Useful for debugging." msgstr "Brugbar for fejlsøgning" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB-e-bog oprettet i" @@ -1780,11 +1780,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3988,9 +3988,9 @@ msgstr "Tilføj en brugerdefineret nyhedskilde" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Nyheder" @@ -4161,20 +4161,20 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:50 msgid "Test email settings" -msgstr "" +msgstr "Test e-mail indstillinger" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 msgid "Send test mail from %s to:" -msgstr "" +msgstr "Send test e-mail fra %s til:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105 msgid "&Test" -msgstr "" +msgstr "&Test" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:62 msgid "No recipe selected" -msgstr "" +msgstr "Ingen opskrift valgt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:68 msgid "The attached file: %s is a recipe to download %s." @@ -4182,7 +4182,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:69 msgid "Recipe for " -msgstr "" +msgstr "Opskrift for " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 @@ -4213,7 +4213,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 msgid "Already exists" -msgstr "" +msgstr "Eksisterer allerede" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "This feed has already been added to the recipe" @@ -5821,20 +5821,20 @@ msgstr "" "komando er en af følgende:\n" " %s\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopierer bøger til %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopierer %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Flytter gammel database til e-bogsbibliotek i %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Komprimerer database" @@ -6327,6 +6327,7 @@ msgstr "Serbisk" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6343,7 +6344,7 @@ msgstr "Serbisk" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6427,15 +6428,18 @@ msgstr "Bosnisk" msgid "Portugese" msgstr "Portugisisk" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Springer over duplikeret artikel: %s" diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index 42944431af..963cfc1fb0 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -7,113 +7,17 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 18:42+0000\n" -"Last-Translator: S. Dorscht \n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:21+0000\n" +"Last-Translator: Kovid Goyal \n" "Language-Team: American English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 -msgid "" -" %prog options\n" -"\n" -" Customize calibre by loading external plugins.\n" -" " -msgstr "" -" %prog options\n" -"\n" -" Calibre anpassen durch das Laden externer Plugins.\n" -" " - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " -"file.\n" -"If you specify an OPF file instead of an HTML file, the list of links is " -"takes from\n" -"the element of the OPF file.\n" -msgstr "" -"%prog [options] file.html|opf\n" -"\n" -"Konvertiert eine HTML Datei in ein EPUB eBook. Verfolgt Verknüpfungen in der " -"HTML Datei rekursiv.\n" -"Falls statt der HTML Datei eine OPF Datei angegeben wird, wird die Liste der " -"Verknüpfungen aus dem\n" -" Element der OPF Datei verwendet.\n" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Follow all links in an HTML file and collect them into the specified " -"directory.\n" -"Also collects any resources like images, stylesheets, scripts, etc.\n" -"If an OPF file is specified instead, the list of files in its " -"element\n" -"is used.\n" -msgstr "" -"%prog [options] file.html|opf\n" -"\n" -"Folge allen Verweisen einer HTML Datei und sammle sie im angegebenen " -"Verzeichnis.\n" -"Sammelt auch alle Ressourcen wie Bilder, Stylesheets, Skripte, etc.\n" -"Falls hingegen eine OPF angegeben wurde, wird die Liste der Dateien in ihrem " -" Element\n" -"verwendet.\n" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 -msgid "&Delete news from library when it is automatically sent to reader" -msgstr "" -"Nachrichten nach der automatischen Übertragung auf das Gerät aus der " -"Bibliothek &löschen" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 -msgid "Could not find cover for this book. Try specifying the ISBN first." -msgstr "" -"Konnte kein Umschlagbild für dieses Buch finden. Geben Sie zuerst die ISBN " -"an." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 -msgid "Download &cover" -msgstr "Ums&chlagbild laden" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 -msgid "Download all scheduled recipes at once" -msgstr "Alle geplanten Schemata auf einmal laden" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 -msgid "Download &all scheduled" -msgstr "&Alle geplanten laden" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1641 -msgid "Cannot Start " -msgstr "Start nicht möglich " - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1642 -msgid "

%s is already running. %s

" -msgstr "

%s ist schon gestartet. %s

" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 -msgid "" -"%prog [options] file\n" -"\n" -"View an ebook.\n" -msgstr "" -"%prog [options] file\n" -"\n" -"Ein eBook anschauen.\n" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 -msgid "Chinese" -msgstr "Chinesisch" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Macht gar nix" @@ -160,7 +64,7 @@ msgstr "Macht gar nix" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -191,15 +95,15 @@ msgstr "Macht gar nix" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -294,6 +198,18 @@ msgstr "Kein gültiges Plugin gefunden in " msgid "Initialization of plugin %s failed with traceback:" msgstr "Staren des Plugins %s schlug fehl. Traceback:" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 +msgid "" +" %prog options\n" +"\n" +" Customize calibre by loading external plugins.\n" +" " +msgstr "" +" %prog options\n" +"\n" +" Calibre anpassen durch das Laden externer Plugins.\n" +" " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" @@ -671,6 +587,24 @@ msgstr "" msgid "Could not find an ebook inside the archive" msgstr "Konnte kein eBook im Archiv finden" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " +"file.\n" +"If you specify an OPF file instead of an HTML file, the list of links is " +"takes from\n" +"the element of the OPF file.\n" +msgstr "" +"%prog [options] file.html|opf\n" +"\n" +"Konvertiert eine HTML Datei in ein EPUB eBook. Verfolgt Verknüpfungen in der " +"HTML Datei rekursiv.\n" +"Falls statt der HTML Datei eine OPF Datei angegeben wird, wird die Liste der " +"Verknüpfungen aus dem\n" +" Element der OPF Datei verwendet.\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:519 #: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:758 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:621 @@ -795,6 +729,26 @@ msgstr "" "Ausgabe HTML ist \"hübsch gedruckt\" zur einfacheren Analyse durch " "menschliche Wesen" +#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Follow all links in an HTML file and collect them into the specified " +"directory.\n" +"Also collects any resources like images, stylesheets, scripts, etc.\n" +"If an OPF file is specified instead, the list of files in its " +"element\n" +"is used.\n" +msgstr "" +"%prog [options] file.html|opf\n" +"\n" +"Folge allen Verweisen einer HTML Datei und sammle sie im angegebenen " +"Verzeichnis.\n" +"Sammelt auch alle Ressourcen wie Bilder, Stylesheets, Skripte, etc.\n" +"Falls hingegen eine OPF angegeben wurde, wird die Liste der Dateien in ihrem " +" Element\n" +"verwendet.\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 msgid "Creating LIT file from EPUB..." msgstr "Erstelle LIT Datei aus EPUB..." @@ -804,7 +758,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist aktuelles Verzeichnis." @@ -821,7 +775,7 @@ msgid "Useful for debugging." msgstr "Hilfreich bei der Fehlersuche." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -1991,11 +1945,11 @@ msgstr "Benutzung: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Erstelle Mobipocket Datei aus EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" @@ -2946,6 +2900,12 @@ msgstr "Zeige Cover-Ansicht in einem eigenen Fenster (erfordert Neustart)" msgid "Automatically send downloaded &news to ebook reader" msgstr "Geladene &Nachrichten automatisch an das Gerät senden" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 +msgid "&Delete news from library when it is automatically sent to reader" +msgstr "" +"Nachrichten nach der automatischen Übertragung auf das Gerät aus der " +"Bibliothek &löschen" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:565 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" @@ -4132,6 +4092,12 @@ msgstr "Konnte kein Umschlagbild abrufen.
" msgid "The download timed out." msgstr "Der Download timed out." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 +msgid "Could not find cover for this book. Try specifying the ISBN first." +msgstr "" +"Konnte kein Umschlagbild für dieses Buch finden. Geben Sie zuerst die ISBN " +"an." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:403 msgid "Bad cover" msgstr "Falsches Umschlagbild" @@ -4195,6 +4161,10 @@ msgstr "Umschlagbild des Buches aus dem gewählten Format festlegen" msgid "Reset cover to default" msgstr "Umschlagbild auf Voreinstellung zurücksetzen" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +msgid "Download &cover" +msgstr "Ums&chlagbild laden" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 msgid "Password needed" msgstr "Passwort erforderlich" @@ -4295,9 +4265,9 @@ msgstr "Neue individuelle Nachrichtenquelle hinzufügen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Nachrichten" @@ -4306,6 +4276,14 @@ msgstr "Nachrichten" msgid "Recipes" msgstr "Downloadschemata" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 +msgid "Download all scheduled recipes at once" +msgstr "Alle geplanten Schemata auf einmal laden" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 +msgid "Download &all scheduled" +msgstr "&Alle geplanten laden" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:169 msgid "Schedule for download" msgstr "Zeitplanung des Downloads" @@ -5443,6 +5421,14 @@ msgstr "Minimiert im Systembereich der Kontrollleiste starten." msgid "Log debugging information to console" msgstr "Informationen zur Fehlersuche in Konsole aufzeichnen" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1641 +msgid "Cannot Start " +msgstr "Start nicht möglich " + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1642 +msgid "

%s is already running. %s

" +msgstr "

%s ist schon gestartet. %s

" + #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335 msgid "calibre" msgstr "calibre" @@ -5883,6 +5869,16 @@ msgstr "" "Falls angegeben, dann wird das Viewer Fenster beim Start im Vordergrund " "angezeigt." +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 +msgid "" +"%prog [options] file\n" +"\n" +"View an ebook.\n" +msgstr "" +"%prog [options] file\n" +"\n" +"Ein eBook anschauen.\n" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:152 msgid "Ebook Viewer" msgstr "eBook Viewer" @@ -6324,20 +6320,20 @@ msgstr "" "\n" "Sie erhalten Hilfe zu einem bestimmten Befehl mit: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopiere Bücher nach %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopiere %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Migriere alte Datenbank zu eBook Bibliothek in %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Komprimiere Datenbank" @@ -6840,6 +6836,7 @@ msgstr "Serbisch" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6856,7 +6853,7 @@ msgstr "Serbisch" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6940,15 +6937,18 @@ msgstr "Bosnisch" msgid "Portugese" msgstr "Portugisisch" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "Ungarisch" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Überspringe doppelten Artikel: %s" @@ -6957,6 +6957,10 @@ msgstr "Überspringe doppelten Artikel: %s" msgid "Skipping filtered article: %s" msgstr "Überspringe gefilterten Artikel: %s" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 +msgid "Chinese" +msgstr "Chinesisch" + #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:457 msgid "" "%prog URL\n" diff --git a/src/calibre/translations/el.po b/src/calibre/translations/el.po index 5605686704..ed19f5c15b 100644 --- a/src/calibre/translations/el.po +++ b/src/calibre/translations/el.po @@ -7,16 +7,20 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:29+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:22+0000\n" "Last-Translator: Thanos Petkakis \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 +msgid "Does absolutely nothing" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:98 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:50 @@ -59,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -90,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -106,25 +110,6 @@ msgstr "" msgid "Unknown" msgstr "Άγνωστο" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:89 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:302 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:113 -msgid "Publisher" -msgstr "Εκδότης" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:110 -msgid "Add a header to all the pages with title and author." -msgstr "Προσθήκη επικεφαλίδας σε όλες τις σελίδες με τίτλο και συγγραφέα" - -#: /home/kovid/work/calibre/src/calibre/utils/config.py:81 -msgid "Created by " -msgstr "Δημιουργήθηκε απο τον " - -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 -msgid "Does absolutely nothing" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:62 msgid "Base" msgstr "" @@ -636,7 +621,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -651,7 +636,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -691,6 +676,13 @@ msgstr "" msgid "Sort key for the author" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:89 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:113 +msgid "Publisher" +msgstr "Εκδότης" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Path to file containing image to be used as cover" msgstr "" @@ -731,6 +723,10 @@ msgstr "" msgid "Separate paragraphs by blank lines." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:110 +msgid "Add a header to all the pages with title and author." +msgstr "Προσθήκη επικεφαλίδας σε όλες τις σελίδες με τίτλο και συγγραφέα" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:112 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " @@ -1596,11 +1592,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3760,9 +3756,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5587,20 +5583,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -5627,6 +5623,10 @@ msgstr "" msgid "%sUsage%s: %s\n" msgstr "" +#: /home/kovid/work/calibre/src/calibre/utils/config.py:81 +msgid "Created by " +msgstr "Δημιουργήθηκε απο τον " + #: /home/kovid/work/calibre/src/calibre/utils/config.py:536 msgid "Path to the database in which books are stored" msgstr "" @@ -6037,6 +6037,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6053,7 +6054,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6137,15 +6138,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index 4dec15b198..548e8b983d 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -10,103 +10,16 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-18 21:04+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:23+0000\n" "Last-Translator: DiegoJ \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 -msgid "" -" %prog options\n" -"\n" -" Customize calibre by loading external plugins.\n" -" " -msgstr "" -" %prog opciones\n" -"\n" -" Personalizar calibre cargando complementos externos.\n" -" " - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " -"file.\n" -"If you specify an OPF file instead of an HTML file, the list of links is " -"takes from\n" -"the element of the OPF file.\n" -msgstr "" -"%prog [opciones] file.html|opf\n" -"\n" -"Convierte un archvio HTML a un libro electrónico en formato EPUB. Sigue los\n" -"enlaces recursivamente en el archivo HTML. Si especifica un archivo OPF en\n" -"vez de un archivo HTML, la lista de enlaces obtiene la lista de enlaces del\n" -"elemento del archivo OPF.\n" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Follow all links in an HTML file and collect them into the specified " -"directory.\n" -"Also collects any resources like images, stylesheets, scripts, etc.\n" -"If an OPF file is specified instead, the list of files in its " -"element\n" -"is used.\n" -msgstr "" -"%prog [opciones] archivo.html|opf\n" -"\n" -"Sigue todos los enlaces en un archivo HTML y los guarda en el directorio " -"especificado.\n" -"También guarda todos los recursos como imágenes, hojas de estilo, scripts, " -"etc.\n" -"Si se trata de un archivo OPF, se usa la lista de archivos en su\n" -"elemento .\n" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 -msgid "&Delete news from library when it is automatically sent to reader" -msgstr "" -"&Eliminar noticias de la biblioteca cuando se hayan enviado automáticamente " -"al lector." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 -msgid "Could not find cover for this book. Try specifying the ISBN first." -msgstr "" -"No se pudo encontrar la portada de este libro. Inténtelo de nuevo " -"especificando primero el ISBN." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 -msgid "Download &cover" -msgstr "Des&carga portada" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 -msgid "Download all scheduled recipes at once" -msgstr "Descarga todas las recetas planificadas de una vez" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 -msgid "Download &all scheduled" -msgstr "Descarga &todas las planificadas" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 -msgid "" -"%prog [options] file\n" -"\n" -"View an ebook.\n" -msgstr "" -"%prog [opciones] archivo\n" -"\n" -"Ver un libro electrónico.\n" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 -msgid "Chinese" -msgstr "Chino" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "No hace nada en absoluto" @@ -153,7 +66,7 @@ msgstr "No hace nada en absoluto" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -184,15 +97,15 @@ msgstr "No hace nada en absoluto" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -288,6 +201,18 @@ msgid "Initialization of plugin %s failed with traceback:" msgstr "" "La inicialización del complemento %s falló y generó la siguiente traza:" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 +msgid "" +" %prog options\n" +"\n" +" Customize calibre by loading external plugins.\n" +" " +msgstr "" +" %prog opciones\n" +"\n" +" Personalizar calibre cargando complementos externos.\n" +" " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" @@ -655,6 +580,23 @@ msgstr "" msgid "Could not find an ebook inside the archive" msgstr "No se pudo encontrar un libro-e dentro del archivo" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " +"file.\n" +"If you specify an OPF file instead of an HTML file, the list of links is " +"takes from\n" +"the element of the OPF file.\n" +msgstr "" +"%prog [opciones] file.html|opf\n" +"\n" +"Convierte un archvio HTML a un libro electrónico en formato EPUB. Sigue los\n" +"enlaces recursivamente en el archivo HTML. Si especifica un archivo OPF en\n" +"vez de un archivo HTML, la lista de enlaces obtiene la lista de enlaces del\n" +"elemento del archivo OPF.\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:519 #: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:758 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:621 @@ -779,6 +721,26 @@ msgstr "" "El HTML de salida está bien escrito para que sea más fácil de entender por " "humanos." +#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Follow all links in an HTML file and collect them into the specified " +"directory.\n" +"Also collects any resources like images, stylesheets, scripts, etc.\n" +"If an OPF file is specified instead, the list of files in its " +"element\n" +"is used.\n" +msgstr "" +"%prog [opciones] archivo.html|opf\n" +"\n" +"Sigue todos los enlaces en un archivo HTML y los guarda en el directorio " +"especificado.\n" +"También guarda todos los recursos como imágenes, hojas de estilo, scripts, " +"etc.\n" +"Si se trata de un archivo OPF, se usa la lista de archivos en su\n" +"elemento .\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 msgid "Creating LIT file from EPUB..." msgstr "Creando archivo LIT de EPUB..." @@ -788,7 +750,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Directorio de salida. Por defecto es el directorio actual" @@ -805,7 +767,7 @@ msgid "Useful for debugging." msgstr "Útil para depuración." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "Libro-e OEB creado en" @@ -1960,11 +1922,11 @@ msgstr "Uso: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Creando archivo Mobipocket de un EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [opciones] milibroe.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "HTML MOBI en bruto guardado en" @@ -2908,6 +2870,12 @@ msgstr "" msgid "Automatically send downloaded &news to ebook reader" msgstr "Enviar ¬icias descargadas automáticamente al lector de libros-e" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 +msgid "&Delete news from library when it is automatically sent to reader" +msgstr "" +"&Eliminar noticias de la biblioteca cuando se hayan enviado automáticamente " +"al lector." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:565 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" @@ -4080,6 +4048,12 @@ msgstr "No se puede descargar la portada.
" msgid "The download timed out." msgstr "El tiempo de descarga ha vencido." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 +msgid "Could not find cover for this book. Try specifying the ISBN first." +msgstr "" +"No se pudo encontrar la portada de este libro. Inténtelo de nuevo " +"especificando primero el ISBN." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:403 msgid "Bad cover" msgstr "Portada mala" @@ -4146,6 +4120,10 @@ msgstr "Asignar la portada del libro del formato seleccionado" msgid "Reset cover to default" msgstr "Reiniciar portada a la de por defecto" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +msgid "Download &cover" +msgstr "Des&carga portada" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 msgid "Password needed" msgstr "Se necesita contraseña." @@ -4246,9 +4224,9 @@ msgstr "Añadir nueva fuente de noticias" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Noticias" @@ -4257,6 +4235,14 @@ msgstr "Noticias" msgid "Recipes" msgstr "Recetas" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 +msgid "Download all scheduled recipes at once" +msgstr "Descarga todas las recetas planificadas de una vez" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 +msgid "Download &all scheduled" +msgstr "Descarga &todas las planificadas" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:169 msgid "Schedule for download" msgstr "Plan de descarga" @@ -5837,6 +5823,16 @@ msgstr "" "Si está especificada, la ventana del visor intentará situarse en el frente " "cuando se inicie el programa." +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 +msgid "" +"%prog [options] file\n" +"\n" +"View an ebook.\n" +msgstr "" +"%prog [opciones] archivo\n" +"\n" +"Ver un libro electrónico.\n" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:152 msgid "Ebook Viewer" msgstr "Visor de libros-e" @@ -6280,21 +6276,21 @@ msgstr "" "\n" "Para ver la ayuda a cada orden ejecuta: %%prog orden --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Copiando libros a %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Copiando %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" "

Migrando base de datos antigua a biblioteca de libros-e en %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Compactando base de datos" @@ -6798,6 +6794,7 @@ msgstr "Serbio" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6814,7 +6811,7 @@ msgstr "Serbio" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6898,15 +6895,18 @@ msgstr "Bosnio" msgid "Portugese" msgstr "Portugués" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "Húngaro" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Ignorando artículo duplicado: %s" @@ -6915,6 +6915,10 @@ msgstr "Ignorando artículo duplicado: %s" msgid "Skipping filtered article: %s" msgstr "Ignorando artículo filtrado: %s" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 +msgid "Chinese" +msgstr "Chino" + #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:457 msgid "" "%prog URL\n" diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index 36ea4018dc..969cbecfc2 100644 --- a/src/calibre/translations/fr.po +++ b/src/calibre/translations/fr.po @@ -6,14 +6,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.22\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 09:29+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -577,7 +577,7 @@ msgstr "Ne fait strictement rien" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -608,15 +608,15 @@ msgstr "Ne fait strictement rien" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -1211,7 +1211,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] FichierLit" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Dossier de récupération. Par défaut, il s'agit du dossier actuel." @@ -1227,7 +1227,7 @@ msgid "Useful for debugging." msgstr "Utile pour déboguer" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "ebook OEB créé dans" @@ -2371,11 +2371,11 @@ msgstr "Utilisation: rb-meta fichier.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Créé le fichier Mobipocket à partir de l'EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] myebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "HTML MOBI brut sauvegardé dans" @@ -4598,9 +4598,9 @@ msgstr "Ajouter une source personnalisée de News" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Informations" @@ -6587,20 +6587,20 @@ msgstr "" "\n" "Pour une aide sur commande précise: %%prog commande --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Copie les livres vers %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Copie %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Migre l'ancienne base vers la librairie dans %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Compacte la base" @@ -7101,6 +7101,7 @@ msgstr "Serbe" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -7117,7 +7118,7 @@ msgstr "Serbe" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -7201,15 +7202,18 @@ msgstr "Bosniaque" msgid "Portugese" msgstr "Portuguais" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "Hongrois" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Saute l'article dupliqué: %s" diff --git a/src/calibre/translations/gl.po b/src/calibre/translations/gl.po index a18b528ec4..5c21bde0e8 100644 --- a/src/calibre/translations/gl.po +++ b/src/calibre/translations/gl.po @@ -7,53 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:28+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:24+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:41 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:394 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:72 -msgid "The reader has no storage card connected." -msgstr "O lector non ten conectada tarxeta de almacenamento ningunha" - -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:140 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:168 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:196 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:204 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:251 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:278 -msgid "Unable to detect the %s disk drive. Try rebooting." -msgstr "Non se puido detectar a unidade de disco %s. Probe a reiniciar." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:94 -msgid "Options to control the conversion to EPUB" -msgstr "Opcións para controlar a conversión a EPUB" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:105 -msgid "" -"The output EPUB file. If not specified, it is derived from the input file " -"name." -msgstr "" -"Se non se especifica o ficheiro EPUB de saída empregarase o mesmo nome do " -"ficheiro de entrada." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:108 -msgid "" -"Profile of the target device this EPUB is meant for. Set to None to create a " -"device independent EPUB. The profile is used for device specific " -"restrictions on the EPUB. Choices are: " -msgstr "" -"O perfil do dispositivo de destino ao que se refire o EPUB. Escolla Ningún " -"para crear un EPUB independente do dispositivo. O perfil úsase para " -"establcer restricións específicas no EPUB. As opcións son: " - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "" @@ -100,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -131,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -265,6 +228,12 @@ msgstr "" msgid "Disable the named plugin" msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:41 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:394 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:72 +msgid "The reader has no storage card connected." +msgstr "O lector non ten conectada tarxeta de almacenamento ningunha" + #: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 msgid "There is insufficient free space on the storage card" @@ -275,6 +244,37 @@ msgstr "" msgid "There is insufficient free space in main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:140 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:168 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:196 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:204 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:251 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:278 +msgid "Unable to detect the %s disk drive. Try rebooting." +msgstr "Non se puido detectar a unidade de disco %s. Probe a reiniciar." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:94 +msgid "Options to control the conversion to EPUB" +msgstr "Opcións para controlar a conversión a EPUB" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:105 +msgid "" +"The output EPUB file. If not specified, it is derived from the input file " +"name." +msgstr "" +"Se non se especifica o ficheiro EPUB de saída empregarase o mesmo nome do " +"ficheiro de entrada." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:108 +msgid "" +"Profile of the target device this EPUB is meant for. Set to None to create a " +"device independent EPUB. The profile is used for device specific " +"restrictions on the EPUB. Choices are: " +msgstr "" +"O perfil do dispositivo de destino ao que se refire o EPUB. Escolla Ningún " +"para crear un EPUB independente do dispositivo. O perfil úsase para " +"establcer restricións específicas no EPUB. As opcións son: " + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:113 msgid "" "Either the path to a CSS stylesheet or raw CSS. This CSS will override any " @@ -626,7 +626,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -641,7 +641,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1597,11 +1597,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3761,9 +3761,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5588,20 +5588,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6042,6 +6042,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6058,7 +6059,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6142,15 +6143,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/he.po b/src/calibre/translations/he.po index 0d443cc193..9ded2cd969 100644 --- a/src/calibre/translations/he.po +++ b/src/calibre/translations/he.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 07:40+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:24+0000\n" "Last-Translator: nikitajy \n" "Language-Team: Hebrew \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "לא עושה דבר" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "לא עושה דבר" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -118,6 +118,14 @@ msgstr "בסיס" msgid "File type" msgstr "סוג קובץ" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 +msgid "Metadata reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:209 +msgid "Metadata writer" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:12 msgid "" "Follow all local links in an HTML file and create a ZIP file containing all " @@ -127,26 +135,6 @@ msgstr "" "עקוב אחר כל הקישורים המקומיים בקובץ HTML וצור קובץ ZIP המכיל את כל הקבצים " "המקושרים. תוסף זה רץ בכל פעם שמתווסף קובץ HTML לספרייה." -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 -msgid "Installed plugins" -msgstr "תוספים מותקנים" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 -msgid "Disabled plugins" -msgstr "תוספים מבוטלים" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 -msgid "No valid plugin found in " -msgstr "לא נמצאו תוספים תקינים ב- " - -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 -msgid "Metadata reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:209 -msgid "Metadata writer" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 @@ -184,6 +172,10 @@ msgstr "" msgid "Set metadata in %s files" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 +msgid "Installed plugins" +msgstr "תוספים מותקנים" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 msgid "Mapping for filetype plugins" msgstr "" @@ -192,6 +184,14 @@ msgstr "" msgid "Local plugin customization" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 +msgid "Disabled plugins" +msgstr "תוספים מבוטלים" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 +msgid "No valid plugin found in " +msgstr "לא נמצאו תוספים תקינים ב- " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 msgid "Initialization of plugin %s failed with traceback:" msgstr "" @@ -623,7 +623,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -638,7 +638,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1594,11 +1594,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3758,9 +3758,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5585,20 +5585,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6039,6 +6039,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6055,7 +6056,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6139,15 +6140,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/hr.po b/src/calibre/translations/hr.po index d56816dccc..913a8442a4 100644 --- a/src/calibre/translations/hr.po +++ b/src/calibre/translations/hr.po @@ -7,106 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-17 02:24+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:25+0000\n" "Last-Translator: Miro Glavić \n" "Language-Team: Croatian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 -msgid "" -" %prog options\n" -"\n" -" Customize calibre by loading external plugins.\n" -" " -msgstr "" -" %prog opcije\n" -"\n" -" Prilagodi calibre učitavanjem vanjskih priključaka.\n" -" " - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " -"file.\n" -"If you specify an OPF file instead of an HTML file, the list of links is " -"takes from\n" -"the element of the OPF file.\n" -msgstr "" -"%prog [opcije] datoteka.html|opf\n" -"\n" -"Pretvori HTML datoteku u EPUB elektroničku knjigu. Suvratno prati veze u " -"HTML datoteci.\n" -"Ako specificirate OPF datoteku umjesto HTML datoteke, lista veza je uzeta iz " -" \n" -"elementa OPF datoteke.\n" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Follow all links in an HTML file and collect them into the specified " -"directory.\n" -"Also collects any resources like images, stylesheets, scripts, etc.\n" -"If an OPF file is specified instead, the list of files in its " -"element\n" -"is used.\n" -msgstr "" -"%prog [options] file.html|opf\n" -"\n" -"Pratii sve veze u HTML datoteci i prikupi ih u specificiranom direktoriju.\n" -"Ovo također prikuplja sve resurse kao slike, stilske liste, skripte itd.\n" -"Ako je OPF datoteka specificirana umjesto ove, lista datoteka u njenom \n" -" elementu je upotrijebljena.\n" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 -msgid "&Delete news from library when it is automatically sent to reader" -msgstr "&Izbriši vijesti iz biblioteke kad su automatski poslane čitaču." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 -msgid "Could not find cover for this book. Try specifying the ISBN first." -msgstr "Omot za ovu knjigu nije pronađen. Pokušajte prvo specificirati ISBN." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 -msgid "Download &cover" -msgstr "Preuzmi &omot" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 -msgid "Download all scheduled recipes at once" -msgstr "Preuzmi sve predviđene recepte odjednom" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 -msgid "Download &all scheduled" -msgstr "Preuzmi &sve predviđeno" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1641 -msgid "Cannot Start " -msgstr "Ne može Krenuti " - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1642 -msgid "

%s is already running. %s

" -msgstr "

%s je već aktivan. %s

" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 -msgid "" -"%prog [options] file\n" -"\n" -"View an ebook.\n" -msgstr "" -"%prog [opcije] datoteka\n" -"\n" -"Pogledaj elektroničku knjigu.\n" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 -msgid "Chinese" -msgstr "Kineski" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Uopće ne funkcionira" @@ -153,7 +63,7 @@ msgstr "Uopće ne funkcionira" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -184,15 +94,15 @@ msgstr "Uopće ne funkcionira" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -287,6 +197,18 @@ msgstr "Nije pronađen važeći priključak u " msgid "Initialization of plugin %s failed with traceback:" msgstr "Inicijalizacija priključka %s je neuspjela sa praćenjem unazad:" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 +msgid "" +" %prog options\n" +"\n" +" Customize calibre by loading external plugins.\n" +" " +msgstr "" +" %prog opcije\n" +"\n" +" Prilagodi calibre učitavanjem vanjskih priključaka.\n" +" " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" @@ -649,6 +571,24 @@ msgstr "" msgid "Could not find an ebook inside the archive" msgstr "Nije pronađena elektronička knjiga u arhivi" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML " +"file.\n" +"If you specify an OPF file instead of an HTML file, the list of links is " +"takes from\n" +"the element of the OPF file.\n" +msgstr "" +"%prog [opcije] datoteka.html|opf\n" +"\n" +"Pretvori HTML datoteku u EPUB elektroničku knjigu. Suvratno prati veze u " +"HTML datoteci.\n" +"Ako specificirate OPF datoteku umjesto HTML datoteke, lista veza je uzeta iz " +" \n" +"elementa OPF datoteke.\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:519 #: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:758 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:621 @@ -769,6 +709,24 @@ msgstr "" msgid "Output HTML is \"pretty printed\" for easier parsing by humans" msgstr "Izlazni HTML je \"lijepo ispisan\" za lakše analiziranje sintakse" +#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 +msgid "" +"%prog [options] file.html|opf\n" +"\n" +"Follow all links in an HTML file and collect them into the specified " +"directory.\n" +"Also collects any resources like images, stylesheets, scripts, etc.\n" +"If an OPF file is specified instead, the list of files in its " +"element\n" +"is used.\n" +msgstr "" +"%prog [options] file.html|opf\n" +"\n" +"Pratii sve veze u HTML datoteci i prikupi ih u specificiranom direktoriju.\n" +"Ovo također prikuplja sve resurse kao slike, stilske liste, skripte itd.\n" +"Ako je OPF datoteka specificirana umjesto ove, lista datoteka u njenom \n" +" elementu je upotrijebljena.\n" + #: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 msgid "Creating LIT file from EPUB..." msgstr "Kreiranje LIT datoteke iz EPUB..." @@ -778,7 +736,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [opcije] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Izlazni direktorij. Podrazumijeva se kao aktivni direktorij." @@ -795,7 +753,7 @@ msgid "Useful for debugging." msgstr "Korisno za otkrivanje grešaka." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB elektronička knjiga kreirana u" @@ -1936,11 +1894,11 @@ msgstr "Korištenje: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Kreiranje Mobipocket datoteke iz EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] myebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Sirov MOBI HTML pohranjen u" @@ -2872,6 +2830,10 @@ msgstr "" msgid "Automatically send downloaded &news to ebook reader" msgstr "Automatski pošalji skinute &vijesti na čitača elektroničke knjige" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:564 +msgid "&Delete news from library when it is automatically sent to reader" +msgstr "&Izbriši vijesti iz biblioteke kad su automatski poslane čitaču." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:565 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" @@ -4040,6 +4002,10 @@ msgstr "Nemoguće ugrabiti omot.
" msgid "The download timed out." msgstr "Vrijeme skidanja isteklo." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:391 +msgid "Could not find cover for this book. Try specifying the ISBN first." +msgstr "Omot za ovu knjigu nije pronađen. Pokušajte prvo specificirati ISBN." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:403 msgid "Bad cover" msgstr "Loš omot" @@ -4102,6 +4068,10 @@ msgstr "Postavi omot za knjigu iz odabranog formata" msgid "Reset cover to default" msgstr "Vrati omot u zadano stanje" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +msgid "Download &cover" +msgstr "Preuzmi &omot" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 msgid "Password needed" msgstr "Potrebna lozinka" @@ -4202,9 +4172,9 @@ msgstr "Dodaj izvor prilagođenih vijesti" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Vijesti" @@ -4213,6 +4183,14 @@ msgstr "Vijesti" msgid "Recipes" msgstr "Recepti" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 +msgid "Download all scheduled recipes at once" +msgstr "Preuzmi sve predviđene recepte odjednom" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 +msgid "Download &all scheduled" +msgstr "Preuzmi &sve predviđeno" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:169 msgid "Schedule for download" msgstr "Plan skidanja" @@ -5339,6 +5317,14 @@ msgstr "Pokretanje minimizirano na sustavni poslužavnik." msgid "Log debugging information to console" msgstr "Ubilježi informacije o uklanjanju grašaka u konzolu." +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1641 +msgid "Cannot Start " +msgstr "Ne može Krenuti " + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1642 +msgid "

%s is already running. %s

" +msgstr "

%s je već aktivan. %s

" + #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335 msgid "calibre" msgstr "calibre" @@ -5777,6 +5763,16 @@ msgstr "" "Ako je naznačeno, kod pokretanj će preglednički prozor pokušati da dođe " "ispred." +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:608 +msgid "" +"%prog [options] file\n" +"\n" +"View an ebook.\n" +msgstr "" +"%prog [opcije] datoteka\n" +"\n" +"Pogledaj elektroničku knjigu.\n" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:152 msgid "Ebook Viewer" msgstr "Preglednik Elektroničke Knjige" @@ -6204,21 +6200,21 @@ msgstr "" "\n" "For help on an individual command: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopiranje knjiga u %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopiranje %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" "

Preseljavanje stare baze podataka na ebook biblioteku u %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Sažimanje baze podataka" @@ -6711,6 +6707,7 @@ msgstr "Srpski" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6727,7 +6724,7 @@ msgstr "Srpski" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6811,15 +6808,18 @@ msgstr "Bosanski" msgid "Portugese" msgstr "Portugalski" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "Mađarski" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Preskakanje dupliciranog artikla: %s" @@ -6828,6 +6828,10 @@ msgstr "Preskakanje dupliciranog artikla: %s" msgid "Skipping filtered article: %s" msgstr "Preskakanje filtriranog artikla: %s" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 +msgid "Chinese" +msgstr "Kineski" + #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:457 msgid "" "%prog URL\n" diff --git a/src/calibre/translations/hu.po b/src/calibre/translations/hu.po index 5a27240ede..b35159a064 100644 --- a/src/calibre/translations/hu.po +++ b/src/calibre/translations/hu.po @@ -7,349 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-20 03:20+0000\n" -"Last-Translator: Levente Szileszky \n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:27+0000\n" +"Last-Translator: Molnár Gábor \n" "Language-Team: Hungarian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 -msgid "Set metadata in %s files" -msgstr "Metaadatok beállítása a %s típusú fájlokban." - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 -msgid "Mapping for filetype plugins" -msgstr "A fájltípus beépülőmodulok leképezése" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 -msgid "" -"Remove the first image from the input ebook. Useful if the first image in " -"the source file is a cover and you are specifying an external cover." -msgstr "" -"Vegye ki az első képet a bemeneti e-könyvből. Ez akkor hasznos, ha az első " -"kép a fájlban a könyvborító, és te helyette másik borítót szeretnél " -"használni." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 -msgid "" -"XPath expression to detect page boundaries for building a custom pagination " -"map, as used by AdobeDE. Default is not to build an explicit pagination map." -msgstr "" -"XPath kifejezés az oldalhatárok észlelésére a saját lapozási táblázat " -"elkészítéséhez (az Adobe DE használja). Alapértelmezés szerint nem készítünk " -"lapozási táblázatot." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 -msgid "" -"XPath expression that specifies all tags that should be added to the Table " -"of Contents at level three. Each entry is added under the previous level two " -"entry." -msgstr "" -"XPath kifejezés, amely meghatározza az összes tag-et, amit hozzá lehet adni " -"a Tartalomjegyzék harmadik szintjéhez. Minden bejegyzés az előző szintű " -"(második) bejegyzés alá kerül." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 -msgid "Control page layout" -msgstr "Kontroláld az oldalelrendezést" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 -msgid "" -"Remove spacing between paragraphs. Also sets a indent on paragraphs of " -"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" -"css. Spacing removal will not work if the source file forces inter-paragraph " -"spacing." -msgstr "" -"Közök eltávolítása a szövegtömbből. Ez a beállítás automatikusan 1.5em " -"méretű behúzást állít be a bekezdéshez. Ezt felül tudod írni, ha az --" -"override-css kapcsolónak a p {text-indent: 0cm} paramétert adod meg. Ez nem " -"fog működni, ha az eredeti fájlban kényszerített elrendezés van." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 -msgid "Do not force text to be justified in output." -msgstr "A kimenetben a szöveg ne legyen mindenképpen sorkizárt." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 -msgid "" -"Remove table markup, converting it into paragraphs. This is useful if your " -"source file uses a table to manage layout." -msgstr "" -"Távolíts el a táblázatot és alakítsd át azt bekezdésekké.\r\n" -"Ez akkor hasznos, ha a forrás táblázatot használ az elrendezés kezelésére." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:226 -msgid "" -"Preserve the HTML tag structure while splitting large HTML files. This is " -"only neccessary if the HTML files contain CSS that uses sibling selectors. " -"Enabling this greatly slows down processing of large HTML files." -msgstr "" -"Nagy HTML fájlok tag struktúrájának megőrzése darabolás közben. Erre csak " -"akkor van szükség, ha a HTML olyan CSS-t tartalmaz, ami 'sibling' típusú " -"selectorokat is használ. Ez az opció jelentősen lelassíthatja nagy fájlok " -"feldolgozását." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:30 -msgid "" -"Could not find reasonable point at which to split: %s Sub-tree size: %d KB" -msgstr "" -"Nem találtam egyértelmű elválasztási pontokat, ahol darabolni lehetne: %s Az " -"fa mérete: %d kB." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:149 -msgid "" -"\t\tToo much markup. Re-splitting without structure preservation. This may " -"cause incorrect rendering." -msgstr "" -"\t\tTúl sok formázás. Újradarabolom a szerkezet megőrzése nélkül. Ez " -"helytelen megjelenést eredményezhet." - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:962 -msgid "The author(s) of the ebook, as a & separated list." -msgstr "A könyv szerzői '&' jelekkel elválasztott listában megadva." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:229 -msgid "Failed %s" -msgstr "Elkútruk! %s" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:280 -msgid "" -"Failed to process comic: %s\n" -"\n" -"%s" -msgstr "" -"Elkúrtuk a képregény feldolgozását! :\n" -"%s\n" -"\n" -"%s" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:302 -msgid "" -"Disable normalize (improve contrast) color range for pictures. Default: False" -msgstr "" -"Normalizállás mellőzése az élénk szinű képeknél (növeli a kontrasztot). " -"Alapértelmezett: hamis" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:304 -msgid "Maintain picture aspect ratio. Default is to fill the screen." -msgstr "A képméretarány megtartása. Alapértelmezett: kijelző kitőltése" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:313 -msgid "" -"Keep aspect ratio and scale image using screen height as image width for " -"viewing in landscape mode." -msgstr "" -"Képméretarány megtartása és a képméret növelése növelése, tájképmódban lesz " -"látható." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:315 -msgid "" -"Used for right-to-left publications like manga. Causes landscape pages to be " -"split into portrait pages from right to left." -msgstr "" -"Jobbról balra haladó kiadványoknál (pl. Manga) portréoldalakba hasítás " -"jobbról balra." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:44 -msgid "Fetching of recipe failed: " -msgstr "Az újság letölése nem sikerült: " - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:321 -msgid "\tBook Designer file detected." -msgstr "\tBook Designer fájl található." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:346 -msgid "\tBaen file detected. Re-parsing..." -msgstr "\tBaen fájl található. Újraelemzés..." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:362 -msgid "Written preprocessed HTML to " -msgstr "Az előre feldolgozott HTML kiírása ide: " - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139 -msgid "Do not save embedded image and font files to disk" -msgstr "Ne mentse el a beágyazott képet és betűtípusfájlokat a lemezre" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 -msgid "Set the book classification" -msgstr "A könybesorolás beálítása" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 -msgid "Set the book creator" -msgstr "A szerző beálítása" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 -msgid "Set the book producer" -msgstr "A gyártó beálítása" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 -msgid "" -"Extract cover from LRF file. Note that the LRF format has no defined cover, " -"so we use some heuristics to guess the cover." -msgstr "" -"A borító átültetése LRF típusú fájlokból. \t\r\n" -"Megjegyzendő, hogy az LRF formátumban nincs meghatározott borító, így " -"sokszor Heurisztikával állítunk elő fedelet." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 -msgid "Set book ID" -msgstr "A könyv azonosítójának megadása" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:49 -msgid "Could not find pdftohtml, check it is in your PATH" -msgstr "" -"Nem található egy összetevő : pdftohtml! \r\n" -"Ellenőrizd az elérési utat." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:75 -msgid "" -" is an image based PDF. Only conversion of text based PDFs is supported." -msgstr "" -" : ez egy kép-alapú PDF fájl. Csak a szöveg alapú PDF-ek konvertálása " -"támogatott." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:405 -msgid "Be more verbose." -msgstr "Bőbeszédűbb kimenet." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:417 -msgid "You must specify a single PDF file." -msgstr "Egy PDF fájlt kell megadnod." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:146 -msgid "" -"This RTF file has a feature calibre does not support. Convert it to HTML and " -"then convert it." -msgstr "" -"Ez az RTF fájl olyan formázásokat is tartalmaz, amiket a calibre nem " -"támogat. Először próbáld meg HTML formátumba konvertálni, majd használd a " -"calibre-t a további konvertáláshoz." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:44 -msgid "Set the authors" -msgstr "Szerzők" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:48 -msgid "Set the comment" -msgstr "Megjegyzés" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:300 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:361 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:971 -msgid "Title" -msgstr "Cím" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:301 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:972 -msgid "Author(s)" -msgstr "Szerző(k)" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:304 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:489 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:322 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 -msgid "Comments" -msgstr "Megjegyzés" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:312 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:311 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:915 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:975 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -msgid "Tags" -msgstr "Cimkék" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:327 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -msgid "Series" -msgstr "Sorozat" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:315 -msgid "Language" -msgstr "Nyelv" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:914 -msgid "Timestamp" -msgstr "Dátum" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:204 -msgid "A comma separated list of tags to set" -msgstr "A beállítandó cimkék vesszővel elválasztott listája" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:206 -msgid "The series to which this book belongs" -msgstr "A sorozat, amihez ez a könyv tartozik" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:208 -msgid "The series index" -msgstr "A könyv sorszáma a sorozatban" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:210 -msgid "The book language" -msgstr "A könyv nyelve" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:54 -msgid "Usage:" -msgstr "Használat" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:53 -msgid "Usage: imp-meta file.imp" -msgstr "Használat: imp-meta file.imp" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:54 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:116 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rb.py:60 -msgid "No filename specified." -msgstr "Nem adtál meg fájlnevet." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109 -msgid "The ISBN ID of the book you want metadata for." -msgstr "A keresett könyv ISBN száma." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 -msgid "The author whose book to search for." -msgstr "A keresett könyv szerzője." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 -msgid "The title of the book to search for." -msgstr "A keresett könyv címe." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:115 -msgid "The publisher of the book to search for." -msgstr "A keresett könyv kiadója." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:54 -msgid "LibraryThing.com timed out. Try again later." -msgstr "A LibraryThing.com nem válaszol, próbáld meg később." - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:62 -msgid " not found." -msgstr " nem található." - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Semmit nem csinál" @@ -396,7 +63,7 @@ msgstr "Semmit nem csinál" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -427,15 +94,15 @@ msgstr "Semmit nem csinál" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -498,10 +165,22 @@ msgstr "Tömörített könyvek metaadatait is olvassa be" msgid "Read metadata from ebooks in RAR archives" msgstr "Metaadatok olvasása a RAR-ral tömörített könyvekből is" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +msgid "Set metadata in %s files" +msgstr "Metaadatok beállítása a %s típusú fájlokban." + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 msgid "Installed plugins" msgstr "Telepített bővítmények" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 +msgid "Mapping for filetype plugins" +msgstr "A fájltípus beépülőmodulok leképezése" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:30 msgid "Local plugin customization" msgstr "Bővítmények testreszabása" @@ -664,6 +343,15 @@ msgstr "" "Inkább a forrásfájlban található borítót használja a beállított borító " "helyett, ha elérhető" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 +msgid "" +"Remove the first image from the input ebook. Useful if the first image in " +"the source file is a cover and you are specifying an external cover." +msgstr "" +"Vegye ki az első képet a bemeneti e-könyvből. Ez akkor hasznos, ha az első " +"kép a fájlban a könyvborító, és te helyette másik borítót szeretnél " +"használni." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:149 msgid "" "Turn off splitting at page breaks. Normally, input files are automatically " @@ -678,6 +366,15 @@ msgstr "" "beolvasni. Ez a művelet azonban lassú, és ha a forrásfájlod sok oldaltörést " "tartalmaz, akkor érdemes alkalmazni ezt az opciót." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 +msgid "" +"XPath expression to detect page boundaries for building a custom pagination " +"map, as used by AdobeDE. Default is not to build an explicit pagination map." +msgstr "" +"XPath kifejezés az oldalhatárok észlelésére a saját lapozási táblázat " +"elkészítéséhez (az Adobe DE használja). Alapértelmezés szerint nem készítünk " +"lapozási táblázatot." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 msgid "" "XPath expression to find the name of each page in the pagination map " @@ -742,6 +439,16 @@ msgstr "" "tartalomjegyzékhez a második szinten. Minden bejegyzés az őt megelőző első " "szintű bejegyzéshez fog tartozni." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level three. Each entry is added under the previous level two " +"entry." +msgstr "" +"XPath kifejezés, amely meghatározza az összes tag-et, amit hozzá lehet adni " +"a Tartalomjegyzék harmadik szintjéhez. Minden bejegyzés az előző szintű " +"(második) bejegyzés alá kerül." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:192 msgid "" "Path to a .ncx file that contains the table of contents to use for this " @@ -761,6 +468,10 @@ msgid "" "one is always used." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 +msgid "Control page layout" +msgstr "Kontroláld az oldalelrendezést" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:204 msgid "Set the top margin in pts. Default is %default" msgstr "" @@ -794,6 +505,41 @@ msgstr "" "alapértelmezezz érték %defaultpt. Állítsd 0-ra a betűk átméretezésének " "letiltásához." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 +msgid "" +"Remove spacing between paragraphs. Also sets a indent on paragraphs of " +"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" +"css. Spacing removal will not work if the source file forces inter-paragraph " +"spacing." +msgstr "" +"Közök eltávolítása a szövegtömbből. Ez a beállítás automatikusan 1.5em " +"méretű behúzást állít be a bekezdéshez. Ezt felül tudod írni, ha az --" +"override-css kapcsolónak a p {text-indent: 0cm} paramétert adod meg. Ez nem " +"fog működni, ha az eredeti fájlban kényszerített elrendezés van." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 +msgid "Do not force text to be justified in output." +msgstr "A kimenetben a szöveg ne legyen mindenképpen sorkizárt." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 +msgid "" +"Remove table markup, converting it into paragraphs. This is useful if your " +"source file uses a table to manage layout." +msgstr "" +"Távolíts el a táblázatot és alakítsd át azt bekezdésekké.\r\n" +"Ez akkor hasznos, ha a forrás táblázatot használ az elrendezés kezelésére." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:226 +msgid "" +"Preserve the HTML tag structure while splitting large HTML files. This is " +"only neccessary if the HTML files contain CSS that uses sibling selectors. " +"Enabling this greatly slows down processing of large HTML files." +msgstr "" +"Nagy HTML fájlok tag struktúrájának megőrzése darabolás közben. Erre csak " +"akkor van szükség, ha a HTML olyan CSS-t tartalmaz, ami 'sibling' típusú " +"selectorokat is használ. Ez az opció jelentősen lelassíthatja nagy fájlok " +"feldolgozását." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:232 msgid "Print generated OPF file to stdout" msgstr "Írja ki a generált OPF fájl tartalmát" @@ -855,6 +601,21 @@ msgstr "Meg kell adnod egy HTML fájlt bemenetként" msgid "%s format books are not supported" msgstr "A %s formátumú könyvek sajnos nem támogatottak" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:30 +msgid "" +"Could not find reasonable point at which to split: %s Sub-tree size: %d KB" +msgstr "" +"Nem találtam egyértelmű elválasztási pontokat, ahol darabolni lehetne: %s Az " +"fa mérete: %d kB." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:149 +msgid "" +"\t\tToo much markup. Re-splitting without structure preservation. This may " +"cause incorrect rendering." +msgstr "" +"\t\tTúl sok formázás. Újradarabolom a szerkezet megőrzése nélkül. Ez " +"helytelen megjelenést eredményezhet." + #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:541 msgid "Written processed HTML to " msgstr "Feldolgozott HTML-t kiírtam ide: " @@ -911,6 +672,10 @@ msgstr "" "Cím beállítása. Ha nincs semmi beírva, megpróbálom automatikusan " "megállapítani." +#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:962 +msgid "The author(s) of the ebook, as a & separated list." +msgstr "A könyv szerzői '&' jelekkel elválasztott listában megadva." + #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:964 msgid "The subject(s) of this book, as a comma separated list." msgstr "A könyv témája/témái, vesszővel elválasztva." @@ -965,7 +730,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [beállítások] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Célkönyvtár. Az alapértelmezett a jelenlegi könyvtár." @@ -980,7 +745,7 @@ msgid "Useful for debugging." msgstr "Hasznos hibakeresésnél." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "Az OEB e-könyvet létrehoztam ennyi idő alatt:" @@ -1353,6 +1118,21 @@ msgstr "Nem adtál meg konvertálandó fájlt." msgid "Rendered %s" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:229 +msgid "Failed %s" +msgstr "Elkútruk! %s" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:280 +msgid "" +"Failed to process comic: %s\n" +"\n" +"%s" +msgstr "" +"Elkúrtuk a képregény feldolgozását! :\n" +"%s\n" +"\n" +"%s" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:287 msgid "" "Options to control the conversion of comics (CBR, CBZ) files into ebooks" @@ -1380,6 +1160,17 @@ msgid "Number of colors for grayscale image conversion. Default: %default" msgstr "" "Szürkeárnyalatok száma a képek konvertálásához. Alapértelmezés: %default" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:302 +msgid "" +"Disable normalize (improve contrast) color range for pictures. Default: False" +msgstr "" +"Normalizállás mellőzése az élénk szinű képeknél (növeli a kontrasztot). " +"Alapértelmezett: hamis" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:304 +msgid "Maintain picture aspect ratio. Default is to fill the screen." +msgstr "A képméretarány megtartása. Alapértelmezett: kijelző kitőltése" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:306 msgid "Disable sharpening." msgstr "Élesítés letiltása." @@ -1394,6 +1185,22 @@ msgstr "" msgid "Don't split landscape images into two portrait images" msgstr "Fekvő képeket ne vágja szét két álló képre." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:313 +msgid "" +"Keep aspect ratio and scale image using screen height as image width for " +"viewing in landscape mode." +msgstr "" +"Képméretarány megtartása és a képméret növelése növelése, tájképmódban lesz " +"látható." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:315 +msgid "" +"Used for right-to-left publications like manga. Causes landscape pages to be " +"split into portrait pages from right to left." +msgstr "" +"Jobbról balra haladó kiadványoknál (pl. Manga) portréoldalakba hasítás " +"jobbról balra." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:317 msgid "" "Enable Despeckle. Reduces speckle noise. May greatly increase processing " @@ -1491,10 +1298,26 @@ msgstr "Paraméterek a feeds2disk program számára" msgid "Options to control the behavior of html2lrf" msgstr "Paraméterek a html2lrf program számára" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:44 +msgid "Fetching of recipe failed: " +msgstr "Az újság letölése nem sikerült: " + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:321 +msgid "\tBook Designer file detected." +msgstr "\tBook Designer fájl található." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:323 msgid "\tParsing HTML..." msgstr "\tHTML beolvasása..." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:346 +msgid "\tBaen file detected. Re-parsing..." +msgstr "\tBaen fájl található. Újraelemzés..." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:362 +msgid "Written preprocessed HTML to " +msgstr "Az előre feldolgozott HTML kiírása ide: " + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 msgid "Processing %s" msgstr "Feldolgozás: %s" @@ -1617,6 +1440,10 @@ msgstr "" msgid "Output LRS file" msgstr "Kimeneti LRS fájl" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139 +msgid "Do not save embedded image and font files to disk" +msgstr "Ne mentse el a beágyazott képet és betűtípusfájlokat a lemezre" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:158 msgid "Parsing LRF..." msgstr "LRF fájl beolvasása..." @@ -1709,6 +1536,31 @@ msgstr "Ikon kinyerése az LRF fájlból" msgid "Set the publisher" msgstr "Kiadó" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 +msgid "Set the book classification" +msgstr "A könybesorolás beálítása" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +msgid "Set the book creator" +msgstr "A szerző beálítása" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 +msgid "Set the book producer" +msgstr "A gyártó beálítása" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 +msgid "" +"Extract cover from LRF file. Note that the LRF format has no defined cover, " +"so we use some heuristics to guess the cover." +msgstr "" +"A borító átültetése LRF típusú fájlokból. \t\r\n" +"Megjegyzendő, hogy az LRF formátumban nincs meghatározott borító, így " +"sokszor Heurisztikával állítunk elő fedelet." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 +msgid "Set book ID" +msgstr "A könyv azonosítójának megadása" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/mobi/convert_from.py:43 msgid "" "Usage: %prog [options] mybook.mobi|prc\n" @@ -1717,6 +1569,19 @@ msgid "" "%prog converts mybook.mobi to mybook.lrf" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:49 +msgid "Could not find pdftohtml, check it is in your PATH" +msgstr "" +"Nem található egy összetevő : pdftohtml! \r\n" +"Ellenőrizd az elérési utat." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:75 +msgid "" +" is an image based PDF. Only conversion of text based PDFs is supported." +msgstr "" +" : ez egy kép-alapú PDF fájl. Csak a szöveg alapú PDF-ek konvertálása " +"támogatott." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:94 msgid "" "%prog [options] mybook.pdf\n" @@ -1731,6 +1596,14 @@ msgid "" "current directory." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:405 +msgid "Be more verbose." +msgstr "Bőbeszédűbb kimenet." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:417 +msgid "You must specify a single PDF file." +msgstr "Egy PDF fájlt kell megadnod." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:21 msgid "" "%prog [options] mybook.rtf\n" @@ -1739,6 +1612,15 @@ msgid "" "%prog converts mybook.rtf to mybook.lrf" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:146 +msgid "" +"This RTF file has a feature calibre does not support. Convert it to HTML and " +"then convert it." +msgstr "" +"Ez az RTF fájl olyan formázásokat is tartalmaz, amiket a calibre nem " +"támogat. Először próbáld meg HTML formátumba konvertálni, majd használd a " +"calibre-t a további konvertáláshoz." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:19 msgid "" "%prog [options] mybook.txt\n" @@ -1747,14 +1629,108 @@ msgid "" "%prog converts mybook.txt to mybook.lrf" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:44 +msgid "Set the authors" +msgstr "Szerzők" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:48 +msgid "Set the comment" +msgstr "Megjegyzés" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:971 +msgid "Title" +msgstr "Cím" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:972 +msgid "Author(s)" +msgstr "Szerző(k)" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:303 msgid "Producer" msgstr "Producer" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 +msgid "Comments" +msgstr "Megjegyzés" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:915 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:975 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 +msgid "Tags" +msgstr "Cimkék" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:327 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 +msgid "Series" +msgstr "Sorozat" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:315 +msgid "Language" +msgstr "Nyelv" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:317 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:914 +msgid "Timestamp" +msgstr "Dátum" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:204 +msgid "A comma separated list of tags to set" +msgstr "A beállítandó cimkék vesszővel elválasztott listája" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:206 +msgid "The series to which this book belongs" +msgstr "A sorozat, amihez ez a könyv tartozik" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:208 +msgid "The series index" +msgstr "A könyv sorszáma a sorozatban" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:210 +msgid "The book language" +msgstr "A könyv nyelve" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:212 msgid "Extract the cover" msgstr "Állítsa elő a borítót" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:54 +msgid "Usage:" +msgstr "Használat" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:53 +msgid "Usage: imp-meta file.imp" +msgstr "Használat: imp-meta file.imp" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:116 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rb.py:60 +msgid "No filename specified." +msgstr "Nem adtál meg fájlnevet." + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:98 msgid "" "\n" @@ -1769,6 +1745,26 @@ msgid "" "\n" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109 +msgid "The ISBN ID of the book you want metadata for." +msgstr "A keresett könyv ISBN száma." + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 +msgid "The author whose book to search for." +msgstr "A keresett könyv szerzője." + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 +msgid "The title of the book to search for." +msgstr "A keresett könyv címe." + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:115 +msgid "The publisher of the book to search for." +msgstr "A keresett könyv kiadója." + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:54 +msgid "LibraryThing.com timed out. Try again later." +msgstr "A LibraryThing.com nem válaszol, próbáld meg később." + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:61 msgid "" "Could not fetch cover as server is experiencing high load. Please try again " @@ -1777,6 +1773,10 @@ msgstr "" "A szerver túlterheltsége miatt nem tudta letölteni a borítót. Kérem próbálja " "meg később." +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:62 +msgid " not found." +msgstr " nem található." + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:65 msgid "LibraryThing.com server error. Try again later." msgstr "LibraryThing.com szerverhiba. Próbálja meg később." @@ -1828,11 +1828,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3992,9 +3992,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5819,20 +5819,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6273,6 +6273,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6289,7 +6290,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6373,15 +6374,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index 57b73e9343..aea22403ad 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre_calibre-it\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 09:34+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: italiano\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -1273,6 +1273,7 @@ msgstr "serbo" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -1289,7 +1290,7 @@ msgstr "serbo" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -1688,7 +1689,7 @@ msgstr "Non fa assolutamente niente" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -1719,15 +1720,15 @@ msgstr "Non fa assolutamente niente" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -2180,7 +2181,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [opzioni] FILELIT" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Cartella in uscita. Predefinita: cartella corrente." @@ -2197,7 +2198,7 @@ msgid "Useful for debugging." msgstr "Utile per il debugging" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "Libro OEB creato in" @@ -3271,11 +3272,11 @@ msgstr "Uso: pdf-meta-file.pdf" msgid "Usage: rb-meta file.rb" msgstr "Uso: rb-meta file.rb" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [opzioni] miolibro.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "MOBI HTML raw salvato in" @@ -4690,9 +4691,9 @@ msgstr "Aggiungi una fonte di notizie personalizzata" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Notizie" @@ -6591,21 +6592,21 @@ msgstr "" "\n" "Per aiuto su un comando particolare: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Sto copiando i libri in %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Sto copiando %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" "

Sto migrando il vecchio database nella nuova biblioteca in %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Compattazione database" @@ -6998,6 +6999,9 @@ msgstr "Scaricamento fallito dell'articolo: %s" msgid "Fetching feed" msgstr "Scaricamento feed" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" diff --git a/src/calibre/translations/ja.po b/src/calibre/translations/ja.po index 8c937a5674..0facf1c2e3 100644 --- a/src/calibre/translations/ja.po +++ b/src/calibre/translations/ja.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:49+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:28+0000\n" "Last-Translator: MASA.H \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "まったく何もしません。(何も影響しません。)" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "まったく何もしません。(何も影響しません。)" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -623,7 +623,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "出力先(デフォルトはカレント)" @@ -638,7 +638,7 @@ msgid "Useful for debugging." msgstr "デバッグに有用" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1594,11 +1594,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3758,9 +3758,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "ニュース" @@ -5585,20 +5585,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "データベースのコンパクト化" @@ -6039,6 +6039,7 @@ msgstr "セルビア語" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6055,7 +6056,7 @@ msgstr "セルビア語" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6139,15 +6140,18 @@ msgstr "ボスニア語" msgid "Portugese" msgstr "ポルトガル語" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/nb.po b/src/calibre/translations/nb.po index a68469fcf2..7b258d83e9 100644 --- a/src/calibre/translations/nb.po +++ b/src/calibre/translations/nb.po @@ -7,557 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:53+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:28+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 -msgid "File type" -msgstr "Filtype" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 -msgid "Installed plugins" -msgstr "Installerte programtillegg" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 -msgid "No valid plugin found in " -msgstr "Ingen akseptable programtillegg ble funnet i " - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 -msgid "List all installed plugins" -msgstr "Se alle Installerte programtillegg" - -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 -msgid "There is insufficient free space on the storage card" -msgstr "Det er ikke nok ledig plass på lagringskortet" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:300 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:361 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:971 -msgid "Title" -msgstr "Tittel" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:304 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:489 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:322 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 -msgid "Comments" -msgstr "Kommentarer" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:315 -msgid "Language" -msgstr "Språk" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:840 -msgid "Foreword" -msgstr "Forord" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192 -msgid "Delete books from device" -msgstr "Slett bøker fra enhet" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:207 -msgid "Download books from device" -msgstr "Last ned bøker fra enhet" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -msgid "Formats" -msgstr "Formater" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 -msgid "&Next" -msgstr "&Neste" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 -msgid "Choose Format" -msgstr "Velg format" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:92 -msgid "&Title:" -msgstr "&Tittel:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:502 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:540 -msgid "&Profile:" -msgstr "&Profil:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:541 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:556 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:558 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:573 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:574 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:625 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:471 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:329 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:334 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:357 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 -#: /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:367 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348 -msgid "..." -msgstr "..." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:592 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:608 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:179 -msgid "&Password:" -msgstr "&Passord:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:613 -msgid "&Start Server" -msgstr "&Start server" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:614 -msgid "St&op Server" -msgstr "St&op server" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:615 -msgid "&Test Server" -msgstr "&Test server" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 -msgid "Are you sure?" -msgstr "Er du sikker?" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:473 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:326 -msgid "&Title: " -msgstr "&Tittel: " - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:488 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:351 -msgid "Book " -msgstr "Bok " - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:59 -msgid "ISBN" -msgstr "ISBN" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:163 -msgid "Warning" -msgstr "Advarsel" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352 -msgid "IS&BN:" -msgstr "IS&BN:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:43 -msgid "Aborting..." -msgstr "Avbryter..." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:217 -msgid "Search" -msgstr "Søk" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 -msgid "Monday" -msgstr "Mandag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 -msgid "Tuesday" -msgstr "Tirsdag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 -msgid "Wednesday" -msgstr "Onsdag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 -msgid "day" -msgstr "dag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 -msgid "Friday" -msgstr "Fredag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 -msgid "Saturday" -msgstr "Lørdag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 -msgid "Sunday" -msgstr "Søndag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 -msgid "Thursday" -msgstr "Torsdag" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:176 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:184 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 -msgid " days" -msgstr " dager" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105 -msgid "&Test" -msgstr "&Test" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 -msgid "File &name:" -msgstr "Fil&navn:" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 -msgid "Test" -msgstr "Test" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 -msgid "Title:" -msgstr "Tittel:" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120 -msgid "ISBN:" -msgstr "ISBN:" - -#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:47 -msgid "Status" -msgstr "Status" - -#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:72 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:887 -msgid "Error" -msgstr "Feil" - -#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:74 -msgid "Waiting" -msgstr "Venter" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:974 -msgid "Date" -msgstr "Dato" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:909 -msgid "Format" -msgstr "Format" - -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131 -msgid "Next Page" -msgstr "Neste side" - -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132 -msgid "Previous Page" -msgstr "Forrige side" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:738 -msgid "Books" -msgstr "Bøker" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:741 -msgid "HTML Books" -msgstr "HTML-bøker" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 -msgid "PDF Books" -msgstr "PDF-bøker" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:960 -msgid "Saved" -msgstr "Lagret" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1282 -msgid "Copying database" -msgstr "Kopierer database" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1587 -msgid "Update available" -msgstr "Oppdatering tilgjengelig" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341 -msgid "Alt+S" -msgstr "Alt+S" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:342 -msgid "&Search:" -msgstr "&Søk:" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:165 -msgid "Go to..." -msgstr "Gå til..." - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:207 -msgid "/Unknown" -msgstr "/Ukjent" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:520 -msgid "%s

%s

" -msgstr "%s

%s

" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:156 -msgid "Next page" -msgstr "Neste side" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:157 -msgid "Previous page" -msgstr "Forrige side" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:163 -msgid "Find next" -msgstr "Finn neste" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:164 -msgid "Copy to clipboard" -msgstr "Kopier til utklippstavle" - -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 -msgid "Copying %s" -msgstr "Kopierer %s" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:568 -msgid "Download finished" -msgstr "Nedlasting ferdig" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:572 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:578 -msgid " from " -msgstr " fra " - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hrt.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jutarnji.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nacional_cro.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vecernji_list.py:26 -msgid "Croatian" -msgstr "Kroatisk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata_rs.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_b92.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_blic.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_danas.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_e_novine.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glas_srpske.py:27 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nin.py:31 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_novosti.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pescanik.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pobjeda.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politika.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pressonline.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_rts.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tanjug.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vijesti.py:28 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vreme.py:28 -msgid "Serbian" -msgstr "Serbisk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chr_mon.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_mail.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_telegraph.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_discover_magazine.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dna.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ecogeek.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_economist.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_endgadget.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_espn.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_exiled.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_financial_times.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_forbes.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_freakonomics.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_fudzilla.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers_full.py:27 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_iht.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_indy_star.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_irish_times.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_japan_times.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_joelonsoftware.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jpost.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py:44 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_scientist.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_yorker.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_news_times.py:7 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_newsweek.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm_int.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_outlook_india.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_today.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_world.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politico.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_portfolio.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_reuters.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_aas.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_teleread.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_age.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_nation.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_oz.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_register.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_scotsman.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usnews.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_utne.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:17 -msgid "English" -msgstr "Engelsk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ambito.py:61 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_clarin.py:64 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_criticadigital.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py:61 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_pais.py:14 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_universal.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elargentino.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elcronista.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elmundo.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_granma.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_infobae.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_cuarta.py:53 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_segunda.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_tercera.py:64 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion_chile.py:54 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pagina12.py:25 -msgid "Spanish" -msgstr "Spansk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 -msgid "Italian" -msgstr "Italiensk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_courrierinternational.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cyberpresse.py:9 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_liberation.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mediapart.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mondedurable.py:13 -msgid "French" -msgstr "Fransk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_de_standaard.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_demorgen_be.py:16 -msgid "Dutch" -msgstr "Nederlandsk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 -msgid "German" -msgstr "Tysk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69 -msgid "Portugese" -msgstr "Portugisisk" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "" @@ -604,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -635,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -655,6 +114,10 @@ msgstr "Ukjent" msgid "Base" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 +msgid "File type" +msgstr "Filtype" + #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 msgid "Metadata reader" msgstr "" @@ -707,6 +170,10 @@ msgstr "" msgid "Set metadata in %s files" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 +msgid "Installed plugins" +msgstr "Installerte programtillegg" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 msgid "Mapping for filetype plugins" msgstr "" @@ -719,6 +186,10 @@ msgstr "" msgid "Disabled plugins" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 +msgid "No valid plugin found in " +msgstr "Ingen akseptable programtillegg ble funnet i " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 msgid "Initialization of plugin %s failed with traceback:" msgstr "" @@ -745,6 +216,10 @@ msgid "" "by a comma." msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 +msgid "List all installed plugins" +msgstr "Se alle Installerte programtillegg" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:283 msgid "Enable the named plugin" msgstr "" @@ -759,6 +234,11 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "Lesebrettet har ikke et lagringskort tilknyttet seg." +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 +msgid "There is insufficient free space on the storage card" +msgstr "Det er ikke nok ledig plass på lagringskortet" + #: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:62 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:93 msgid "There is insufficient free space in main memory" @@ -1179,7 +659,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [opsjoner] LITFIL" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Lagringskatalog. Standard er nåværende katalog" @@ -1196,7 +676,7 @@ msgid "Useful for debugging." msgstr "Praktisk for feilsøking." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB bok opprettet i" @@ -2086,6 +1566,16 @@ msgstr "" msgid "Set the comment" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:971 +msgid "Title" +msgstr "Tittel" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:109 @@ -2098,6 +1588,17 @@ msgstr "" msgid "Producer" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:304 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 +msgid "Comments" +msgstr "Kommentarer" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:312 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:311 @@ -2116,6 +1617,10 @@ msgstr "" msgid "Series" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:315 +msgid "Language" +msgstr "Språk" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:317 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:914 msgid "Timestamp" @@ -2248,11 +1753,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -2361,6 +1866,10 @@ msgstr "" msgid "Epigraph" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:840 +msgid "Foreword" +msgstr "Forord" + #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:841 msgid "List of Illustrations" msgstr "" @@ -2574,6 +2083,14 @@ msgstr "" msgid "Upload %d books to device" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192 +msgid "Delete books from device" +msgstr "Slett bøker fra enhet" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:207 +msgid "Download books from device" +msgstr "Last ned bøker fra enhet" + #: /home/kovid/work/calibre/src/calibre/gui2/device.py:217 msgid "View book on device" msgstr "" @@ -2727,6 +2244,17 @@ msgstr "" msgid "Path" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 +msgid "Formats" +msgstr "Formater" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:48 @@ -2749,6 +2277,14 @@ msgstr "" msgid "&Previous" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 +msgid "&Next" +msgstr "&Neste" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 +msgid "Choose Format" +msgstr "Velg format" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:34 msgid "Set defaults for conversion of comics (CBR/CBZ files)" msgstr "" @@ -2757,6 +2293,10 @@ msgstr "" msgid "Set options for converting %s" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:92 +msgid "&Title:" +msgstr "&Tittel:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93 msgid "&Author(s):" msgstr "" @@ -2765,6 +2305,12 @@ msgstr "" msgid "&Number of Colors:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:502 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:540 +msgid "&Profile:" +msgstr "&Profil:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 msgid "Disable &normalize" msgstr "" @@ -2993,6 +2539,36 @@ msgstr "" msgid "Browse for the new database location" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:573 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:625 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:471 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:329 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /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:367 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348 +msgid "..." +msgstr "..." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:542 msgid "Show notification when &new version is available" msgstr "" @@ -3185,6 +2761,13 @@ msgstr "" msgid "Your username on the mail server" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:592 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:608 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:179 +msgid "&Password:" +msgstr "&Passord:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:593 msgid "Your password on the mail server" msgstr "" @@ -3268,6 +2851,18 @@ msgstr "" msgid "Max. &cover size:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:613 +msgid "&Start Server" +msgstr "&Start server" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:614 +msgid "St&op Server" +msgstr "St&op server" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:615 +msgid "&Test Server" +msgstr "&Test server" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:616 msgid "Run server &automatically on startup" msgstr "" @@ -3315,6 +2910,10 @@ msgstr "" msgid "&Add" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 +msgid "Are you sure?" +msgstr "Er du sikker?" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 msgid "&Show this warning again" msgstr "" @@ -3475,6 +3074,12 @@ msgstr "" msgid "Use cover from &source file" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:326 +msgid "&Title: " +msgstr "&Tittel: " + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:474 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:327 @@ -3563,6 +3168,12 @@ msgstr "" msgid "Series index." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:351 +msgid "Book " +msgstr "Bok " + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:490 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 msgid "Source en&coding:" @@ -3731,6 +3342,10 @@ msgstr "" msgid "Author Sort" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:59 +msgid "ISBN" +msgstr "ISBN" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 msgid "Finding metadata..." msgstr "" @@ -3743,6 +3358,10 @@ msgstr "" msgid "The metadata download seems to have stalled. Try again later." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:163 +msgid "Warning" +msgstr "Advarsel" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:164 msgid "Could not fetch metadata from:" msgstr "" @@ -4166,6 +3785,10 @@ msgstr "" msgid "Remove unused series (Series that have no books)" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352 +msgid "IS&BN:" +msgstr "IS&BN:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:354 msgid "&Fetch metadata from server" msgstr "" @@ -4198,6 +3821,10 @@ msgstr "" msgid "Password needed" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:43 +msgid "Aborting..." +msgstr "Avbryter..." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:40 msgid "You" msgstr "" @@ -4214,10 +3841,47 @@ msgstr "" msgid "Scheduled" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:217 +msgid "Search" +msgstr "Søk" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:317 msgid "%d recipes" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 +msgid "Monday" +msgstr "Mandag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 +msgid "Tuesday" +msgstr "Tirsdag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 +msgid "Wednesday" +msgstr "Onsdag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:318 +msgid "day" +msgstr "dag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 +msgid "Friday" +msgstr "Fredag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 +msgid "Saturday" +msgstr "Lørdag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 +msgid "Sunday" +msgstr "Søndag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:319 +msgid "Thursday" +msgstr "Torsdag" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:356 msgid "Must set account information" msgstr "" @@ -4253,9 +3917,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -4299,6 +3963,12 @@ msgid "" "recipe will be downloaded every hour." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 +msgid " days" +msgstr " dager" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:177 msgid "&Account" msgstr "" @@ -4426,6 +4096,11 @@ msgstr "" msgid "Send test mail from %s to:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105 +msgid "&Test" +msgstr "&Test" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:62 msgid "No recipe selected" msgstr "" @@ -4634,6 +4309,18 @@ msgstr "" msgid "Regular &expression" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +msgid "File &name:" +msgstr "Fil&navn:" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 +msgid "Test" +msgstr "Test" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 +msgid "Title:" +msgstr "Tittel:" + #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109 msgid "Regular expression (?P<title>)" msgstr "" @@ -4675,6 +4362,10 @@ msgstr "" msgid "Regular expression (?P)" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120 +msgid "ISBN:" +msgstr "ISBN:" + #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121 msgid "Regular expression (?P)" msgstr "" @@ -4683,6 +4374,10 @@ msgstr "" msgid "Job" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:47 +msgid "Status" +msgstr "Status" + #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:48 msgid "Progress" msgstr "" @@ -4699,6 +4394,15 @@ msgstr "" msgid "Finished" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:887 +msgid "Error" +msgstr "Feil" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:74 +msgid "Waiting" +msgstr "Venter" + #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:76 msgid "Working" msgstr "" @@ -4721,6 +4425,11 @@ msgstr "" msgid "Size (MB)" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:974 +msgid "Date" +msgstr "Dato" + #: /home/kovid/work/calibre/src/calibre/gui2/library.py:112 msgid "Rating" msgstr "" @@ -4745,6 +4454,10 @@ msgid "" "library." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:909 +msgid "Format" +msgstr "Format" + #: /home/kovid/work/calibre/src/calibre/gui2/library.py:963 msgid "Double click to edit me

" msgstr "" @@ -4794,6 +4507,14 @@ msgstr "" msgid "LRF Viewer toolbar" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131 +msgid "Next Page" +msgstr "Neste side" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132 +msgid "Previous Page" +msgstr "Forrige side" + #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:154 msgid "Back" @@ -4972,6 +4693,10 @@ msgstr "" msgid "Uploading books to device." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:738 +msgid "Books" +msgstr "Bøker" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:739 msgid "EPUB Books" msgstr "" @@ -4980,6 +4705,10 @@ msgstr "" msgid "LRF Books" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:741 +msgid "HTML Books" +msgstr "HTML-bøker" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "LIT Books" msgstr "" @@ -4992,6 +4721,10 @@ msgstr "" msgid "Text books" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +msgid "PDF Books" +msgstr "PDF-bøker" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:746 msgid "Comics" msgstr "" @@ -5063,6 +4796,10 @@ msgstr "" msgid "Saving to disk..." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:960 +msgid "Saved" +msgstr "Lagret" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:967 msgid "Choose destination directory" msgstr "" @@ -5116,6 +4853,10 @@ msgstr "" msgid "Cannot configure while there are running jobs." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1282 +msgid "Copying database" +msgstr "Kopierer database" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:1285 msgid "Copying library to " msgstr "" @@ -5205,6 +4946,10 @@ msgid "" "href=\"%s\">%s" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1587 +msgid "Update available" +msgstr "Oppdatering tilgjengelig" + #: /home/kovid/work/calibre/src/calibre/gui2/main.py:1588 msgid "" "%s has been updated to version %s. See the
Words separated by spaces " @@ -5567,10 +5320,18 @@ msgstr "" msgid "The standard font type" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:165 +msgid "Go to..." +msgstr "Gå til..." + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:206 msgid "Position in book" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:207 +msgid "/Unknown" +msgstr "/Ukjent" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "Go to a reference. To get reference numbers, use the reference mode." msgstr "" @@ -5623,6 +5384,10 @@ msgstr "" msgid "Could not open ebook" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:520 +msgid "%s

%s

" +msgstr "%s

%s

" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:592 msgid "Options to control the ebook viewer" msgstr "" @@ -5647,6 +5412,14 @@ msgstr "" msgid "toolBar" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:156 +msgid "Next page" +msgstr "Neste side" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:157 +msgid "Previous page" +msgstr "Forrige side" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:158 msgid "Font size larger" msgstr "" @@ -5655,6 +5428,14 @@ msgstr "" msgid "Font size smaller" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:163 +msgid "Find next" +msgstr "Finn neste" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:164 +msgid "Copy to clipboard" +msgstr "Kopier til utklippstavle" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:166 msgid "Reference Mode" msgstr "" @@ -5963,15 +5744,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 +msgid "Copying %s" +msgstr "Kopierer %s" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6225,10 +6011,19 @@ msgstr "" msgid "Unknown News Source" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:568 +msgid "Download finished" +msgstr "Nedlasting ferdig" + #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:570 msgid "Failed to download the following articles:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:572 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:578 +msgid " from " +msgstr " fra " + #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 msgid "Failed to download parts of the following articles:" msgstr "" @@ -6298,15 +6093,224 @@ msgstr "" msgid "Fetching feed" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hrt.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jutarnji.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nacional_cro.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vecernji_list.py:26 +msgid "Croatian" +msgstr "Kroatisk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata_rs.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_b92.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_blic.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_danas.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_e_novine.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glas_srpske.py:27 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nin.py:31 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_novosti.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pescanik.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pobjeda.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politika.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pressonline.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_rts.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tanjug.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vijesti.py:28 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vreme.py:28 +msgid "Serbian" +msgstr "Serbisk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chr_mon.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_mail.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_telegraph.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_discover_magazine.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dna.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ecogeek.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_economist.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_endgadget.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_espn.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_exiled.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_financial_times.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_forbes.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_freakonomics.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_fudzilla.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers_full.py:27 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_iht.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_indy_star.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_irish_times.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_japan_times.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_joelonsoftware.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jpost.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py:44 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_scientist.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_yorker.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_news_times.py:7 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_newsweek.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm_int.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_outlook_india.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_today.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_world.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politico.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_portfolio.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_reuters.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_aas.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_teleread.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_age.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_nation.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_oz.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_register.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_scotsman.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usnews.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_utne.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:17 +msgid "English" +msgstr "Engelsk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ambito.py:61 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_clarin.py:64 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_criticadigital.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py:61 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_pais.py:14 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_universal.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elargentino.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elcronista.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elmundo.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_granma.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_infobae.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_cuarta.py:53 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_segunda.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_tercera.py:64 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion_chile.py:54 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pagina12.py:25 +msgid "Spanish" +msgstr "Spansk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 +msgid "Italian" +msgstr "Italiensk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_courrierinternational.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cyberpresse.py:9 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_liberation.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mediapart.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mondedurable.py:13 +msgid "French" +msgstr "Fransk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_de_standaard.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_demorgen_be.py:16 +msgid "Dutch" +msgstr "Nederlandsk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 +msgid "German" +msgstr "Tysk" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevni_avaz.py:27 msgid "Bosnian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69 +msgid "Portugese" +msgstr "Portugisisk" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/nds.po b/src/calibre/translations/nds.po index 312052a702..5e19a66f6b 100644 --- a/src/calibre/translations/nds.po +++ b/src/calibre/translations/nds.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 18:44+0000\n" "Last-Translator: S. Dorscht \n" "Language-Team: American English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -788,7 +788,7 @@ msgstr "Macht gar nix" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -819,15 +819,15 @@ msgstr "Macht gar nix" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -1432,7 +1432,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist aktuelles Verzeichnis." @@ -1449,7 +1449,7 @@ msgid "Useful for debugging." msgstr "Hilfreich bei der Fehlersuche." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -2594,11 +2594,11 @@ msgstr "Benutzung: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Erstelle Mobipocket Datei aus EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" @@ -4572,9 +4572,9 @@ msgstr "Neue individuelle Nachrichtenquelle hinzufügen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Nachrichten" @@ -6593,20 +6593,20 @@ msgstr "" "\n" "Sie erhalten Hilfe zu einem bestimmten Befehl mit: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopiere Bücher nach %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopiere %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Migriere alte Datenbank zu eBook Bibliothek in %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Komprimiere Datenbank" @@ -7105,6 +7105,7 @@ msgstr "Serbisch" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -7121,7 +7122,7 @@ msgstr "Serbisch" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -7201,15 +7202,18 @@ msgstr "Deutsch" msgid "Portugese" msgstr "Portugisisch" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "Ungarisch" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Überspringe doppelten Artikel: %s" diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index 9b1cd35f98..80e4fa1ac0 100644 --- a/src/calibre/translations/nl.po +++ b/src/calibre/translations/nl.po @@ -7,160 +7,20 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:04+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:29+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Doet absoluut niets." -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 -msgid "File type" -msgstr "Bestandstype" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:12 -msgid "" -"Follow all local links in an HTML file and create a ZIP file containing all " -"linked files. This plugin is run every time you add an HTML file to the " -"library." -msgstr "" -"Volg alle plaatselijke links in een HTML bestand en maak een ZIP bestand met " -"alle gelinkte bestanden. Deze plugin wordt elke keer u een HTML bestand aan " -"de bibliotheek toevoegd, opgestart." - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:64 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:74 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:84 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:105 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:126 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:136 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167 -msgid "Read metadata from %s files" -msgstr "Lees de metadata van de %s bestanden" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 -msgid "Read metadata from ebooks in ZIP archives" -msgstr "Lees de metadata van ebooks in ZIP archieven" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 -msgid "Read metadata from ebooks in RAR archives" -msgstr "Lees de metadata van ebooks in RAR archieven" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 -msgid "Set metadata in %s files" -msgstr "Bepaal metadata in %s bestanden" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 -msgid "Installed plugins" -msgstr "Geïnstalleerde plugins" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 -msgid "Disabled plugins" -msgstr "Gedesactiveerde plugins" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 -msgid "No valid plugin found in " -msgstr "Geen geldige plugin gevonden in " - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 -msgid "Add a plugin by specifying the path to the zip file containing it." -msgstr "" -"Voeg een plugin toe door het pad op te geven naar het zip bestand waarin het " -"zich bevindt." - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 -msgid "List all installed plugins" -msgstr "Toon geïnstalleerde plugins" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:283 -msgid "Enable the named plugin" -msgstr "Activeer de genoemde plugin" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:285 -msgid "Disable the named plugin" -msgstr "Desactiveer de genoemde plugin" - -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 -msgid "There is insufficient free space on the storage card" -msgstr "Er is onvoldoende vrije plaats op de geheugenkaart" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:139 -msgid "Path to the cover to be used for this book" -msgstr "Pad naar de omslag die voor dit boek gebruikt moet orden" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:142 -msgid "" -"Use the cover detected from the source file in preference to the specified " -"cover." -msgstr "" -"Gebruik de in het bronbestand gedetecteerde omslag en niet de opgegeven " -"omslag" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:175 -msgid "Don't add auto-detected chapters to the Table of Contents." -msgstr "" -"Voeg geen automatisch gedetecteerde hoofdstukken toe aan de Inhoudstafel" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 -msgid "Control page layout" -msgstr "Controleer de pagina opmaak" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:204 -msgid "Set the top margin in pts. Default is %default" -msgstr "Bepaal de bovenmarge in pts. Standaard is het %default" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:206 -msgid "Set the bottom margin in pts. Default is %default" -msgstr "Bepaal de ondermarge in pts. Standaard is het %default" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:208 -msgid "Set the left margin in pts. Default is %default" -msgstr "Bepaal de linkermarge in pts. Standaard is het %default" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:210 -msgid "Set the right margin in pts. Default is %default" -msgstr "Bepaal de rechtermarge in pts. Standaard is het %default" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:212 -msgid "" -"The base font size in pts. Default is %defaultpt. Set to 0 to disable " -"rescaling of fonts." -msgstr "" -"De basis lettergrootte in pts. Standaard is het %defaultpt. Stel in op 0 om " -"het herschalen van lettertypen uit te schakelen" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 -msgid "" -"Remove spacing between paragraphs. Also sets a indent on paragraphs of " -"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" -"css. Spacing removal will not work if the source file forces inter-paragraph " -"spacing." -msgstr "" -"Verwijderd spatiëring tussen de paragrafen. Voegt eveneens een inspringen " -"van 1,5em toe aan paragrafen. U kan dit overschrijven door p {text-indent: " -"0cm} toe te voegen aan --override-css. Het verwijderen van spatiëring tussen " -"de paragrafen zal niet werken indien het bronbestand spatiëring dwingt " -"tussen paragrafen." - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:98 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:50 @@ -203,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -234,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -254,6 +114,10 @@ msgstr "Onbekend" msgid "Base" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 +msgid "File type" +msgstr "Bestandstype" + #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 msgid "Metadata reader" msgstr "" @@ -262,10 +126,57 @@ msgstr "" msgid "Metadata writer" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:12 +msgid "" +"Follow all local links in an HTML file and create a ZIP file containing all " +"linked files. This plugin is run every time you add an HTML file to the " +"library." +msgstr "" +"Volg alle plaatselijke links in een HTML bestand en maak een ZIP bestand met " +"alle gelinkte bestanden. Deze plugin wordt elke keer u een HTML bestand aan " +"de bibliotheek toevoegd, opgestart." + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:64 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:74 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:84 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:105 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:126 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:136 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167 +msgid "Read metadata from %s files" +msgstr "Lees de metadata van de %s bestanden" + #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:177 msgid "Extract cover from comic files" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 +msgid "Read metadata from ebooks in ZIP archives" +msgstr "Lees de metadata van ebooks in ZIP archieven" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 +msgid "Read metadata from ebooks in RAR archives" +msgstr "Lees de metadata van ebooks in RAR archieven" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +msgid "Set metadata in %s files" +msgstr "Bepaal metadata in %s bestanden" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 +msgid "Installed plugins" +msgstr "Geïnstalleerde plugins" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 msgid "Mapping for filetype plugins" msgstr "" @@ -274,6 +185,14 @@ msgstr "" msgid "Local plugin customization" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 +msgid "Disabled plugins" +msgstr "Gedesactiveerde plugins" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 +msgid "No valid plugin found in " +msgstr "Geen geldige plugin gevonden in " + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 msgid "Initialization of plugin %s failed with traceback:" msgstr "" @@ -286,6 +205,12 @@ msgid "" " " msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 +msgid "Add a plugin by specifying the path to the zip file containing it." +msgstr "" +"Voeg een plugin toe door het pad op te geven naar het zip bestand waarin het " +"zich bevindt." + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:277 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "" @@ -296,12 +221,29 @@ msgid "" "by a comma." msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 +msgid "List all installed plugins" +msgstr "Toon geïnstalleerde plugins" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:283 +msgid "Enable the named plugin" +msgstr "Activeer de genoemde plugin" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:285 +msgid "Disable the named plugin" +msgstr "Desactiveer de genoemde plugin" + #: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:41 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:394 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:72 msgid "The reader has no storage card connected." msgstr "Er is geen geheugen kaart verbonden met de reader." +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 +msgid "There is insufficient free space on the storage card" +msgstr "Er is onvoldoende vrije plaats op de geheugenkaart" + #: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:62 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:93 msgid "There is insufficient free space in main memory" @@ -367,6 +309,18 @@ msgid "" "\"both\" will use both page breaks and lines to mark chapters." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:139 +msgid "Path to the cover to be used for this book" +msgstr "Pad naar de omslag die voor dit boek gebruikt moet orden" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:142 +msgid "" +"Use the cover detected from the source file in preference to the specified " +"cover." +msgstr "" +"Gebruik de in het bronbestand gedetecteerde omslag en niet de opgegeven " +"omslag" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 msgid "" "Remove the first image from the input ebook. Useful if the first image in " @@ -411,6 +365,11 @@ msgid "" "threshold number of chapters were detected." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:175 +msgid "Don't add auto-detected chapters to the Table of Contents." +msgstr "" +"Voeg geen automatisch gedetecteerde hoofdstukken toe aan de Inhoudstafel" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:177 msgid "" "If fewer than this number of chapters is detected, then links are added to " @@ -453,6 +412,47 @@ msgid "" "one is always used." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 +msgid "Control page layout" +msgstr "Controleer de pagina opmaak" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:204 +msgid "Set the top margin in pts. Default is %default" +msgstr "Bepaal de bovenmarge in pts. Standaard is het %default" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:206 +msgid "Set the bottom margin in pts. Default is %default" +msgstr "Bepaal de ondermarge in pts. Standaard is het %default" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:208 +msgid "Set the left margin in pts. Default is %default" +msgstr "Bepaal de linkermarge in pts. Standaard is het %default" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:210 +msgid "Set the right margin in pts. Default is %default" +msgstr "Bepaal de rechtermarge in pts. Standaard is het %default" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:212 +msgid "" +"The base font size in pts. Default is %defaultpt. Set to 0 to disable " +"rescaling of fonts." +msgstr "" +"De basis lettergrootte in pts. Standaard is het %defaultpt. Stel in op 0 om " +"het herschalen van lettertypen uit te schakelen" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 +msgid "" +"Remove spacing between paragraphs. Also sets a indent on paragraphs of " +"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" +"css. Spacing removal will not work if the source file forces inter-paragraph " +"spacing." +msgstr "" +"Verwijderd spatiëring tussen de paragrafen. Voegt eveneens een inspringen " +"van 1,5em toe aan paragrafen. U kan dit overschrijven door p {text-indent: " +"0cm} toe te voegen aan --override-css. Het verwijderen van spatiëring tussen " +"de paragrafen zal niet werken indien het bronbestand spatiëring dwingt " +"tussen paragrafen." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 msgid "Do not force text to be justified in output." msgstr "" @@ -648,7 +648,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [opties] LITBESTAND" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Output folder. Standaard is dit de huidige folder." @@ -665,7 +665,7 @@ msgid "Useful for debugging." msgstr "Handig voor Debugging" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB boek bemaakt in" @@ -1781,11 +1781,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [opties] mijnboek.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "RAW MOBI HTML bewaard in" @@ -3980,9 +3980,9 @@ msgstr "Voeg een persoonlijke nieuwsbron toe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5939,20 +5939,20 @@ msgstr "" "\n" "Voor help met een specifiek commando: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Copieer %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Migreer oude database naar eboek bibliotheek in %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Comprimeren database" @@ -6445,6 +6445,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6461,7 +6462,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6545,15 +6546,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/pl.po b/src/calibre/translations/pl.po index 03f78e1ae3..41b97430a4 100644 --- a/src/calibre/translations/pl.po +++ b/src/calibre/translations/pl.po @@ -7,319 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:24+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:30+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 -msgid "Read metadata from ebooks in ZIP archives" -msgstr "Odczyt metadanych z e-booków w archiwach ZIP" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 -msgid "Read metadata from ebooks in RAR archives" -msgstr "Odczyt metadanych z e-booków w archiwach RAR" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 -msgid "Set metadata in %s files" -msgstr "Ustaw metadane w %s plikach" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 -msgid "Do not force text to be justified in output." -msgstr "Nie wymuszaj wyjustowania tekstu w pliku wynikowym." - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:962 -msgid "The author(s) of the ebook, as a & separated list." -msgstr "Autor(zy) ebooka, jako lista rozdzielana znakiem &." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:114 -msgid "Add extra spacing below the header. Default is %default px." -msgstr "" -"Dodaj dodatkowy odstęp poniżej nagłówka. Domyślna wartość to %default " -"pikseli." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 -msgid "" -"Force a page break before tags whose names match this regular expression." -msgstr "" -"Wymusza koniec strony przed znacznikami, których nazwa pokrywa się z danym " -"wyrażeniem regularnym." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:30 -msgid "Keep generated HTML files after completing conversion to LRF." -msgstr "Zachowaj wygenerowany plik HTML po konwersji do LRF." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:195 -msgid "Set the publisher" -msgstr "Ustaw wydawcę" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:197 -msgid "Set the ISBN" -msgstr "Ustaw ISBN" - -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:66 -msgid "Disable notifications from the system tray icon" -msgstr "Zablokuj powiadomienia z ikony w zasobniku systemowym" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 -msgid "Choose format to send to device" -msgstr "Wybierz format plików przesyłanych na urządzenie" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:561 -msgid "Show ¬ifications in system tray" -msgstr "Pokaż &powiadomienia w zasobniku systemowym" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:575 -msgid "Use internal &viewer for:" -msgstr "Użyj &wewnętrzej przeglądarki dla:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 -msgid "&Show this warning again" -msgstr "&Zawsze pokazuj to ostrzeżenie" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:493 -msgid "Remove &spacing between paragraphs" -msgstr "Usuń &odstepny pomiędzy paragrafami" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:498 -msgid "No text &justification" -msgstr "Nie &justuj tekstu" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:518 -msgid "Automatic &chapter detection" -msgstr "Automatyczne wykrywanie &rozdziałów" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:522 -msgid "Automatic &Table of Contents" -msgstr "Automatyczny &spis treści" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:524 -msgid "Do not add &detected chapters to the Table of Contents" -msgstr "Nie &dodawaj automatycznie wykrytych rozdziałów do spisu treści" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:526 -msgid "&Force use of auto-generated Table of Contents" -msgstr "&Wymuś użycie wygenerowanego automatycznie spisu treści" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:171 -msgid "&Schedule for download:" -msgstr "&Zaplanuj do pobrania:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 -msgid "Choose a recipe file" -msgstr "Wybierz plik źródła" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hrt.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jutarnji.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nacional_cro.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vecernji_list.py:26 -msgid "Croatian" -msgstr "Chorwackie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata_rs.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_b92.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_blic.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_danas.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_e_novine.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glas_srpske.py:27 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nin.py:31 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_novosti.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pescanik.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pobjeda.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politika.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pressonline.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_rts.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tanjug.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vijesti.py:28 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vreme.py:28 -msgid "Serbian" -msgstr "Serbskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chr_mon.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_mail.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_telegraph.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_discover_magazine.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dna.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ecogeek.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_economist.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_endgadget.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_espn.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_exiled.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_financial_times.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_forbes.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_freakonomics.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_fudzilla.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers_full.py:27 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_iht.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_indy_star.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_irish_times.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_japan_times.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_joelonsoftware.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jpost.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py:44 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_scientist.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_yorker.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_news_times.py:7 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_newsweek.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm_int.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_outlook_india.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_today.py:11 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_world.py:8 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politico.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_portfolio.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_reuters.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_aas.py:13 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_teleread.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_age.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_nation.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_oz.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_register.py:6 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_scotsman.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usnews.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_utne.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:17 -msgid "English" -msgstr "Angielskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ambito.py:61 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_clarin.py:64 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_criticadigital.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py:61 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_pais.py:14 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_universal.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elargentino.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elcronista.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elmundo.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_granma.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_infobae.py:21 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_cuarta.py:53 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_segunda.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_tercera.py:64 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion_chile.py:54 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py:25 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pagina12.py:25 -msgid "Spanish" -msgstr "Hiszpańskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 -msgid "Italian" -msgstr "Włoskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_courrierinternational.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cyberpresse.py:9 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_liberation.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mediapart.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mondedurable.py:13 -msgid "French" -msgstr "Francuskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_de_standaard.py:12 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_demorgen_be.py:16 -msgid "Dutch" -msgstr "Holenderskie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 -msgid "German" -msgstr "Niemieckie" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69 -msgid "Portugese" -msgstr "Portugalskie" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Ta opcja nic nie zmienia" @@ -366,7 +63,7 @@ msgstr "Ta opcja nic nie zmienia" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -397,15 +94,15 @@ msgstr "Ta opcja nic nie zmienia" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -460,6 +157,22 @@ msgstr "Odczytaj metadane z %s plików" msgid "Extract cover from comic files" msgstr "Wyodrębnij okładki z plików komisów" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 +msgid "Read metadata from ebooks in ZIP archives" +msgstr "Odczyt metadanych z e-booków w archiwach ZIP" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 +msgid "Read metadata from ebooks in RAR archives" +msgstr "Odczyt metadanych z e-booków w archiwach RAR" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +msgid "Set metadata in %s files" +msgstr "Ustaw metadane w %s plikach" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 msgid "Installed plugins" msgstr "Zainstalowane wtyczki" @@ -771,6 +484,10 @@ msgid "" "spacing." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 +msgid "Do not force text to be justified in output." +msgstr "Nie wymuszaj wyjustowania tekstu w pliku wynikowym." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 msgid "" "Remove table markup, converting it into paragraphs. This is useful if your " @@ -917,6 +634,10 @@ msgstr "Ustaw metadane w wygenerowanym e-booku." msgid "Set the title. Default is to autodetect." msgstr "Ustaw tytuł ksiązki. Domyślnie jest on wykrywny automatycznie." +#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:962 +msgid "The author(s) of the ebook, as a & separated list." +msgstr "Autor(zy) ebooka, jako lista rozdzielana znakiem &." + #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:964 msgid "The subject(s) of this book, as a comma separated list." msgstr "Temat(y) tej książki, jako lista rozdzielona przecinkami." @@ -970,7 +691,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [opcje] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Folder docelowy. Domyślnie to aktualny folder." @@ -987,7 +708,7 @@ msgid "Useful for debugging." msgstr "Użyteczne dla debugowania." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB ebook stworzony w" @@ -1097,6 +818,12 @@ msgstr "" "Ustaw format nagłówka. %a jest zastępowane nazwiskiem autora, %t - tytułem " "książki. Styl domyślny: %default" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:114 +msgid "Add extra spacing below the header. Default is %default px." +msgstr "" +"Dodaj dodatkowy odstęp poniżej nagłówka. Domyślna wartość to %default " +"pikseli." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:116 msgid "" "Override the CSS. Can be either a path to a CSS stylesheet or a string. If " @@ -1222,6 +949,13 @@ msgid "" "has only a few elements." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +msgid "" +"Force a page break before tags whose names match this regular expression." +msgstr "" +"Wymusza koniec strony przed znacznikami, których nazwa pokrywa się z danym " +"wyrażeniem regularnym." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:186 msgid "" "Force a page break before an element having the specified attribute. The " @@ -1486,6 +1220,10 @@ msgstr "" msgid "Print generated HTML to stdout and quit." msgstr "Wydrukuj wygenerowany HTML do wyjścia standardowego i zamknij." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:30 +msgid "Keep generated HTML files after completing conversion to LRF." +msgstr "Zachowaj wygenerowany plik HTML po konwersji do LRF." + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:20 msgid "Options to control the behavior of feeds2disk" msgstr "Opcje kontrolujące zachowanie feeds2disk" @@ -1715,6 +1453,11 @@ msgstr "" msgid "Extract thumbnail from LRF file" msgstr "Wypakuj miniaturkę z pliku LRF" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:195 +msgid "Set the publisher" +msgstr "Ustaw wydawcę" + #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 msgid "Set the book classification" msgstr "" @@ -1975,6 +1718,10 @@ msgstr "" msgid "Set the language" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:197 +msgid "Set the ISBN" +msgstr "Ustaw ISBN" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1026 msgid "Set the dc:language field" msgstr "" @@ -1991,11 +1738,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -2250,6 +1997,10 @@ msgid "" "window" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:66 +msgid "Disable notifications from the system tray icon" +msgstr "Zablokuj powiadomienia z ikony w zasobniku systemowym" + #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:68 msgid "Default action to perform when send to device button is clicked" msgstr "" @@ -2373,6 +2124,10 @@ msgstr "" msgid "selected to send" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 +msgid "Choose format to send to device" +msgstr "Wybierz format plików przesyłanych na urządzenie" + #: /home/kovid/work/calibre/src/calibre/gui2/device.py:428 msgid "No device" msgstr "" @@ -2874,6 +2629,10 @@ msgid "Enable system &tray icon (needs restart)" msgstr "" "Aktywuj ikonę w &zasobniku systemowym (wymaga ponownego uruchomienia)" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:561 +msgid "Show ¬ifications in system tray" +msgstr "Pokaż &powiadomienia w zasobniku systemowym" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:562 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" @@ -2918,6 +2677,10 @@ msgstr "Pokazuj &tekst pod przyciskami na pasku narzędzi" msgid "Select visible &columns in library view" msgstr "Wybierz &kolumny pokazywane w widoku biblioteki:" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:575 +msgid "Use internal &viewer for:" +msgstr "Użyj &wewnętrzej przeglądarki dla:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:576 msgid "calibre can send your books to you (or your reader) by email" msgstr "" @@ -3148,6 +2911,10 @@ msgstr "&Dodaj" msgid "Are you sure?" msgstr "Na pewno?" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 +msgid "&Show this warning again" +msgstr "&Zawsze pokazuj to ostrzeżenie" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41 msgid "ERROR" msgstr "BŁĄD" @@ -3422,6 +3189,10 @@ msgstr "Główny &rozmiar czcionki:" msgid " pt" msgstr " pkt" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:493 +msgid "Remove &spacing between paragraphs" +msgstr "Usuń &odstepny pomiędzy paragrafami" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:494 msgid "Preserve &tag structure when splitting" msgstr "" @@ -3438,6 +3209,10 @@ msgstr "" msgid "&Use author sort to set author field in output" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:498 +msgid "No text &justification" +msgstr "Nie &justuj tekstu" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:499 msgid "&Linearize tables" msgstr "" @@ -3504,6 +3279,10 @@ msgstr "" msgid "&Name XPath:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:518 +msgid "Automatic &chapter detection" +msgstr "Automatyczne wykrywanie &rozdziałów" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:519 msgid "" "

You can control how calibre detects chapters using a XPath expression. To " @@ -3520,14 +3299,26 @@ msgstr "" msgid "Chapter &mark:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:522 +msgid "Automatic &Table of Contents" +msgstr "Automatyczny &spis treści" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:523 msgid "Number of &links to add to Table of Contents" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:524 +msgid "Do not add &detected chapters to the Table of Contents" +msgstr "Nie &dodawaj automatycznie wykrytych rozdziałów do spisu treści" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:525 msgid "Chapter &threshold" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:526 +msgid "&Force use of auto-generated Table of Contents" +msgstr "&Wymuś użycie wygenerowanego automatycznie spisu treści" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:527 msgid "Level &1 TOC" msgstr "" @@ -4125,9 +3916,9 @@ msgstr "Dodaj własne źródło aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Aktualności" @@ -4152,6 +3943,10 @@ msgstr "Planowanie pobierania" msgid "blurb" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:171 +msgid "&Schedule for download:" +msgstr "&Zaplanuj do pobrania:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:172 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:174 msgid "Every " @@ -4391,6 +4186,10 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +msgid "Choose a recipe file" +msgstr "Wybierz plik źródła" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:248 msgid "Add custom news source" msgstr "Dodaj własne źródło aktualności" @@ -5974,20 +5773,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopiowanie książek do %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopiowanie %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Kompaktowanie bazy danych" @@ -6329,19 +6128,224 @@ msgstr "Pobieranie artykułu nie powiodło się: %s" msgid "Fetching feed" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevnik_cro.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hrt.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jutarnji.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nacional_cro.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vecernji_list.py:26 +msgid "Croatian" +msgstr "Chorwackie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_24sata_rs.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_b92.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_blic.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_danas.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_e_novine.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glas_srpske.py:27 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nin.py:31 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_novosti.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pescanik.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pobjeda.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politika.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pressonline.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_rts.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tanjug.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vijesti.py:28 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_vreme.py:28 +msgid "Serbian" +msgstr "Serbskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_adventuregamers.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_amspec.py:14 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ap.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ars_technica.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_atlantic.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_barrons.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_bbc.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_business_week.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_breaking_news.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chr_mon.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_mail.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_daily_telegraph.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_discover_magazine.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dna.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ecogeek.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_economist.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_endgadget.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_espn.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_exiled.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_financial_times.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_forbes.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_freakonomics.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_fudzilla.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers_full.py:27 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_honoluluadvertiser.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_iht.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_indy_star.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_irish_times.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_japan_times.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_joelonsoftware.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jpost.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde_english.py:44 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_krstarica_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_latimes.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_linux_magazine.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lrb.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_miami_herald.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_moscow_times.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_msdnmag_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nasa.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_scientist.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_york_review_of_books_no_sub.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_new_yorker.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_news_times.py:7 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_newsweek.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nspm_int.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_outlook_india.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_today.py:11 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_world.py:8 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politico.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_portfolio.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_reuters.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_san_fran_chronicle.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_aas.py:13 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_st_petersburg_times.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_starbulletin.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_straitstimes.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_telegraph_uk.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_teleread.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_age.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_nation.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_oz.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_register.py:6 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_the_scotsman.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usatoday.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_usnews.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_utne.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wash_post.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wikinews_en.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_winsupersite.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:17 +msgid "English" +msgstr "Angielskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ambito.py:61 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_clarin.py:64 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_criticadigital.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_mercurio_chile.py:61 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_pais.py:14 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_el_universal.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elargentino.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elcronista.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elmundo.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_granma.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_infobae.py:21 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_juventudrebelde.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_cuarta.py:53 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_segunda.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_tercera.py:64 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lanacion_chile.py:54 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa.py:60 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py:25 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pagina12.py:25 +msgid "Spanish" +msgstr "Hiszpańskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 +msgid "Italian" +msgstr "Włoskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_courrierinternational.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cyberpresse.py:9 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_liberation.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mediapart.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_mondedurable.py:13 +msgid "French" +msgstr "Francuskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_de_standaard.py:12 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_demorgen_be.py:16 +msgid "Dutch" +msgstr "Holenderskie" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 +msgid "German" +msgstr "Niemieckie" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevni_avaz.py:27 msgid "Bosnian" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_estadao.py:62 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69 +msgid "Portugese" +msgstr "Portugalskie" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/pt.po b/src/calibre/translations/pt.po index 34b6777af9..3a0c8e8dd0 100644 --- a/src/calibre/translations/pt.po +++ b/src/calibre/translations/pt.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 09:27+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:68 @@ -172,7 +172,7 @@ msgstr "Não faz absolutamente nada" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -203,15 +203,15 @@ msgstr "Não faz absolutamente nada" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -837,7 +837,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Pasta de destino. A predefinição é a pasta actual." @@ -854,7 +854,7 @@ msgid "Useful for debugging." msgstr "Útil para depurar." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "Livro OEB criado em" @@ -2002,11 +2002,11 @@ msgstr "Utilização: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "A criar o ficheiro Mobipocket a partir de EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] myebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "MOBI HTML em bruto guardado em" @@ -4165,9 +4165,9 @@ msgstr "Adicionar uma fonte de notícias personalizada" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Notícias" @@ -6205,22 +6205,22 @@ msgstr "" " %s\n" "Para ajuda num comando individual: %%prog comando --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

A copiar os livros para %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "A copiar %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" "

A migrar a base de dados antiga para a biblioteca de livros em " "%s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "A compactar a base de dados" @@ -6720,6 +6720,7 @@ msgstr "Sérvio" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6736,7 +6737,7 @@ msgstr "Sérvio" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6820,15 +6821,18 @@ msgstr "" msgid "Portugese" msgstr "Português" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Saltar o artigo duplicado: %s" diff --git a/src/calibre/translations/ro.po b/src/calibre/translations/ro.po index 11fb58ebfc..74566f615b 100644 --- a/src/calibre/translations/ro.po +++ b/src/calibre/translations/ro.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:30+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:31+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Romanian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "Nu face absolut nimic" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "Nu face absolut nimic" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -118,6 +118,14 @@ msgstr "Bază" msgid "File type" msgstr "Tip de fișier" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 +msgid "Metadata reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:209 +msgid "Metadata writer" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:12 msgid "" "Follow all local links in an HTML file and create a ZIP file containing all " @@ -128,10 +136,55 @@ msgstr "" "care conţine toate fişierele legate. Acest plugin este rulat ori de câte ori " "adăugaţi un fişier HTML în bibliotecă." +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:64 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:74 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:84 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:105 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:126 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:136 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167 +msgid "Read metadata from %s files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:177 +msgid "Extract cover from comic files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 +msgid "Read metadata from ebooks in ZIP archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 +msgid "Read metadata from ebooks in RAR archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +msgid "Set metadata in %s files" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 msgid "Installed plugins" msgstr "Plugin-uri instalate" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 +msgid "Mapping for filetype plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30 +msgid "Local plugin customization" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 msgid "Disabled plugins" msgstr "Plugin-uri dezactivate" @@ -140,11 +193,33 @@ msgstr "Plugin-uri dezactivate" msgid "No valid plugin found in " msgstr "Nu a fost găsit niciun plugin valid în " +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 +msgid "Initialization of plugin %s failed with traceback:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 +msgid "" +" %prog options\n" +"\n" +" Customize calibre by loading external plugins.\n" +" " +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" "Adaugă un plugin prin specificarea căii către fişierul zip ce îl conţine." +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:277 +msgid "Remove a custom plugin by name. Has no effect on builtin plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:279 +msgid "" +"Customize plugin. Specify name of plugin and customization string separated " +"by a comma." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 msgid "List all installed plugins" msgstr "Listează toate plugin-urile instalate" @@ -206,14 +281,54 @@ msgstr "" "este utilizat pentru restricţii specifice dispozitivului pe EPUB. Variantele " "disponibile sunt: " +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:113 +msgid "" +"Either the path to a CSS stylesheet or raw CSS. This CSS will override any " +"existing CSS declarations in the source files." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:117 msgid "Control auto-detection of document structure." msgstr "Controlează auto-detecţia structurii documentului" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:122 +msgid "" +"An XPath expression to detect chapter titles. The default is to consider " +"

or\n" +"

tags that contain the words \"chapter\",\"book\",\"section\" or " +"\"part\" as chapter titles as \n" +"well as any tags that have class=\"chapter\". \n" +"The expression used must evaluate to a list of elements. To disable chapter " +"detection,\n" +"use the expression \"/\". See the XPath Tutorial in the calibre User Manual " +"for further\n" +"help on using this feature.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:132 +msgid "" +"Specify how to mark detected chapters. A value of \"pagebreak\" will insert " +"page breaks before chapters. A value of \"rule\" will insert a line before " +"chapters. A value of \"none\" will disable chapter marking and a value of " +"\"both\" will use both page breaks and lines to mark chapters." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:139 msgid "Path to the cover to be used for this book" msgstr "Calea către coperta care să fie utilizată pentru această carte" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:142 +msgid "" +"Use the cover detected from the source file in preference to the specified " +"cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 +msgid "" +"Remove the first image from the input ebook. Useful if the first image in " +"the source file is a cover and you are specifying an external cover." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:149 msgid "" "Turn off splitting at page breaks. Normally, input files are automatically " @@ -230,6 +345,19 @@ msgstr "" "marcatori de sfârşit de pagină, ar trebui să dezactivaţi împărţirea după " "aceşti marcatori." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 +msgid "" +"XPath expression to detect page boundaries for building a custom pagination " +"map, as used by AdobeDE. Default is not to build an explicit pagination map." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 +msgid "" +"XPath expression to find the name of each page in the pagination map " +"relative to its boundary element. Default is to number all pages staring " +"with 1." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:165 msgid "" "Control the automatic generation of a Table of Contents. If an OPF file is " @@ -286,6 +414,13 @@ msgstr "" "cuprins la nivelul doi. Fiecare intrare este adăugată sub intrarea " "precedentă de nivel unu." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level three. Each entry is added under the previous level two " +"entry." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:192 msgid "" "Path to a .ncx file that contains the table of contents to use for this " @@ -298,6 +433,13 @@ msgstr "" "directorul în care este plasat. Vezi http://www.niso.org/workrooms/daisy/Z39-" "86-2005.html#NCX pentru o privire de ansamblu asupra formatului NCX." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:198 +msgid "" +"Normally, if the source file already has a Table of Contents, it is used in " +"preference to the auto-generated one. With this option, the auto-generated " +"one is always used." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 msgid "Control page layout" msgstr "Controlează aşezarea în pagină" @@ -318,6 +460,37 @@ msgstr "Setează marginea stângă în pts. Implicit este %default" msgid "Set the right margin in pts. Default is %default" msgstr "Setează marginea dreaptă în pts. Implicit este %default" +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:212 +msgid "" +"The base font size in pts. Default is %defaultpt. Set to 0 to disable " +"rescaling of fonts." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 +msgid "" +"Remove spacing between paragraphs. Also sets a indent on paragraphs of " +"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" +"css. Spacing removal will not work if the source file forces inter-paragraph " +"spacing." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 +msgid "Do not force text to be justified in output." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 +msgid "" +"Remove table markup, converting it into paragraphs. This is useful if your " +"source file uses a table to manage layout." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:226 +msgid "" +"Preserve the HTML tag structure while splitting large HTML files. This is " +"only neccessary if the HTML files contain CSS that uses sibling selectors. " +"Enabling this greatly slows down processing of large HTML files." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:232 msgid "Print generated OPF file to stdout" msgstr "Tipăreşte fişierul OPF generat la ieşirea standard" @@ -352,179 +525,6 @@ msgstr "" msgid "Could not find an ebook inside the archive" msgstr "Nu a fost găsită o e-carte în arhivă" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 -msgid "Metadata reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:209 -msgid "Metadata writer" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:64 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:74 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:84 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:105 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:126 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:136 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167 -msgid "Read metadata from %s files" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:177 -msgid "Extract cover from comic files" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 -msgid "Read metadata from ebooks in ZIP archives" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 -msgid "Read metadata from ebooks in RAR archives" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 -msgid "Set metadata in %s files" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 -msgid "Mapping for filetype plugins" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30 -msgid "Local plugin customization" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 -msgid "Initialization of plugin %s failed with traceback:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 -msgid "" -" %prog options\n" -"\n" -" Customize calibre by loading external plugins.\n" -" " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:277 -msgid "Remove a custom plugin by name. Has no effect on builtin plugins" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:279 -msgid "" -"Customize plugin. Specify name of plugin and customization string separated " -"by a comma." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:113 -msgid "" -"Either the path to a CSS stylesheet or raw CSS. This CSS will override any " -"existing CSS declarations in the source files." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:122 -msgid "" -"An XPath expression to detect chapter titles. The default is to consider " -"

or\n" -"

tags that contain the words \"chapter\",\"book\",\"section\" or " -"\"part\" as chapter titles as \n" -"well as any tags that have class=\"chapter\". \n" -"The expression used must evaluate to a list of elements. To disable chapter " -"detection,\n" -"use the expression \"/\". See the XPath Tutorial in the calibre User Manual " -"for further\n" -"help on using this feature.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:132 -msgid "" -"Specify how to mark detected chapters. A value of \"pagebreak\" will insert " -"page breaks before chapters. A value of \"rule\" will insert a line before " -"chapters. A value of \"none\" will disable chapter marking and a value of " -"\"both\" will use both page breaks and lines to mark chapters." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:142 -msgid "" -"Use the cover detected from the source file in preference to the specified " -"cover." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 -msgid "" -"Remove the first image from the input ebook. Useful if the first image in " -"the source file is a cover and you are specifying an external cover." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 -msgid "" -"XPath expression to detect page boundaries for building a custom pagination " -"map, as used by AdobeDE. Default is not to build an explicit pagination map." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 -msgid "" -"XPath expression to find the name of each page in the pagination map " -"relative to its boundary element. Default is to number all pages staring " -"with 1." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 -msgid "" -"XPath expression that specifies all tags that should be added to the Table " -"of Contents at level three. Each entry is added under the previous level two " -"entry." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:198 -msgid "" -"Normally, if the source file already has a Table of Contents, it is used in " -"preference to the auto-generated one. With this option, the auto-generated " -"one is always used." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:212 -msgid "" -"The base font size in pts. Default is %defaultpt. Set to 0 to disable " -"rescaling of fonts." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 -msgid "" -"Remove spacing between paragraphs. Also sets a indent on paragraphs of " -"1.5em. You can override this by adding p {text-indent: 0cm} to --override-" -"css. Spacing removal will not work if the source file forces inter-paragraph " -"spacing." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 -msgid "Do not force text to be justified in output." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 -msgid "" -"Remove table markup, converting it into paragraphs. This is useful if your " -"source file uses a table to manage layout." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:226 -msgid "" -"Preserve the HTML tag structure while splitting large HTML files. This is " -"only neccessary if the HTML files contain CSS that uses sibling selectors. " -"Enabling this greatly slows down processing of large HTML files." -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 msgid "" "%prog [options] file.html|opf\n" @@ -664,7 +664,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -679,7 +679,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1635,11 +1635,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3799,9 +3799,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5626,20 +5626,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6080,6 +6080,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6096,7 +6097,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6180,15 +6181,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/ru.po b/src/calibre/translations/ru.po index 4e6354bd5e..50e9f0f9fd 100644 --- a/src/calibre/translations/ru.po +++ b/src/calibre/translations/ru.po @@ -6,14 +6,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.55\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 07:27+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:31+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: American English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Country: RUSSIAN FEDERATION\n" "X-Poedit-Language: Russian\n" @@ -67,7 +67,7 @@ msgstr "Абсолютно ничего не делать" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -98,15 +98,15 @@ msgstr "Абсолютно ничего не делать" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -710,7 +710,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Выходная директория. По умолчанию текущая директория." @@ -727,7 +727,7 @@ msgid "Useful for debugging." msgstr "Использовать для отладки." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB книга создана в" @@ -1861,11 +1861,11 @@ msgstr "Загрузка: rb-meta file.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Создание Mobipocket файла из EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] myebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Сырой MOBI HTML сохранен в" @@ -4120,9 +4120,9 @@ msgstr "Добавить нужный источник новостей" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Новости" @@ -6132,20 +6132,20 @@ msgstr "" "\n" "Для справки: %%prog команда --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Копирование книг в %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Копирование %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Миграция старой базы данных в %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Сжатие базы данных" @@ -6635,6 +6635,7 @@ msgstr "Сербский" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6651,7 +6652,7 @@ msgstr "Сербский" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6735,15 +6736,18 @@ msgstr "Боснийский" msgid "Portugese" msgstr "Португальский" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Ковид Гоял" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Ковид Гоял" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "Пропуск статей-дублей: %s" diff --git a/src/calibre/translations/sk.po b/src/calibre/translations/sk.po index b9dc1683c3..d911d13a78 100644 --- a/src/calibre/translations/sk.po +++ b/src/calibre/translations/sk.po @@ -7,270 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:35+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:32+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 -msgid "" -"XPath expression to detect page boundaries for building a custom pagination " -"map, as used by AdobeDE. Default is not to build an explicit pagination map." -msgstr "" -"Výraz XPath pre rozoznanie hranice strany pre vytvorenie mapy strán, tak ako " -"je použitý v AdobeDE. Prednastavená hodnota je nevytvárať explicitnú mapu " -"strán." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 -msgid "" -"XPath expression to find the name of each page in the pagination map " -"relative to its boundary element. Default is to number all pages staring " -"with 1." -msgstr "" -"Výraz XPath pre zistenie mena každej strany v mape strán vo vzťahu k jej " -"hraničnému prvku. Prednastavená hodnota je číslovať všetky strany od 1." - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 -msgid "" -"XPath expression that specifies all tags that should be added to the Table " -"of Contents at level three. Each entry is added under the previous level two " -"entry." -msgstr "" -"Výraz XPath ktorý špecifikuje všetky návestia (tagy) ktoré majú byť pridané " -"do Obsahu na úrovni tri. Každá hodnota je zadaná pod existujúcou hodnotou " -"úrovne tri." - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 -msgid "Choose format to send to device" -msgstr "Vyberte formát na poslanie do zariadenia" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:515 -msgid "" -"

You can control how calibre detects page boundaries using a XPath " -"expression. To learn how to use XPath expressions see the XPath " -"tutorial. The page boundaries are useful only if you want a mapping from " -"pages in a paper book, to locations in the e-book. This controls where Adobe " -"Digital Editions displays the page numbers in the right margin.

" -msgstr "" -"

Pomocou XPath výrazu môžte ovplyvniť ako Calibre určuje hranice strán. " -"Aby ste sa dozvedeli o použití XPath výrazov, navštívte XPath " -"tutorial. Hranice strán sú užitočné iba keď chcete namapovať strany z " -"papierovej knihy na presné umiestnenie v e-knihe. Toto určí kde Adobe " -"Digital Editions zobrazí čísla strán na pravom okraji strany.

" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:516 -msgid "&Boundary XPath:" -msgstr "&Hraničná XPath:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:517 -msgid "&Name XPath:" -msgstr "&Názov XPath:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:519 -msgid "" -"

You can control how calibre detects chapters using a XPath expression. To " -"learn how to use XPath expressions see the XPath " -"tutorial

" -msgstr "" -"

Pomocou XPath výrazu môžte ovplyvniť ako Calibre určuje hranice strán. " -"Aby ste sa dozvedeli o použití XPath výrazov, navštívte XPath " -"tutorial.

" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:341 -msgid "No preprocessing" -msgstr "Žiaden pre-processing." - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:173 -msgid "at" -msgstr "na" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96 -msgid "Form" -msgstr "Z" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97 -msgid "" -"\n" -"\n" -"

Set a regular expression " -"pattern to use when trying to guess ebook metadata from filenames.

\n" -"

A reference on the syntax " -"of regular expressions is available.

\n" -"

Use the Test functionality below to test your regular " -"expression on a few sample filenames. The group names for the various " -"metadata entries are documented in tooltips.

" -msgstr "" -"\n" -"\n" -"

Zadajte Regulárny výraz " -"ktorý sa použije na odhadnutie metadát z e-knihy z názvu súboru.

\n" -"

K dispozícii je Referencia na syntax " -"Regulárnych výrazov.

\n" -"

Použite Test test funkcionalitu tu dole aby ste otestovali " -"váš relulárny výraz na vzorke niekoľkých názvov súborov. Skupinové mená pre " -"jednotlivé metadáta sú dokumentované v bublinovej nápovede

" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:207 -msgid "/Unknown" -msgstr "/Neznámy" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:153 -msgid "toolBar" -msgstr "Panel nástrojov" - -#: /home/kovid/work/calibre/src/calibre/library/cli.py:496 -msgid "" -"%prog export [options] ids\n" -"\n" -"Export the books specified by ids (a comma separated list) to the " -"filesystem.\n" -"The export operation saves all formats of the book, its cover and metadata " -"(in\n" -"an opf file). You can get id numbers from the list command.\n" -msgstr "" -"%prog export [options] ids\n" -"\n" -"Exportujte knihy špecifikované pomocou ids (zoznam oddelený čiarkami) na " -"súborový systém.\n" -"Operácia exportu uloží všetky formáty knihy, obrázok obalu knihy a metadáta " -"\n" -"(v súbore opf). ID čísla môžte distiť pomocou príkazu list.\n" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:33 -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:90 -msgid "" -"Specify a list of feeds to download. For example: \n" -"\"['http://feeds.newsweek.com/newsweek/TopNews', " -"'http://feeds.newsweek.com/headlines/politics']\"\n" -"If you specify this option, any argument to %prog is ignored and a default " -"recipe is used to download the feeds." -msgstr "" -"Zadajte zoznam \"feedov\" na stiahnutie. Napríklad:\n" -"\"['http://feeds.newsweek.com/newsweek/TopNews', " -"'http://feeds.newsweek.com/headlines/politics']\"\n" -"Ak využijetre túto voľbu, akýkoľvek argument pre %prog je ignorovaný a " -"prednastavený recept je určený aby stiahol \"feed-y\"" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:37 -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:94 -msgid "Be more verbose while processing." -msgstr "Použi viac hlášok pri spracovaní" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:51 -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:101 -msgid "" -"Number of levels of links to follow on webpages that are linked to from " -"feeds. Defaul %default" -msgstr "" -"Počet úrovní odkazov ktoré sa budú nasledovať na stránkach, ktoré sú " -"prilinkované vo feedoch. Prednastavená hodnota %default" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:53 -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:103 -msgid "" -"The directory in which to store the downloaded feeds. Defaults to the " -"current directory." -msgstr "" -"Adresár kam sa ukladajú stiahnuté feedy. Prednastavená hodnota je aktuálny " -"adresár." - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:59 -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:109 -msgid "" -"Useful for recipe development. Forces max_articles_per_feed to 2 and " -"downloads at most 2 feeds." -msgstr "" -"Užitečné na vývoj (testovanie pri vývoji) receptov. Natvrdo nastaví hodnotu " -"max_articles_per_feed (max. článkov pre feed) na 2 a stiahne najviac 2 feedy." - -#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:63 -msgid "" -"%%prog [options] ARG\n" -"\n" -"%%prog parses an online source of articles, like an RSS or ATOM feed and \n" -"fetches the article contents organized in a nice hierarchy.\n" -"\n" -"ARG can be one of:\n" -"\n" -"file name - %%prog will try to load a recipe from the file\n" -"\n" -"builtin recipe title - %%prog will load the builtin recipe and use it to " -"fetch the feed. For e.g. Newsweek or \"The BBC\" or \"The New York Times\"\n" -"\n" -"recipe as a string - %%prog will load the recipe directly from the string " -"arg.\n" -"\n" -"Available builtin recipes are:\n" -"%s\n" -msgstr "" -"%%prog [options] ARG\n" -"\n" -"%%prog spracuje on-line zdroj článkov, ako napríklad RSS alebo ATOM feed a\n" -"stiahne obsah článku zorganizovaný v peknej hierarchii.\n" -"\n" -"ARG môže byť jeden z:\n" -"\n" -"názov súboru - %%prog sa pokúsi načítať recept zo súboru\n" -"\n" -"názov receptu zabudovaného v Calibre - %%prog načíta zabudovaný recept a " -"použije ho n astiahnutie feedu.. Pre napr. Newsweek alebo \"The BBC\" alebo " -"\"The New York Times\"\n" -"\n" -"recept ako reťazac - %%prog načíta recept priamo z reťazca.\n" -"\n" -"K dispozícii sú nasledujúce zabudované recepty:\n" -"%s\n" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 -msgid "Italian" -msgstr "Taliančina" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "Kovid Goyal" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 -msgid "Skipping duplicated article: %s" -msgstr "Preskakujem duplicitný článok: %s" - -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:88 -msgid "Skipping filtered article: %s" -msgstr "Preskakujem odfiltrovaný článok: %s" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 msgid "Does absolutely nothing" msgstr "Nerobí vôbec nič" @@ -317,7 +63,7 @@ msgstr "Nerobí vôbec nič" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -348,15 +94,15 @@ msgstr "Nerobí vôbec nič" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -613,6 +359,24 @@ msgstr "" "Rozdeľovanie samotné je však dosť náročné a ak vstupná kniha obsahuje veľmi " "veľké množstvo zalomení strán, mali by ste rozdeľovanie vypnúť." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 +msgid "" +"XPath expression to detect page boundaries for building a custom pagination " +"map, as used by AdobeDE. Default is not to build an explicit pagination map." +msgstr "" +"Výraz XPath pre rozoznanie hranice strany pre vytvorenie mapy strán, tak ako " +"je použitý v AdobeDE. Prednastavená hodnota je nevytvárať explicitnú mapu " +"strán." + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 +msgid "" +"XPath expression to find the name of each page in the pagination map " +"relative to its boundary element. Default is to number all pages staring " +"with 1." +msgstr "" +"Výraz XPath pre zistenie mena každej strany v mape strán vo vzťahu k jej " +"hraničnému prvku. Prednastavená hodnota je číslovať všetky strany od 1." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:165 msgid "" "Control the automatic generation of a Table of Contents. If an OPF file is " @@ -665,6 +429,16 @@ msgstr "" "Výraz XPath určujúci tagy, ktoré sa majú pridať do obsahu na druhej úrovni. " "Každý záznam bude vložený pod príslušný prvoúrovňový záznam." +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level three. Each entry is added under the previous level two " +"entry." +msgstr "" +"Výraz XPath ktorý špecifikuje všetky návestia (tagy) ktoré majú byť pridané " +"do Obsahu na úrovni tri. Každá hodnota je zadaná pod existujúcou hodnotou " +"úrovne tri." + #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:192 msgid "" "Path to a .ncx file that contains the table of contents to use for this " @@ -933,7 +707,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [možnosti] LITsúbor" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Výstupný adresár. Štandardne aktuálny pracovný adresár." @@ -949,7 +723,7 @@ msgid "Useful for debugging." msgstr "Užitočné pri hľadaní chýb v programe." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB elektronická kniha bude vytvorená v" @@ -2088,11 +1862,11 @@ msgstr "Použitie: rb-meta súbor.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "Vytváranie Mobipocket súboru z EPUB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [možnosti] kniha.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Neupravené MOBI HTML uložené do" @@ -2496,6 +2270,10 @@ msgstr "" msgid "selected to send" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 +msgid "Choose format to send to device" +msgstr "Vyberte formát na poslanie do zariadenia" + #: /home/kovid/work/calibre/src/calibre/gui2/device.py:428 msgid "No device" msgstr "" @@ -3658,10 +3436,46 @@ msgstr "Nerozdeľovať na &zalomeniach strán" msgid "&Page map" msgstr "&Mapa stránkovania" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:515 +msgid "" +"

You can control how calibre detects page boundaries using a XPath " +"expression. To learn how to use XPath expressions see the XPath " +"tutorial. The page boundaries are useful only if you want a mapping from " +"pages in a paper book, to locations in the e-book. This controls where Adobe " +"Digital Editions displays the page numbers in the right margin.

" +msgstr "" +"

Pomocou XPath výrazu môžte ovplyvniť ako Calibre určuje hranice strán. " +"Aby ste sa dozvedeli o použití XPath výrazov, navštívte XPath " +"tutorial. Hranice strán sú užitočné iba keď chcete namapovať strany z " +"papierovej knihy na presné umiestnenie v e-knihe. Toto určí kde Adobe " +"Digital Editions zobrazí čísla strán na pravom okraji strany.

" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:516 +msgid "&Boundary XPath:" +msgstr "&Hraničná XPath:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:517 +msgid "&Name XPath:" +msgstr "&Názov XPath:" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:518 msgid "Automatic &chapter detection" msgstr "Automatické rozoznávanie &kapitol" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:519 +msgid "" +"

You can control how calibre detects chapters using a XPath expression. To " +"learn how to use XPath expressions see the XPath " +"tutorial

" +msgstr "" +"

Pomocou XPath výrazu môžte ovplyvniť ako Calibre určuje hranice strán. " +"Aby ste sa dozvedeli o použití XPath výrazov, navštívte XPath " +"tutorial.

" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:520 msgid "&XPath:" msgstr "Výraz &XPath:" @@ -3807,6 +3621,11 @@ msgstr "Previesť %s do formátu LRF" msgid "Set conversion defaults" msgstr "Štandardné nastavenie prevodu" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:341 +msgid "No preprocessing" +msgstr "Žiaden pre-processing." + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:261 msgid "" "Preprocess the file before converting to LRF. This is useful if you know " @@ -4307,9 +4126,9 @@ msgstr "Pridať vlastný zdroj správ" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "Správy" @@ -4343,6 +4162,10 @@ msgstr "&Naplánovať preberanie:" msgid "Every " msgstr "Každých " +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:173 +msgid "at" +msgstr "na" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:175 msgid "" "Interval at which to download this recipe. A value of zero means that the " @@ -4381,6 +4204,11 @@ msgstr "" msgid "Delete downloaded news older than " msgstr "Mazať správy staršie ako " +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96 +msgid "Form" +msgstr "Z" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36 msgid "contains" msgstr "obsahuje" @@ -4689,6 +4517,50 @@ msgstr "" msgid "Recipe source code (python)" msgstr "Zdrojový kód receptu (python)" +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97 +msgid "" +"\n" +"\n" +"

Set a regular expression " +"pattern to use when trying to guess ebook metadata from filenames.

\n" +"

A reference on the syntax " +"of regular expressions is available.

\n" +"

Use the Test functionality below to test your regular " +"expression on a few sample filenames. The group names for the various " +"metadata entries are documented in tooltips.

" +msgstr "" +"\n" +"\n" +"

Zadajte Regulárny výraz " +"ktorý sa použije na odhadnutie metadát z e-knihy z názvu súboru.

\n" +"

K dispozícii je Referencia na syntax " +"Regulárnych výrazov.

\n" +"

Použite Test test funkcionalitu tu dole aby ste otestovali " +"váš relulárny výraz na vzorke niekoľkých názvov súborov. Skupinové mená pre " +"jednotlivé metadáta sú dokumentované v bublinovej nápovede

" + #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:104 msgid "Regular &expression" msgstr "Regulárny &výraz" @@ -5768,6 +5640,10 @@ msgstr "Prejsť na..." msgid "Position in book" msgstr "Pozícia v knihe" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:207 +msgid "/Unknown" +msgstr "/Neznámy" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:212 msgid "Go to a reference. To get reference numbers, use the reference mode." msgstr "Prejsť na referenciu. Čísla referencií získate v režime referencií." @@ -5845,6 +5721,10 @@ msgstr "" msgid "Ebook Viewer" msgstr "Prehliadač elektronických kníh" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:153 +msgid "toolBar" +msgstr "Panel nástrojov" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:156 msgid "Next page" msgstr "Nasledujúca strana" @@ -6208,6 +6088,24 @@ msgstr "" msgid "You must specify an id and a metadata file" msgstr "Musíte zadať identifikačný kód a súbor s metadátami" +#: /home/kovid/work/calibre/src/calibre/library/cli.py:496 +msgid "" +"%prog export [options] ids\n" +"\n" +"Export the books specified by ids (a comma separated list) to the " +"filesystem.\n" +"The export operation saves all formats of the book, its cover and metadata " +"(in\n" +"an opf file). You can get id numbers from the list command.\n" +msgstr "" +"%prog export [options] ids\n" +"\n" +"Exportujte knihy špecifikované pomocou ids (zoznam oddelený čiarkami) na " +"súborový systém.\n" +"Operácia exportu uloží všetky formáty knihy, obrázok obalu knihy a metadáta " +"\n" +"(v súbore opf). ID čísla môžte distiť pomocou príkazu list.\n" + #: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Export all books in database, ignoring the list of ids." msgstr "" @@ -6252,21 +6150,21 @@ msgstr "" "\n" "Informácie o jednotlivých príkazoch: %%prog príkaz --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "

Kopírujem knihy do %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopírujem %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" "

Migrujem starú databázu do knižnice elektronických kníh v %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Zmenšujem databázu" @@ -6433,6 +6331,26 @@ msgstr "" msgid "Do not download CSS stylesheets." msgstr "Nepreberať kaskádové štýly." +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:90 +msgid "" +"Specify a list of feeds to download. For example: \n" +"\"['http://feeds.newsweek.com/newsweek/TopNews', " +"'http://feeds.newsweek.com/headlines/politics']\"\n" +"If you specify this option, any argument to %prog is ignored and a default " +"recipe is used to download the feeds." +msgstr "" +"Zadajte zoznam \"feedov\" na stiahnutie. Napríklad:\n" +"\"['http://feeds.newsweek.com/newsweek/TopNews', " +"'http://feeds.newsweek.com/headlines/politics']\"\n" +"Ak využijetre túto voľbu, akýkoľvek argument pre %prog je ignorovaný a " +"prednastavený recept je určený aby stiahol \"feed-y\"" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:37 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:94 +msgid "Be more verbose while processing." +msgstr "Použi viac hlášok pri spracovaní" + #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:39 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:96 msgid "" @@ -6451,6 +6369,24 @@ msgstr "Prihlasovacie meno pre zdroje vyžadujúce prihlásenie." msgid "Password for sites that require a login to access content." msgstr "Prihlasovacie heslo pre zdroje vyžadujúce prihlásenie." +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:51 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:101 +msgid "" +"Number of levels of links to follow on webpages that are linked to from " +"feeds. Defaul %default" +msgstr "" +"Počet úrovní odkazov ktoré sa budú nasledovať na stránkach, ktoré sú " +"prilinkované vo feedoch. Prednastavená hodnota %default" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:53 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:103 +msgid "" +"The directory in which to store the downloaded feeds. Defaults to the " +"current directory." +msgstr "" +"Adresár kam sa ukladajú stiahnuté feedy. Prednastavená hodnota je aktuálny " +"adresár." + #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:55 msgid "Don't show the progress bar" msgstr "Nezobrazovať indikátor postupu" @@ -6460,6 +6396,53 @@ msgstr "Nezobrazovať indikátor postupu" msgid "Very verbose output, useful for debugging." msgstr "Veľmi podrobný výstup, užitočný pri hľadaní chýb v programe" +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:59 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:109 +msgid "" +"Useful for recipe development. Forces max_articles_per_feed to 2 and " +"downloads at most 2 feeds." +msgstr "" +"Užitečné na vývoj (testovanie pri vývoji) receptov. Natvrdo nastaví hodnotu " +"max_articles_per_feed (max. článkov pre feed) na 2 a stiahne najviac 2 feedy." + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:63 +msgid "" +"%%prog [options] ARG\n" +"\n" +"%%prog parses an online source of articles, like an RSS or ATOM feed and \n" +"fetches the article contents organized in a nice hierarchy.\n" +"\n" +"ARG can be one of:\n" +"\n" +"file name - %%prog will try to load a recipe from the file\n" +"\n" +"builtin recipe title - %%prog will load the builtin recipe and use it to " +"fetch the feed. For e.g. Newsweek or \"The BBC\" or \"The New York Times\"\n" +"\n" +"recipe as a string - %%prog will load the recipe directly from the string " +"arg.\n" +"\n" +"Available builtin recipes are:\n" +"%s\n" +msgstr "" +"%%prog [options] ARG\n" +"\n" +"%%prog spracuje on-line zdroj článkov, ako napríklad RSS alebo ATOM feed a\n" +"stiahne obsah článku zorganizovaný v peknej hierarchii.\n" +"\n" +"ARG môže byť jeden z:\n" +"\n" +"názov súboru - %%prog sa pokúsi načítať recept zo súboru\n" +"\n" +"názov receptu zabudovaného v Calibre - %%prog načíta zabudovaný recept a " +"použije ho n astiahnutie feedu.. Pre napr. Newsweek alebo \"The BBC\" alebo " +"\"The New York Times\"\n" +"\n" +"recept ako reťazac - %%prog načíta recept priamo z reťazca.\n" +"\n" +"K dispozícii sú nasledujúce zabudované recepty:\n" +"%s\n" + #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:87 msgid "" "Options to control web2disk (used to fetch websites linked from feeds)" @@ -6672,6 +6655,7 @@ msgstr "Srbština" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6688,7 +6672,7 @@ msgstr "Srbština" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6729,6 +6713,11 @@ msgstr "Angličtina" msgid "Spanish" msgstr "Španielčina" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 +msgid "Italian" +msgstr "Taliančina" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_courrierinternational.py:18 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cyberpresse.py:9 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:19 @@ -6767,11 +6756,26 @@ msgstr "" msgid "Portugese" msgstr "Portugalčina" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "Kovid Goyal" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 +msgid "Skipping duplicated article: %s" +msgstr "Preskakujem duplicitný článok: %s" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:88 +msgid "Skipping filtered article: %s" +msgstr "Preskakujem odfiltrovaný článok: %s" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19 msgid "Chinese" msgstr "" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index 8ad49c54f9..b6f00a7b16 100644 --- a/src/calibre/translations/sl.po +++ b/src/calibre/translations/sl.po @@ -6,14 +6,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.17\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" "PO-Revision-Date: 2009-05-16 09:32+0000\n" "Last-Translator: Ketrin \n" "Language-Team: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -120,7 +120,7 @@ msgstr "Izpiši ustvarjeno NCX datoteko na standardni izhod" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -151,15 +151,15 @@ msgstr "Izpiši ustvarjeno NCX datoteko na standardni izhod" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -632,7 +632,7 @@ msgid "%prog [options] LITFILE" msgstr "%prog [options] LITFILE" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "Izhodni direktorij. Privzet je trenutni direktorij." @@ -647,7 +647,7 @@ msgid "Useful for debugging." msgstr "Koristno za razhroščevanje." #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "OEB eknjiga ustvarjena v" @@ -1741,11 +1741,11 @@ msgstr "Uporaba: rb-meta datoteka.rb" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] mojaeknjiga.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "Neobdelan MOBI HTML shranjen v" @@ -3924,9 +3924,9 @@ msgstr "Dodaj vir novic po meri" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5859,20 +5859,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "Kopiram %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "

Selitev stare podatkovne baze v knjižnico eknjig v %s

" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "Krčim bazo" @@ -6338,6 +6338,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6354,7 +6355,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6438,15 +6439,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/sv.po b/src/calibre/translations/sv.po index a04585ca86..1061b07bbc 100644 --- a/src/calibre/translations/sv.po +++ b/src/calibre/translations/sv.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 08:05+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:34+0000\n" "Last-Translator: nicke \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "Gör ingenting" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "Gör ingenting" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -621,7 +621,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -636,7 +636,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1592,11 +1592,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3756,9 +3756,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5583,20 +5583,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6037,6 +6037,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6053,7 +6054,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6137,15 +6138,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/te.po b/src/calibre/translations/te.po index 18684c24f9..620f5b6e60 100644 --- a/src/calibre/translations/te.po +++ b/src/calibre/translations/te.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:22+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:34+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:40+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 @@ -63,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -94,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -621,7 +621,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -636,7 +636,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1592,11 +1592,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3756,9 +3756,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5583,20 +5583,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6037,6 +6037,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6053,7 +6054,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6137,15 +6138,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" diff --git a/src/calibre/translations/uk.po b/src/calibre/translations/uk.po index 81d1e14e11..f46f9d860b 100644 --- a/src/calibre/translations/uk.po +++ b/src/calibre/translations/uk.po @@ -7,16 +7,20 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2009-05-16 06:38+0000\n" -"PO-Revision-Date: 2009-05-16 09:23+0000\n" +"POT-Creation-Date: 2009-05-21 15:37+0000\n" +"PO-Revision-Date: 2009-05-21 15:36+0000\n" "Last-Translator: svv \n" "Language-Team: Ukrainian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-05-21 14:41+0000\n" +"X-Launchpad-Export-Date: 2009-05-29 16:29+0000\n" "X-Generator: Launchpad (build Unknown)\n" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 +msgid "Does absolutely nothing" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:98 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:50 @@ -59,7 +63,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:661 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 @@ -90,15 +94,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:498 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:510 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:930 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1419 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1442 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1493 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 #: /home/kovid/work/calibre/src/calibre/library/server.py:340 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 @@ -106,22 +110,14 @@ msgstr "" msgid "Unknown" msgstr "Невідомо" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 -msgid "File type" -msgstr "Тип файла" - -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 -msgid "Installed plugins" -msgstr "Встановлені додатки" - -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 -msgid "Does absolutely nothing" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:62 msgid "Base" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 +msgid "File type" +msgstr "Тип файла" + #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 msgid "Metadata reader" msgstr "" @@ -174,6 +170,10 @@ msgstr "" msgid "Set metadata in %s files" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 +msgid "Installed plugins" +msgstr "Встановлені додатки" + #: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 msgid "Mapping for filetype plugins" msgstr "" @@ -621,7 +621,7 @@ msgid "%prog [options] LITFILE" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:696 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 msgid "Output directory. Defaults to current directory." msgstr "" @@ -636,7 +636,7 @@ msgid "Useful for debugging." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:720 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 msgid "OEB ebook created in" msgstr "" @@ -1592,11 +1592,11 @@ msgstr "" msgid "Creating Mobipocket file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:694 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:718 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 msgid "Raw MOBI HTML saved in" msgstr "" @@ -3756,9 +3756,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:466 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:839 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:841 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:845 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1160 msgid "News" msgstr "" @@ -5583,20 +5583,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1264 msgid "

Copying books to %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1275 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1384 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1277 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1386 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1355 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1357 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1401 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1403 msgid "Compacting database" msgstr "" @@ -6037,6 +6037,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_slashdot.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_smh.py:19 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_soldiers.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegel_int.py:17 @@ -6053,7 +6054,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_themarketticker.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_theonion.py:20 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_time_magazine.py:19 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:19 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_times_online.py:25 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware.py:21 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_twitchfilms.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_upi.py:15 @@ -6137,15 +6138,18 @@ msgstr "" msgid "Portugese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 -msgid "Kovid Goyal" -msgstr "" - +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h2.py:15 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h3.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_index_hu.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pcworld_hu.py:17 msgid "Hungarian" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:83 msgid "Skipping duplicated article: %s" msgstr "" From 94e3c666d8cbcdcc783407626c741dccf11ada52 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 09:40:13 -0700 Subject: [PATCH 08/22] IGN:Tag release --- src/calibre/translations/calibre.pot | 58 +++++++++++++++------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 1d258db746..a9520203c7 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.5.13\n" -"POT-Creation-Date: 2009-05-21 07:58+PDT\n" -"PO-Revision-Date: 2009-05-21 07:58+PDT\n" +"Project-Id-Version: calibre 0.5.14\n" +"POT-Creation-Date: 2009-05-29 09:39+PDT\n" +"PO-Revision-Date: 2009-05-29 09:39+PDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -2159,8 +2159,9 @@ msgid "Compacting database. This may take a while." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:538 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347 -msgid "Configuration" +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:165 +msgid "Preferences" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:539 @@ -4514,6 +4515,10 @@ msgstr "" msgid "Reset Quick Search" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347 +msgid "Configuration" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349 msgid "Match any" msgstr "" @@ -4603,11 +4608,6 @@ msgstr "" msgid "Books with the same tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:374 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:165 -msgid "Preferences" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:375 msgid "Configure calibre" msgstr "" @@ -5569,6 +5569,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chicago_tribune.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_chr_mon.py:11 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cincinnati_enquirer.py:10 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_climate_progress.py:23 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_cnn.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_common_dreams.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_en.py:23 @@ -5617,6 +5618,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nytimes_sub.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_outlook_india.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_phd_comics.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_today.py:11 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_physics_world.py:8 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_politico.py:23 @@ -5626,7 +5628,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_aas.py:13 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_science_news.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sciencedaily.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_scientific_american.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_seattle_times.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_security_watch.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_shacknews.py:10 @@ -5660,7 +5662,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wired.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_wsj.py:16 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_xkcd.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zdnet.py:16 msgid "English" msgstr "" @@ -5688,6 +5690,23 @@ msgstr "" msgid "Spanish" msgstr "" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_carta.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_elektrolese.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_woz_die.py:7 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 +msgid "German" +msgstr "" + #: #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_corriere_della_sera_it.py:22 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_la_republica.py:6 @@ -5710,21 +5729,6 @@ msgstr "" msgid "Dutch" msgstr "" -#: -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_der_standard.py:22 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_diepresse.py:23 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_faznet.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_ftd.py:18 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_heise.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hna.py:17 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_nzz_ger.py:24 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_spiegelde.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_sueddeutsche.py:16 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_tomshardware_de.py:20 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zeitde.py:15 -msgid "German" -msgstr "" - #: #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_dnevni_avaz.py:27 msgid "Bosnian" From f2fae35eb2c35c811eec9d45a3f4bff6fda0a1ff Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 11:06:48 -0700 Subject: [PATCH 09/22] Fix bug preventing the re-enabling of disabled plugins --- src/calibre/gui2/dialogs/config.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/dialogs/config.py b/src/calibre/gui2/dialogs/config.py index 831d44251e..225a3b3ed7 100644 --- a/src/calibre/gui2/dialogs/config.py +++ b/src/calibre/gui2/dialogs/config.py @@ -6,7 +6,7 @@ from binascii import hexlify, unhexlify from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \ QDesktopServices, QVBoxLayout, QLabel, QPlainTextEdit, \ QStringListModel, QAbstractItemModel, QFont, \ - SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \ + SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, QBrush, \ QModelIndex, QInputDialog, QAbstractTableModel from calibre.constants import islinux, iswindows @@ -30,6 +30,9 @@ class PluginModel(QAbstractItemModel): def __init__(self, *args): QAbstractItemModel.__init__(self, *args) self.icon = QVariant(QIcon(':/images/plugins.svg')) + p = QIcon(self.icon).pixmap(32, 32, QIcon.Disabled, QIcon.On) + self.disabled_icon = QVariant(QIcon(p)) + self._p = p self.populate() def populate(self): @@ -89,9 +92,7 @@ class PluginModel(QAbstractItemModel): return 0 if index.internalId() == -1: return Qt.ItemIsEnabled - flags = Qt.ItemIsSelectable - if not is_disabled(self.data(index, Qt.UserRole)): - flags |= Qt.ItemIsEnabled + flags = Qt.ItemIsSelectable | Qt.ItemIsEnabled return flags def data(self, index, role): @@ -112,7 +113,9 @@ class PluginModel(QAbstractItemModel): ans += '\nCustomization: '+c return QVariant(ans) if role == Qt.DecorationRole: - return self.icon + return self.disabled_icon if is_disabled(plugin) else self.icon + if role == Qt.ForegroundRole and is_disabled(plugin): + return QVariant(QBrush(Qt.gray)) if role == Qt.UserRole: return plugin return NONE From 01b75a68a4c082b9d26424964cb1b654126bf3e5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 29 May 2009 12:32:08 -0700 Subject: [PATCH 10/22] Improve documentation for creation of MOBI header --- src/calibre/ebooks/mobi/writer.py | 117 ++++++++++++++++++++++++++---- 1 file changed, 103 insertions(+), 14 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index 99f50b4439..e93eb1ae27 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -29,8 +29,6 @@ from calibre.ebooks.oeb.base import urlnormalize from calibre.ebooks.compression.palmdoc import compress_doc # TODO: -# - Allow override CSS (?) -# - Generate index records # - Optionally rasterize tables EXTH_CODES = { @@ -427,30 +425,121 @@ class MobiWriter(object): metadata = self._oeb.metadata exth = self._build_exth() record0 = StringIO() + # The PalmDOC Header record0.write(pack('>HHIHHHH', self._compression, 0, - self._text_length, self._text_nrecords, RECORD_SIZE, 0, 0)) + self._text_length, + self._text_nrecords, RECORD_SIZE, 0, 0)) # 0 - 15 (0x0 - 0xf) uid = random.randint(0, 0xffffffff) title = str(metadata.title[0]) + # The MOBI Header + + # 0x0 - 0x3 record0.write('MOBI') - record0.write(pack('>IIIII', 0xe8, 2, 65001, uid, 6)) - record0.write('\xff' * 40) - record0.write(pack('>I', self._text_nrecords + 1)) - record0.write(pack('>II', 0xe8 + 16 + len(exth), len(title))) - record0.write(iana2mobi(str(metadata.language[0]))) + + # 0x4 - 0x7 : Length of header + # 0x8 - 0x11 : MOBI type + # type meaning + # 0x002 MOBI book (chapter - chapter navigation) + # 0x101 News - Hierarchical navigation with sections and articles + # 0x102 News feed - Flat navigation + # 0x103 News magazine - same as 1x101 + # 0xC - 0xF : Text encoding (65001 is utf-8) + # 0x10 - 0x13 : UID + # 0x14 - 0x17 : Generator version + record0.write(pack('>IIIII', + 0xe8, 2, 65001, uid, 6)) + + # 0x18 - 0x1f : Unknown + record0.write('\xff' * 8) + + # 0x20 - 0x23 : Secondary index record + # TODO: implement + record0.write('\xff' * 4) + + # 0x24 - 0x3f : Unknown + record0.write('\xff' * 28) + + # 0x40 - 0x43 : Offset of first non-text record + record0.write(pack('>I', + self._text_nrecords + 1)) + + # 0x44 - 0x4b : title offset, title length + record0.write(pack('>II', + 0xe8 + 16 + len(exth), len(title))) + + # 0x4c - 0x4f : Language specifier + record0.write(iana2mobi( + str(metadata.language[0]))) + + # 0x50 - 0x57 : Unknown record0.write('\0' * 8) - record0.write(pack('>II', 6, self._text_nrecords + 1)) + + # 0x58 - 0x5b : Format version + # 0x5c - 0x5f : First image record number + record0.write(pack('>II', + 6, self._text_nrecords + 1)) + + # 0x60 - 0x63 : First HUFF/CDIC record number + # 0x64 - 0x67 : Number of HUFF/CDIC records + # 0x68 - 0x6b : First DATP record number + # 0x6c - 0x6f : Number of DATP records record0.write('\0' * 16) + + # 0x70 - 0x73 : EXTH flags record0.write(pack('>I', 0x50)) + + # 0x74 - 0x93 : Unknown record0.write('\0' * 32) - record0.write(pack('>IIII', 0xffffffff, 0xffffffff, 0, 0)) + + # 0x94 - 0x97 : DRM offset + # 0x98 - 0x9b : DRM count + # 0x9c - 0x9f : DRM size + # 0xa0 - 0xa3 : DRM flags + record0.write(pack('>IIII', + 0xffffffff, 0xffffffff, 0, 0)) + + + # 0xa4 - 0xaf : Unknown + record0.write('\0'*12) + + # 0xb0 - 0xb1 : First content record number + # 0xb2 - 0xb3 : last content record number + # (Includes Image, DATP, HUFF, DRM) + # TODO: implement + record0.write(pack('>I', 0xffffffff)) + + # 0xb4 - 0xb7 : Unknown + record0.write('\0'*4) + + # 0xb8 - 0xbb : FCIS record number + record0.write(pack('>I', 0xffffffff)) + + # 0xbc - 0xbf : Unknown (FCIS record count?) + record0.write(pack('>I', 0)) + + # 0xc0 - 0xc3 : FLIS record number + record0.write(pack('>I', 0xffffffff)) + + # 0xc4 - 0xc7 : Unknown (FLIS record count?) + record0.write(pack('>I', 0)) + + # 0xc8 - 0xcf : Unknown + record0.write('\0'*8) + + # 0xd0 - 0xdf : Unknown + record0.write(pack('>IIII', 0xffffffff, 0, 0xffffffff, 0xffffffff)) + + # 0xe0 - 0xe3 : Extra record data # The '5' is a bitmask of extra record data at the end: # - 0x1: (?) # - 0x4: # Of course, the formats aren't quite the same. - # TODO: What the hell are the rest of these fields? - record0.write(pack('>IIIIIIIIIIIIIIIII', - 0, 0, 0, 0xffffffff, 0, 0xffffffff, 0, 0xffffffff, 0, 0xffffffff, - 0, 0xffffffff, 0, 0xffffffff, 0xffffffff, 5, 0xffffffff)) + record0.write(pack('>I', 5)) + + # 0xe4 - 0xe7 : Primary index record + # TODO: Implement + record0.write(pack('>I', 0xffffffff)) + record0.write(exth) record0.write(title) record0 = record0.getvalue() From 34f3d47d52b4fd264cca6f05f5e7ea850150385b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 May 2009 12:51:05 -0700 Subject: [PATCH 11/22] Initial (not-working) implementation of MOBI Indexing --- setup.py | 3 + src/calibre/ebooks/mobi/output.py | 11 +- src/calibre/ebooks/mobi/writer.py | 238 +++++++++++++++++- src/calibre/ebooks/oeb/transforms/htmltoc.py | 8 +- src/calibre/linux.py | 1 - src/calibre/utils/complete.py | 2 +- src/calibre/web/feeds/main.py | 161 ------------ .../web/feeds/recipes/recipe_newsweek.py | 2 +- 8 files changed, 249 insertions(+), 177 deletions(-) delete mode 100644 src/calibre/web/feeds/main.py diff --git a/setup.py b/setup.py index 407b852a57..ee2d54cc5a 100644 --- a/setup.py +++ b/setup.py @@ -72,6 +72,9 @@ if __name__ == '__main__': library_dirs=[os.environ.get('PODOFO_LIB_DIR', podofo_lib)], include_dirs=\ [os.environ.get('PODOFO_INC_DIR', podofo_inc)])) + else: + print 'WARNING: PoDoFo not found on your system. Various PDF related', + print 'functionality will not work.' ext_modules = optional + [ diff --git a/src/calibre/ebooks/mobi/output.py b/src/calibre/ebooks/mobi/output.py index 026dbdc165..1c1e4795b6 100644 --- a/src/calibre/ebooks/mobi/output.py +++ b/src/calibre/ebooks/mobi/output.py @@ -27,6 +27,15 @@ class MOBIOutput(OutputFormatPlugin): OptionRecommendation(name='toc_title', recommended_value=None, help=_('Title for any generated in-line table of contents.') ), + OptionRecommendation(name='mobi_periodical', + recommended_value=False, level=OptionRecommendation.LOW, + help=_('When present, generate a periodical rather than a book.') + ), + OptionRecommendation(name='no_mobi_index', + recommended_value=False, level=OptionRecommendation.LOW, + help=_('Disable generation of MOBI index.') + ), + ]) recommendations = set([ @@ -49,7 +58,7 @@ class MOBIOutput(OutputFormatPlugin): rasterizer(oeb, opts) mobimlizer = MobiMLizer(ignore_tables=opts.linearize_tables) mobimlizer(oeb, opts) - writer = MobiWriter(imagemax=imagemax, + writer = MobiWriter(opts, imagemax=imagemax, prefer_author_sort=opts.prefer_author_sort) writer(oeb, output_path) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index e93eb1ae27..19e997f258 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -3,7 +3,8 @@ Write content to Mobipocket books. ''' __license__ = 'GPL v3' -__copyright__ = '2008, Marshall T. Vandegrift ' +__copyright__ = '2008, Marshall T. Vandegrift and \ + Kovid Goyal ' from collections import defaultdict from itertools import count @@ -57,6 +58,25 @@ OTHER_MAX_IMAGE_SIZE = 10 * 1024 * 1024 MAX_THUMB_SIZE = 16 * 1024 MAX_THUMB_DIMEN = (180, 240) + +TAGX = { + 'chapter' : + '\x00\x00\x00\x01\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x00\x00\x00\x01', + 'subchapter' : + '\x00\x00\x00\x01\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x10\x00\x16\x01\x20\x00\x17\x01\x40\x00\x00\x00\x00\x01', + 'periodical' : + '\x00\x00\x00\x02\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x20\x00\x16\x01\x40\x00\x17\x01\x80\x00\x00\x00\x00\x01\x45\x01\x01\x00\x46\x01\x02\x00\x47\x01\x04\x00\x00\x00\x00\x01' + } + +INDXT = { + 'chapter' : '\x0f', + 'subchapter' : '\x1f', + 'article' : '\x3f', + 'chapter with subchapters': '\x6f', + 'periodical' : '\xdf', + 'section' : '\xff', + } + def encode(data): return data.encode('utf-8') @@ -202,13 +222,11 @@ class Serializer(object): def serialize_item(self, item): buffer = self.buffer - #buffer.write('') if not item.linear: self.breaks.append(buffer.tell() - 1) self.id_offsets[item.href] = buffer.tell() for elem in item.data.find(XHTML('body')): self.serialize_elem(elem, item) - #buffer.write('') buffer.write('') def serialize_elem(self, elem, item, nsrmap=NSRMAP): @@ -288,11 +306,13 @@ class Serializer(object): class MobiWriter(object): COLLAPSE_RE = re.compile(r'[ \t\r\n\v]+') - def __init__(self, compression=PALMDOC, imagemax=None, + def __init__(self, opts, compression=PALMDOC, imagemax=None, prefer_author_sort=False): + self.opts = opts self._compression = compression or UNCOMPRESSED self._imagemax = imagemax or OTHER_MAX_IMAGE_SIZE self._prefer_author_sort = prefer_author_sort + self._primary_index_record = None @classmethod def generate(cls, opts): @@ -327,6 +347,8 @@ class MobiWriter(object): def _generate_content(self): self._map_image_names() self._generate_text() + if not self.opts.no_mobi_index: + self._generate_index() self._generate_images() def _map_image_names(self): @@ -372,6 +394,8 @@ class MobiWriter(object): serializer = Serializer(self._oeb, self._images) breaks = serializer.breaks text = serializer.text + self._id_offsets = serializer.id_offsets + self._content_length = len(text) self._text_length = len(text) text = StringIO(text) nrecords = 0 @@ -408,10 +432,205 @@ class MobiWriter(object): data, overlap = self._read_text_record(text) self._text_nrecords = nrecords + def _generate_indxt(self, ctoc): + if self.opts.mobi_periodical: + raise NotImplementedError('Indexing for periodicals not implemented') + toc = self._oeb.toc + indxt, indices, c = StringIO(), StringIO(), 0 + + indices.write('INDX') + c = 0 + last_index = last_name = None + + def add_node(node, offset, length, count): + t = node.title + if self.opts.verbose > 2: + self._oeb.log.debug('Adding TOC node:', node.title, 'href:', + node.href) + + pos = 0xc0 + indxt.tell() + indices.write(pack('>H', pos)) + indxt.write(chr(len(str(count)))+str(count)) + indxt.write(INDXT['chapter']) + indxt.write(decint(offset, DECINT_FORWARD)) + indxt.write(decint(length, DECINT_FORWARD)) + indxt.write(decint(self._ctoc_map[node], DECINT_FORWARD)) + indxt.write(decint(0, DECINT_FORWARD)) + + + entries = list(toc.iter())[1:] + for i, child in enumerate(entries): + if not child.title or not child.title.strip(): + continue + h = child.href + if h not in self._id_offsets: + self._oeb.log.warning('Could not find TOC entry:', child.title) + continue + offset = self._id_offsets[h] + length = None + for sibling in entries[i+1:]: + h2 = sibling.href + if h2 in self._id_offsets: + offset2 = self._id_offsets[h2] + if offset2 > offset: + length = offset2 - offset + break + if length is None: + length = self._content_length - offset + + add_node(child, offset, length, c) + last_index = c + ctoc_offset = self._ctoc_map[child] + last_name = self._ctoc_name_map[child] + c += 1 + + return indxt.getvalue(), c, indices.getvalue(), last_index, last_name + + + def _generate_index(self): + self._oeb.log('Generating index...') + self._primary_index_record = None + ctoc = self._generate_ctoc() + indxt, indxt_count, indices, last_index, last_name = \ + self._generate_indxt(ctoc) + + indx1 = StringIO() + indx1.write('INDX'+pack('>I', 0xc0)) # header length + + # 0x8 - 0xb : Unknown + indx1.write('\0'*4) + + # 0xc - 0xf : Header type + indx1.write(pack('>I', 1)) + + # 0x10 - 0x13 : Unknown + indx1.write('\0'*4) + + # 0x14 - 0x17 : IDXT offset + # 0x18 - 0x1b : IDXT count + indx1.write(pack('>I', 0xc0+len(indxt))) + indx1.write(pack('>I', indxt_count)) + + # 0x1c - 0x23 : Unknown + indx1.write('\xff'*8) + + # 0x24 - 0xbf + indx1.write('\0'*156) + indx1.write(indxt) + indx1.write(indices) + indx1 = indx1.getvalue() + + idxt0 = last_name + pack('>H', last_index) + indx0 = StringIO() + + tagx = TAGX['periodical' if self.opts.mobi_periodical else 'chapter'] + tagx = 'TAGX' + pack('>I', 8 + len(tagx)) + tagx + indx0_indices_pos = 0xc0 + len(tagx) + len(idxt0) + indx0_indices = 'INDX' + pack('>H', 0xc0 + len(tagx)) + # Generate record header + header = StringIO() + + header.write('INDX') + header.write(pack('>I', 0xc0)) # header length + + # 0x08 - 0x0b : Unknown + header.write('\0'*4) + + # 0x0c - 0x0f : Header type + header.write(pack('>I', 0)) + + # 0x10 - 0x13 : Generator ID + header.write(pack('>I', 6)) + + # 0x14 - 0x17 : IDXT offset + header.write(pack('>I', indx0_indices_pos)) + + # 0x18 - 0x1b : IDXT count + header.write(pack('>I', 1)) + + # 0x1c - 0x1f : Text encoding ? + header.write(pack('>I', 650001)) + + # 0x20 - 0x23 : Language code? + header.write(iana2mobi(str(self._oeb.metadata.language[0]))) + + # 0x24 - 0x27 : Number of TOC entries in INDX1 + header.write(pack('>I', indxt_count)) + + # 0x28 - 0x2b : ORDT Offset + header.write('\0'*4) + + # 0x2c - 0x2f : LIGT offset + header.write('\0'*4) + + # 0x30 - 0x33 : Number of LIGT entries + header.write('\0'*4) + + # 0x34 - 0x37 : Unknown + header.write(pack('>I', 1)) + + # 0x38 - 0xb3 : Unknown (pad?) + header.write('\0'*124) + + # 0xb4 - 0xb7 : TAGX offset + header.write(pack('>I', 0xc0)) + + # 0xb8 - 0xbf : Unknown + header.write('\0'*8) + + header = header.getvalue() + + indx0.write(header) + indx0.write(tagx) + indx0.write(idxt0) + indx0.write(indx0_indices) + indx0 = indx0.getvalue() + + self._primary_index_record = len(self._records) + if self.opts.verbose > 3: + from tempfile import mkdtemp + import os + t = mkdtemp() + open(os.path.join(t, 'indx0.bin'), 'wb').write(indx0) + open(os.path.join(t, 'indx1.bin'), 'wb').write(indx1) + open(os.path.join(t, 'ctoc.bin'), 'wb').write(ctoc) + self._oeb.log.debug('Index records dumped to', t) + + self._records.extend([indx0, indx1, ctoc]) + + def _generate_ctoc(self): + if self.opts.mobi_periodical: + raise NotImplementedError('Indexing for periodicals not implemented') + toc = self._oeb.toc + self._ctoc_map = {} + self._ctoc_name_map = {} + self._last_toc_entry = None + ctoc = StringIO() + + def add_node(node, cls): + t = node.title + if t and t.strip(): + t = t.strip() + if not isinstance(t, unicode): + t = t.decode('utf-8', 'replace') + t = t.encode('utf-8') + self._last_toc_entry = t + self._ctoc_map[node] = ctoc.tell() + self._ctoc_name_map[node] = decint(len(t), DECINT_FORWARD)+t + ctoc.write(self._ctoc_name_map[node]) + + for child in toc.iter(): + add_node(child, 'chapter') + + return ctoc.getvalue() + + + def _generate_images(self): self._oeb.logger.info('Serializing images...') images = [(index, href) for href, index in self._images.items()] images.sort() + self._first_image_record = None for _, href in images: item = self._oeb.manifest.hrefs[href] try: @@ -420,6 +639,8 @@ class MobiWriter(object): self._oeb.logger.warn('Bad image file %r' % item.href) continue self._records.append(data) + if self._first_image_record is None: + self._first_image_record = len(self._records)-1 def _generate_record0(self): metadata = self._oeb.metadata @@ -446,8 +667,9 @@ class MobiWriter(object): # 0xC - 0xF : Text encoding (65001 is utf-8) # 0x10 - 0x13 : UID # 0x14 - 0x17 : Generator version + btype = 0x101 if self.opts.mobi_periodical else 2 record0.write(pack('>IIIII', - 0xe8, 2, 65001, uid, 6)) + 0xe8, btype, 65001, uid, 6)) # 0x18 - 0x1f : Unknown record0.write('\xff' * 8) @@ -477,7 +699,7 @@ class MobiWriter(object): # 0x58 - 0x5b : Format version # 0x5c - 0x5f : First image record number record0.write(pack('>II', - 6, self._text_nrecords + 1)) + 6, self._first_image_record if self._first_image_record else 0)) # 0x60 - 0x63 : First HUFF/CDIC record number # 0x64 - 0x67 : Number of HUFF/CDIC records @@ -537,8 +759,8 @@ class MobiWriter(object): record0.write(pack('>I', 5)) # 0xe4 - 0xe7 : Primary index record - # TODO: Implement - record0.write(pack('>I', 0xffffffff)) + record0.write(pack('>I', 0xffffffff if self._primary_index_record is + None else self._primary_index_record)) record0.write(exth) record0.write(title) diff --git a/src/calibre/ebooks/oeb/transforms/htmltoc.py b/src/calibre/ebooks/oeb/transforms/htmltoc.py index 7f3391e72b..1aef7e56cc 100644 --- a/src/calibre/ebooks/oeb/transforms/htmltoc.py +++ b/src/calibre/ebooks/oeb/transforms/htmltoc.py @@ -30,7 +30,7 @@ STYLE_CSS = { margin-left: 3.6em; } """, - + 'centered': """ .calibre_toc_header { text-align: center; @@ -48,18 +48,18 @@ class HTMLTOCAdder(object): def __init__(self, title=None, style='nested'): self.title = title self.style = style - + @classmethod def config(cls, cfg): group = cfg.add_group('htmltoc', _('HTML TOC generation options.')) - group('toc_title', ['--toc-title'], default=None, + group('toc_title', ['--toc-title'], default=None, help=_('Title for any generated in-line table of contents.')) return cfg @classmethod def generate(cls, opts): return cls(title=opts.toc_title) - + def __call__(self, oeb, context): if 'toc' in oeb.guide: return diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 9582651ca0..ffa6dd6b16 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -20,7 +20,6 @@ entry_points = { 'ebook-convert = calibre.ebooks.conversion.cli:main', 'markdown-calibre = calibre.ebooks.markdown.markdown:main', 'web2disk = calibre.web.fetch.simple:main', - 'feeds2disk = calibre.web.feeds.main:main', 'calibre-server = calibre.library.server:main', 'lrf2lrs = calibre.ebooks.lrf.lrfparser:main', 'lrs2lrf = calibre.ebooks.lrf.lrs.convert_from:main', diff --git a/src/calibre/utils/complete.py b/src/calibre/utils/complete.py index 7164e61635..c713bbe82a 100644 --- a/src/calibre/utils/complete.py +++ b/src/calibre/utils/complete.py @@ -53,7 +53,7 @@ def get_opts_from_parser(parser, prefix): for x in do_opt(o): yield x def send(ans): - pat = re.compile('([^0-9a-zA-Z_./])') + pat = re.compile('([^0-9a-zA-Z_./-])') for x in sorted(set(ans)): x = pat.sub(lambda m : '\\'+m.group(1), x) if x.endswith('\\ '): diff --git a/src/calibre/web/feeds/main.py b/src/calibre/web/feeds/main.py deleted file mode 100644 index 61bfa97e11..0000000000 --- a/src/calibre/web/feeds/main.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/env python -__license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal ' -''' -CLI for downloading feeds. -''' - -import sys, os -from calibre.web.feeds.recipes import get_builtin_recipe, compile_recipe, titles -from calibre.web.fetch.simple import option_parser as _option_parser -from calibre.web.feeds.news import BasicNewsRecipe -from calibre.utils.config import Config, StringConfig - -def config(defaults=None): - desc = _('Options to control the fetching of periodical content from the web.') - c = Config('feeds2disk', desc) if defaults is None else StringConfig(defaults, desc) - - web2disk = c.add_group('web2disk', _('Customize the download engine')) - web2disk('timeout', ['-t', '--timeout'], default=10.0, - help=_('Timeout in seconds to wait for a response from the server. Default: %default s'),) - web2disk('delay', ['--delay'], default=0, - help=_('Minimum interval in seconds between consecutive fetches. Default is %default s')) - web2disk('encoding', ['--encoding'], default=None, - help=_('The character encoding for the websites you are trying to download. The default is to try and guess the encoding.')) - web2disk('match_regexps', ['--match-regexp'], default=[], action='append', - help=_('Only links that match this regular expression will be followed. This option can be specified multiple times, in which case as long as a link matches any one regexp, it will be followed. By default all links are followed.')) - web2disk('filter_regexps', ['--filter-regexp'], default=[], action='append', - help=_('Any link that matches this regular expression will be ignored. This option can be specified multiple times, in which case as long as any regexp matches a link, it will be ignored.By default, no links are ignored. If both --filter-regexp and --match-regexp are specified, then --filter-regexp is applied first.')) - web2disk('no_stylesheets', ['--dont-download-stylesheets'], action='store_true', default=False, - help=_('Do not download CSS stylesheets.')) - - c.add_opt('feeds', ['--feeds'], default=None, - help=_('''Specify a list of feeds to download. For example: -"['http://feeds.newsweek.com/newsweek/TopNews', 'http://feeds.newsweek.com/headlines/politics']" -If you specify this option, any argument to %prog is ignored and a default recipe is used to download the feeds.''')) - c.add_opt('verbose', ['-v', '--verbose'], default=0, action='count', - help=_('''Be more verbose while processing.''')) - c.add_opt('title', ['--title'], default=None, - help=_('The title for this recipe. Used as the title for any ebooks created from the downloaded feeds.')) - c.add_opt('username', ['-u', '--username'], default=None, - help=_('Username for sites that require a login to access content.')) - c.add_opt('password', ['-p', '--password'], default=None, - help=_('Password for sites that require a login to access content.')) - c.add_opt('lrf', ['--lrf'], default=False, action='store_true', - help='Optimize fetching for subsequent conversion to LRF.') - c.add_opt('epub', ['--epub'], default=False, action='store_true', - help='Optimize fetching for subsequent conversion to EPUB.') - c.add_opt('mobi', ['--mobi'], default=False, action='store_true', - help='Optimize fetching for subsequent conversion to MOBI.') - c.add_opt('recursions', ['--recursions'], default=0, - help=_('Number of levels of links to follow on webpages that are linked to from feeds. Defaul %default')) - c.add_opt('output_dir', ['--output-dir'], default='.', - help=_('The directory in which to store the downloaded feeds. Defaults to the current directory.')) - c.add_opt('no_progress_bar', ['--no-progress-bar'], default=False, action='store_true', - help=_("Don't show the progress bar")) - c.add_opt('debug', ['--debug'], action='store_true', default=False, - help=_('Very verbose output, useful for debugging.')) - c.add_opt('test', ['--test'], action='store_true', default=False, - help=_('Useful for recipe development. Forces max_articles_per_feed to 2 and downloads at most 2 feeds.')) - - return c - -USAGE=_('''\ -%%prog [options] ARG - -%%prog parses an online source of articles, like an RSS or ATOM feed and -fetches the article contents organized in a nice hierarchy. - -ARG can be one of: - -file name - %%prog will try to load a recipe from the file - -builtin recipe title - %%prog will load the builtin recipe and use it to fetch the feed. For e.g. Newsweek or "The BBC" or "The New York Times" - -recipe as a string - %%prog will load the recipe directly from the string arg. - -Available builtin recipes are: -%s -''')%(unicode(list(titles))[1:-1]) - -def option_parser(usage=USAGE): - p = _option_parser(usage=usage) - p.remove_option('--max-recursions') - p.remove_option('--base-dir') - p.remove_option('--verbose') - p.remove_option('--max-files') - p.subsume('WEB2DISK OPTIONS', _('Options to control web2disk (used to fetch websites linked from feeds)')) - - p.add_option('--feeds', default=None, - help=_('''Specify a list of feeds to download. For example: -"['http://feeds.newsweek.com/newsweek/TopNews', 'http://feeds.newsweek.com/headlines/politics']" -If you specify this option, any argument to %prog is ignored and a default recipe is used to download the feeds.''')) - p.add_option('--verbose', default=False, action='store_true', - help=_('''Be more verbose while processing.''')) - p.add_option('--title', default=None, - help=_('The title for this recipe. Used as the title for any ebooks created from the downloaded feeds.')) - p.add_option('--username', default=None, help=_('Username for sites that require a login to access content.')) - p.add_option('--password', default=None, help=_('Password for sites that require a login to access content.')) - p.add_option('--lrf', default=False, action='store_true', help='Optimize fetching for subsequent conversion to LRF.') - p.add_option('--recursions', default=0, type='int', - help=_('Number of levels of links to follow on webpages that are linked to from feeds. Defaul %default')) - p.add_option('--output-dir', default=os.getcwd(), - help=_('The directory in which to store the downloaded feeds. Defaults to the current directory.')) - p.add_option('--no-progress-bar', dest='no_progress_bar', default=False, action='store_true', - help=_('Dont show the progress bar')) - p.add_option('--debug', action='store_true', default=False, - help=_('Very verbose output, useful for debugging.')) - p.add_option('--test', action='store_true', default=False, - help=_('Useful for recipe development. Forces max_articles_per_feed to 2 and downloads at most 2 feeds.')) - - return p - -class RecipeError(Exception): - pass - -def run_recipe(opts, recipe_arg, parser, notification=None): - if notification is None: - from calibre.utils.terminfo import TerminalController, ProgressBar - term = TerminalController(sys.stdout) - pb = ProgressBar(term, _('Fetching feeds...'), no_progress_bar=opts.no_progress_bar) - notification = pb.update - - recipe = None - if opts.feeds is not None: - recipe = BasicNewsRecipe - else: - try: - if os.access(recipe_arg, os.R_OK): - recipe = compile_recipe(open(recipe_arg).read()) - else: - raise Exception('not file') - except: - recipe = get_builtin_recipe(recipe_arg) - if recipe is None: - recipe = compile_recipe(recipe_arg) - - if recipe is None: - raise RecipeError(recipe_arg+ ' is an invalid recipe') - - recipe = recipe(opts, parser, notification) - - if not os.path.exists(recipe.output_dir): - os.makedirs(recipe.output_dir) - recipe.download(for_lrf=True) - - return recipe - -def main(args=sys.argv, notification=None): - p = option_parser() - opts, args = p.parse_args(args=args[1:]) - - if len(args) != 1 and opts.feeds is None: - p.print_help() - return 1 - recipe_arg = args[0] if len(args) > 0 else None - run_recipe(opts, recipe_arg, p, notification=notification) - - return 0 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/src/calibre/web/feeds/recipes/recipe_newsweek.py b/src/calibre/web/feeds/recipes/recipe_newsweek.py index 54e54a9a83..ffeb04f4a5 100644 --- a/src/calibre/web/feeds/recipes/recipe_newsweek.py +++ b/src/calibre/web/feeds/recipes/recipe_newsweek.py @@ -109,7 +109,7 @@ class Newsweek(BasicNewsRecipe): def get_cover_url(self): cover_url = None - soup = self.index_to_soup(self.INDEX) + soup = self.index_to_soup('http://www.newsweek.com') link_item = soup.find('div',attrs={'class':'cover-image'}) if link_item and link_item.a and link_item.a.img: cover_url = link_item.a.img['src'] From 493920beb902397b84b136dd085f0a701a56b8ae Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 May 2009 16:12:23 -0700 Subject: [PATCH 12/22] Some fixes to MOBI indexing, still doesn't work --- src/calibre/ebooks/mobi/writer.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index 19e997f258..4b747c92ab 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -438,19 +438,19 @@ class MobiWriter(object): toc = self._oeb.toc indxt, indices, c = StringIO(), StringIO(), 0 - indices.write('INDX') + indices.write('IDXT') c = 0 last_index = last_name = None def add_node(node, offset, length, count): - t = node.title if self.opts.verbose > 2: self._oeb.log.debug('Adding TOC node:', node.title, 'href:', node.href) pos = 0xc0 + indxt.tell() indices.write(pack('>H', pos)) - indxt.write(chr(len(str(count)))+str(count)) + name = "%4d"%count + indxt.write(chr(len(name)) + name) indxt.write(INDXT['chapter']) indxt.write(decint(offset, DECINT_FORWARD)) indxt.write(decint(length, DECINT_FORWARD)) @@ -481,7 +481,7 @@ class MobiWriter(object): add_node(child, offset, length, c) last_index = c ctoc_offset = self._ctoc_map[child] - last_name = self._ctoc_name_map[child] + last_name = "%4d"%c c += 1 return indxt.getvalue(), c, indices.getvalue(), last_index, last_name @@ -520,13 +520,13 @@ class MobiWriter(object): indx1.write(indices) indx1 = indx1.getvalue() - idxt0 = last_name + pack('>H', last_index) + idxt0 = chr(len(last_name)) + last_name + pack('>H', last_index) indx0 = StringIO() tagx = TAGX['periodical' if self.opts.mobi_periodical else 'chapter'] tagx = 'TAGX' + pack('>I', 8 + len(tagx)) + tagx indx0_indices_pos = 0xc0 + len(tagx) + len(idxt0) - indx0_indices = 'INDX' + pack('>H', 0xc0 + len(tagx)) + indx0_indices = 'IDXT' + pack('>H', 0xc0 + len(tagx)) # Generate record header header = StringIO() @@ -616,16 +616,14 @@ class MobiWriter(object): t = t.encode('utf-8') self._last_toc_entry = t self._ctoc_map[node] = ctoc.tell() - self._ctoc_name_map[node] = decint(len(t), DECINT_FORWARD)+t - ctoc.write(self._ctoc_name_map[node]) + self._ctoc_name_map[node] = t + ctoc.write(decint(len(t), DECINT_FORWARD)+t) for child in toc.iter(): add_node(child, 'chapter') return ctoc.getvalue() - - def _generate_images(self): self._oeb.logger.info('Serializing images...') images = [(index, href) for href, index in self._images.items()] @@ -727,11 +725,10 @@ class MobiWriter(object): # 0xb0 - 0xb1 : First content record number # 0xb2 - 0xb3 : last content record number # (Includes Image, DATP, HUFF, DRM) - # TODO: implement - record0.write(pack('>I', 0xffffffff)) + record0.write(pack('>HH', 1, len(self._records)-1)) # 0xb4 - 0xb7 : Unknown - record0.write('\0'*4) + record0.write('\0\0\0\x01') # 0xb8 - 0xbb : FCIS record number record0.write(pack('>I', 0xffffffff)) From 84e0dac816c40c7b04a415aff6b06b380e6f8e49 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 May 2009 16:37:33 -0700 Subject: [PATCH 13/22] Make welcome wizard a little more colorful --- src/calibre/ebooks/mobi/output.py | 9 +- src/calibre/ebooks/mobi/writer.py | 2 +- src/calibre/gui2/images/welcome_wizard.svg | 1712 ++++++++++++++++++++ src/calibre/gui2/wizard/__init__.py | 3 + 4 files changed, 1724 insertions(+), 2 deletions(-) create mode 100644 src/calibre/gui2/images/welcome_wizard.svg diff --git a/src/calibre/ebooks/mobi/output.py b/src/calibre/ebooks/mobi/output.py index 1c1e4795b6..c5f94b5c28 100644 --- a/src/calibre/ebooks/mobi/output.py +++ b/src/calibre/ebooks/mobi/output.py @@ -35,6 +35,11 @@ class MOBIOutput(OutputFormatPlugin): recommended_value=False, level=OptionRecommendation.LOW, help=_('Disable generation of MOBI index.') ), + OptionRecommendation(name='dont_compress', + recommended_value=False, level=OptionRecommendation.LOW, + help=_('Disable compression of the file contents.') + ), + ]) @@ -44,7 +49,8 @@ class MOBIOutput(OutputFormatPlugin): def convert(self, oeb, output_path, input_plugin, opts, log): self.log, self.opts, self.oeb = log, opts, oeb - from calibre.ebooks.mobi.writer import PALM_MAX_IMAGE_SIZE, MobiWriter + from calibre.ebooks.mobi.writer import PALM_MAX_IMAGE_SIZE, \ + MobiWriter, PALMDOC, UNCOMPRESSED from calibre.ebooks.mobi.mobiml import MobiMLizer from calibre.ebooks.oeb.transforms.manglecase import CaseMangler from calibre.ebooks.oeb.transforms.rasterize import SVGRasterizer @@ -59,6 +65,7 @@ class MOBIOutput(OutputFormatPlugin): mobimlizer = MobiMLizer(ignore_tables=opts.linearize_tables) mobimlizer(oeb, opts) writer = MobiWriter(opts, imagemax=imagemax, + compression=UNCOMPRESSED if opts.dont_compress else PALMDOC, prefer_author_sort=opts.prefer_author_sort) writer(oeb, output_path) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index 4b747c92ab..4548ead3a5 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -307,7 +307,7 @@ class MobiWriter(object): COLLAPSE_RE = re.compile(r'[ \t\r\n\v]+') def __init__(self, opts, compression=PALMDOC, imagemax=None, - prefer_author_sort=False): + prefer_author_sort=False): self.opts = opts self._compression = compression or UNCOMPRESSED self._imagemax = imagemax or OTHER_MAX_IMAGE_SIZE diff --git a/src/calibre/gui2/images/welcome_wizard.svg b/src/calibre/gui2/images/welcome_wizard.svg new file mode 100644 index 0000000000..d8ed0e69c9 --- /dev/null +++ b/src/calibre/gui2/images/welcome_wizard.svg @@ -0,0 +1,1712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py index 3e18a638aa..1a0b626fbb 100644 --- a/src/calibre/gui2/wizard/__init__.py +++ b/src/calibre/gui2/wizard/__init__.py @@ -468,6 +468,9 @@ class Wizard(QWizard): p.loadFromData(server_resources['calibre.png']) self.setPixmap(self.LogoPixmap, p.scaledToHeight(80, Qt.SmoothTransformation)) + self.setPixmap(self.WatermarkPixmap, + QPixmap(':/images/welcome_wizard.svg')) + self.setPixmap(self.BackgroundPixmap, QPixmap(':/images/wizard.svg')) self.device_page = DevicePage() self.library_page = LibraryPage() self.finish_page = FinishPage() From 597fd045a9cb52d1527609118af6226df5c7c832 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 May 2009 17:16:00 -0700 Subject: [PATCH 14/22] Align blocks in the indexing records --- src/calibre/ebooks/mobi/writer.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index 4548ead3a5..ba0ca6ead7 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -97,6 +97,14 @@ def decint(value, direction): bytes[-1] |= 0x80 return ''.join(chr(b) for b in reversed(bytes)) + +def align_block(raw, multiple=4, pad='\0'): + l = len(raw) + extra = l % multiple + if extra == 0: return raw + return raw + pad*(multiple - extra) + + def rescale_image(data, maxsizeb, dimen=None): image = Image.open(StringIO(data)) format = image.format @@ -484,7 +492,8 @@ class MobiWriter(object): last_name = "%4d"%c c += 1 - return indxt.getvalue(), c, indices.getvalue(), last_index, last_name + return align_block(indxt.getvalue()), c, \ + align_block(indices.getvalue()), last_index, last_name def _generate_index(self): @@ -521,12 +530,13 @@ class MobiWriter(object): indx1 = indx1.getvalue() idxt0 = chr(len(last_name)) + last_name + pack('>H', last_index) + idxt0 = align_block(idxt0) indx0 = StringIO() tagx = TAGX['periodical' if self.opts.mobi_periodical else 'chapter'] - tagx = 'TAGX' + pack('>I', 8 + len(tagx)) + tagx + tagx = align_block('TAGX' + pack('>I', 8 + len(tagx)) + tagx) indx0_indices_pos = 0xc0 + len(tagx) + len(idxt0) - indx0_indices = 'IDXT' + pack('>H', 0xc0 + len(tagx)) + indx0_indices = align_block('IDXT' + pack('>H', 0xc0 + len(tagx))) # Generate record header header = StringIO() @@ -622,7 +632,7 @@ class MobiWriter(object): for child in toc.iter(): add_node(child, 'chapter') - return ctoc.getvalue() + return align_block(ctoc.getvalue()) def _generate_images(self): self._oeb.logger.info('Serializing images...') From 3585977bb399ea4aee18aac057ca18f5add477e2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 May 2009 23:37:05 -0700 Subject: [PATCH 15/22] Make series index a float and add a column for publish date --- src/calibre/ebooks/metadata/__init__.py | 40 ++- src/calibre/ebooks/metadata/fb2.py | 6 +- src/calibre/ebooks/metadata/meta.py | 2 +- src/calibre/ebooks/metadata/opf.py | 189 ++++++------ src/calibre/ebooks/metadata/opf.xml | 5 +- src/calibre/ebooks/metadata/opf2.py | 5 +- src/calibre/ebooks/oeb/transforms/jacket.py | 2 +- src/calibre/ebooks/oeb/transforms/metadata.py | 2 +- src/calibre/gui2/__init__.py | 3 +- src/calibre/gui2/convert/__init__.py | 3 +- src/calibre/gui2/convert/metadata.py | 2 +- src/calibre/gui2/convert/metadata.ui | 280 +++++++++--------- src/calibre/gui2/dialogs/metadata_single.ui | 38 +-- src/calibre/gui2/library.py | 85 ++++-- src/calibre/library/database.py | 44 +-- src/calibre/library/database2.py | 119 ++++++-- src/calibre/library/server.py | 8 +- todo | 1 + 18 files changed, 465 insertions(+), 369 deletions(-) diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index 0174bf1ec3..6d0d14f6c2 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -42,6 +42,31 @@ def title_sort(title): title = title.replace(prep, '') + ', ' + prep return title.strip() +coding = zip( +[1000,900,500,400,100,90,50,40,10,9,5,4,1], +["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"] +) + + + +def roman(num): + if num <= 0 or num >= 4000 or int(num) != num: + return str(num) + result = [] + for d, r in coding: + while num >= d: + result.append(r) + num -= d + return ''.join(result) + + +def fmt_sidx(i, fmt='%.2f', use_roman=False): + if i is None: + i = 1 + if int(i) == i: + return roman(i) if use_roman else '%d'%i + return fmt%i + class Resource(object): ''' @@ -187,7 +212,8 @@ class MetaInformation(object): 'publisher', 'series', 'series_index', 'rating', 'isbn', 'tags', 'cover_data', 'application_id', 'guide', 'manifest', 'spine', 'toc', 'cover', 'language', - 'book_producer', 'timestamp', 'lccn', 'lcc', 'ddc'): + 'book_producer', 'timestamp', 'lccn', 'lcc', 'ddc', + 'pubdate'): if hasattr(mi, attr): setattr(ans, attr, getattr(mi, attr)) @@ -212,7 +238,7 @@ class MetaInformation(object): for x in ('author_sort', 'title_sort', 'comments', 'category', 'publisher', 'series', 'series_index', 'rating', 'isbn', 'language', 'application_id', 'manifest', 'toc', 'spine', 'guide', 'cover', - 'book_producer', 'timestamp', 'lccn', 'lcc', 'ddc' + 'book_producer', 'timestamp', 'lccn', 'lcc', 'ddc', 'pubdate' ): setattr(self, x, getattr(mi, x, None)) @@ -231,7 +257,7 @@ class MetaInformation(object): 'publisher', 'series', 'series_index', 'rating', 'isbn', 'application_id', 'manifest', 'spine', 'toc', 'cover', 'language', 'guide', 'book_producer', - 'timestamp', 'lccn', 'lcc', 'ddc'): + 'timestamp', 'lccn', 'lcc', 'ddc', 'pubdate'): if hasattr(mi, attr): val = getattr(mi, attr) if val is not None: @@ -262,8 +288,8 @@ class MetaInformation(object): try: x = float(self.series_index) except ValueError: - x = 1.0 - return '%d'%x if int(x) == x else '%.2f'%x + x = 1 + return fmt_sidx(x) def authors_from_string(self, raw): self.authors = string_to_authors(raw) @@ -299,6 +325,8 @@ class MetaInformation(object): fmt('Rating', self.rating) if self.timestamp is not None: fmt('Timestamp', self.timestamp.isoformat(' ')) + if self.pubdate is not None: + fmt('Published', self.pubdate.isoformat(' ')) if self.lccn: fmt('LCCN', unicode(self.lccn)) if self.lcc: @@ -327,6 +355,8 @@ class MetaInformation(object): ans += [(_('Language'), unicode(self.language))] if self.timestamp is not None: ans += [(_('Timestamp'), unicode(self.timestamp.isoformat(' ')))] + if self.pubdate is not None: + ans += [(_('Published'), unicode(self.pubdate.isoformat(' ')))] for i, x in enumerate(ans): ans[i] = u'%s%s'%x return u'%s
'%u'\n'.join(ans) diff --git a/src/calibre/ebooks/metadata/fb2.py b/src/calibre/ebooks/metadata/fb2.py index 5b85f935a4..e81f8fe108 100644 --- a/src/calibre/ebooks/metadata/fb2.py +++ b/src/calibre/ebooks/metadata/fb2.py @@ -5,7 +5,7 @@ __copyright__ = '2008, Anatoly Shipitsin ' '''Read meta information from fb2 files''' -import sys, os, mimetypes +import mimetypes from base64 import b64decode from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup @@ -32,7 +32,7 @@ def get_metadata(stream): if not exts: exts = ['.jpg'] cdata = (exts[0][1:], b64decode(binary.string.strip())) - + if comments: comments = u''.join(comments.findAll(text=True)) series = soup.find("sequence") @@ -42,7 +42,7 @@ def get_metadata(stream): if series: mi.series = series.get('name', None) try: - mi.series_index = int(series.get('number', None)) + mi.series_index = float(series.get('number', None)) except (TypeError, ValueError): pass if cdata: diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py index 1460a97eee..9a11ea4fca 100644 --- a/src/calibre/ebooks/metadata/meta.py +++ b/src/calibre/ebooks/metadata/meta.py @@ -145,7 +145,7 @@ def metadata_from_filename(name, pat=None): pass try: si = match.group('series_index') - mi.series_index = int(si) + mi.series_index = float(si) except (IndexError, ValueError, TypeError): pass try: diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index 94264a285e..f508ffd517 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -2,8 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' '''Read/Write metadata from Open Packaging Format (.opf) files.''' -import sys, re, os, glob -import cStringIO +import re, os import uuid from urllib import unquote, quote @@ -15,14 +14,14 @@ from calibre.ebooks.metadata import Resource, ResourceCollection from calibre.ebooks.metadata.toc import TOC class OPFSoup(BeautifulStoneSoup): - + def __init__(self, raw): - BeautifulStoneSoup.__init__(self, raw, + BeautifulStoneSoup.__init__(self, raw, convertEntities=BeautifulSoup.HTML_ENTITIES, selfClosingTags=['item', 'itemref', 'reference']) class ManifestItem(Resource): - + @staticmethod def from_opf_manifest_item(item, basedir): if item.has_key('href'): @@ -37,7 +36,7 @@ class ManifestItem(Resource): if mt: res.mime_type = mt return res - + @dynamic_property def media_type(self): def fget(self): @@ -45,28 +44,28 @@ class ManifestItem(Resource): def fset(self, val): self.mime_type = val return property(fget=fget, fset=fset) - - + + def __unicode__(self): return u''%(self.id, self.href(), self.media_type) - + def __str__(self): return unicode(self).encode('utf-8') - + def __repr__(self): return unicode(self) - - + + def __getitem__(self, index): if index == 0: return self.href() if index == 1: return self.media_type raise IndexError('%d out of bounds.'%index) - + class Manifest(ResourceCollection): - + @staticmethod def from_opf_manifest_element(manifest, dir): m = Manifest() @@ -81,7 +80,7 @@ class Manifest(ResourceCollection): except ValueError: continue return m - + @staticmethod def from_paths(entries): ''' @@ -96,37 +95,37 @@ class Manifest(ResourceCollection): m.next_id += 1 m.append(mi) return m - + def __init__(self): ResourceCollection.__init__(self) self.next_id = 1 - - + + def item(self, id): for i in self: if i.id == id: return i - + def id_for_path(self, path): path = os.path.normpath(os.path.abspath(path)) for i in self: if i.path and os.path.normpath(i.path) == path: - return i.id - + return i.id + def path_for_id(self, id): for i in self: if i.id == id: return i.path class Spine(ResourceCollection): - + class Item(Resource): - + def __init__(self, idfunc, *args, **kwargs): Resource.__init__(self, *args, **kwargs) self.is_linear = True self.id = idfunc(self.path) - + @staticmethod def from_opf_spine_element(spine, manifest): s = Spine(manifest) @@ -137,7 +136,7 @@ class Spine(ResourceCollection): r.is_linear = itemref.get('linear', 'yes') == 'yes' s.append(r) return s - + @staticmethod def from_paths(paths, manifest): s = Spine(manifest) @@ -147,14 +146,14 @@ class Spine(ResourceCollection): except: continue return s - - - + + + def __init__(self, manifest): ResourceCollection.__init__(self) self.manifest = manifest - - + + def linear_items(self): for r in self: if r.is_linear: @@ -164,16 +163,16 @@ class Spine(ResourceCollection): for r in self: if not r.is_linear: yield r.path - + def items(self): for i in self: yield i.path - - + + class Guide(ResourceCollection): - + class Reference(Resource): - + @staticmethod def from_opf_resource_item(ref, basedir): title, href, type = ref.get('title', ''), ref['href'], ref['type'] @@ -181,14 +180,14 @@ class Guide(ResourceCollection): res.title = title res.type = type return res - + def __repr__(self): ans = '' - - + + @staticmethod def from_opf_guide(guide_elem, base_dir=os.getcwdu()): coll = Guide() @@ -199,29 +198,29 @@ class Guide(ResourceCollection): except: continue return coll - + def set_cover(self, path): map(self.remove, [i for i in self if 'cover' in i.type.lower()]) for type in ('cover', 'other.ms-coverimage-standard', 'other.ms-coverimage'): self.append(Guide.Reference(path, is_path=True)) self[-1].type = type self[-1].title = '' - + class standard_field(object): - + def __init__(self, name): self.name = name - + def __get__(self, obj, typ=None): return getattr(obj, 'get_'+self.name)() - + class OPF(MetaInformation): - + MIMETYPE = 'application/oebps-package+xml' ENTITY_PATTERN = re.compile(r'&(\S+?);') - + uid = standard_field('uid') application_id = standard_field('application_id') title = standard_field('title') @@ -238,29 +237,29 @@ class OPF(MetaInformation): series_index = standard_field('series_index') rating = standard_field('rating') tags = standard_field('tags') - + def __init__(self): raise NotImplementedError('Abstract base class') - + @dynamic_property def package(self): def fget(self): return self.soup.find(re.compile('package')) return property(fget=fget) - + @dynamic_property def metadata(self): def fget(self): return self.package.find(re.compile('metadata')) return property(fget=fget) - - + + def get_title(self): title = self.metadata.find('dc:title') if title and title.string: return self.ENTITY_PATTERN.sub(entity_to_unicode, title.string).strip() return self.default_title.strip() - + def get_authors(self): creators = self.metadata.findAll('dc:creator') for elem in creators: @@ -277,7 +276,7 @@ class OPF(MetaInformation): ans.extend(i.split('&')) return [a.strip() for a in ans] return [] - + def get_author_sort(self): creators = self.metadata.findAll('dc:creator') for elem in creators: @@ -288,37 +287,37 @@ class OPF(MetaInformation): fa = elem.get('file-as') return self.ENTITY_PATTERN.sub(entity_to_unicode, fa).strip() if fa else None return None - + def get_title_sort(self): title = self.package.find('dc:title') if title: if title.has_key('file-as'): return title['file-as'].strip() return None - + def get_comments(self): comments = self.soup.find('dc:description') if comments and comments.string: return self.ENTITY_PATTERN.sub(entity_to_unicode, comments.string).strip() return None - + def get_uid(self): package = self.package if package.has_key('unique-identifier'): return package['unique-identifier'] - + def get_category(self): category = self.soup.find('dc:type') if category and category.string: return self.ENTITY_PATTERN.sub(entity_to_unicode, category.string).strip() return None - + def get_publisher(self): publisher = self.soup.find('dc:publisher') if publisher and publisher.string: return self.ENTITY_PATTERN.sub(entity_to_unicode, publisher.string).strip() return None - + def get_isbn(self): for item in self.metadata.findAll('dc:identifier'): scheme = item.get('scheme') @@ -327,13 +326,13 @@ class OPF(MetaInformation): if scheme is not None and scheme.lower() == 'isbn' and item.string: return str(item.string).strip() return None - + def get_language(self): item = self.metadata.find('dc:language') if not item: return _('Unknown') return ''.join(item.findAll(text=True)).strip() - + def get_application_id(self): for item in self.metadata.findAll('dc:identifier'): scheme = item.get('scheme', None) @@ -342,7 +341,7 @@ class OPF(MetaInformation): if scheme in ['libprs500', 'calibre']: return str(item.string).strip() return None - + def get_cover(self): guide = getattr(self, 'guide', []) if not guide: @@ -352,7 +351,7 @@ class OPF(MetaInformation): matches = [r for r in references if r.type.lower() == candidate and r.path] if matches: return matches[0].path - + def possible_cover_prefixes(self): isbn, ans = [], [] for item in self.metadata.findAll('dc:identifier'): @@ -363,22 +362,22 @@ class OPF(MetaInformation): for item in isbn: ans.append(item[1].replace('-', '')) return ans - + def get_series(self): s = self.metadata.find('series') if s is not None: return str(s.string).strip() return None - + def get_series_index(self): s = self.metadata.find('series-index') if s and s.string: try: - return int(str(s.string).strip()) + return float(str(s.string).strip()) except: return None return None - + def get_rating(self): s = self.metadata.find('rating') if s and s.string: @@ -387,7 +386,7 @@ class OPF(MetaInformation): except: return None return None - + def get_tags(self): ans = [] subs = self.soup.findAll('dc:subject') @@ -396,17 +395,17 @@ class OPF(MetaInformation): if val: ans.append(val) return [unicode(a).strip() for a in ans] - - + + class OPFReader(OPF): - + def __init__(self, stream, dir=os.getcwdu()): manage = False if not hasattr(stream, 'read'): manage = True dir = os.path.dirname(stream) stream = open(stream, 'rb') - self.default_title = stream.name if hasattr(stream, 'name') else 'Unknown' + self.default_title = stream.name if hasattr(stream, 'name') else 'Unknown' if hasattr(stream, 'seek'): stream.seek(0) self.soup = OPFSoup(stream.read()) @@ -420,18 +419,18 @@ class OPFReader(OPF): spine = self.soup.find(re.compile('spine')) if spine is not None: self.spine = Spine.from_opf_spine_element(spine, self.manifest) - + self.toc = TOC(base_path=dir) self.toc.read_from_opf(self) guide = self.soup.find(re.compile('guide')) if guide is not None: self.guide = Guide.from_opf_guide(guide, dir) - self.base_dir = dir + self.base_dir = dir self.cover_data = (None, None) - - + + class OPFCreator(MetaInformation): - + def __init__(self, base_path, *args, **kwargs): ''' Initialize. @@ -451,62 +450,62 @@ class OPFCreator(MetaInformation): self.guide = Guide() if self.cover: self.guide.set_cover(self.cover) - - + + def create_manifest(self, entries): ''' Create - + `entries`: List of (path, mime-type) If mime-type is None it is autodetected ''' - entries = map(lambda x: x if os.path.isabs(x[0]) else + entries = map(lambda x: x if os.path.isabs(x[0]) else (os.path.abspath(os.path.join(self.base_path, x[0])), x[1]), entries) self.manifest = Manifest.from_paths(entries) self.manifest.set_basedir(self.base_path) - + def create_manifest_from_files_in(self, files_and_dirs): entries = [] - + def dodir(dir): for spec in os.walk(dir): root, files = spec[0], spec[-1] for name in files: path = os.path.join(root, name) if os.path.isfile(path): - entries.append((path, None)) - + entries.append((path, None)) + for i in files_and_dirs: if os.path.isdir(i): dodir(i) else: entries.append((i, None)) - - self.create_manifest(entries) - + + self.create_manifest(entries) + def create_spine(self, entries): ''' Create the element. Must first call :method:`create_manifest`. - + `entries`: List of paths ''' - entries = map(lambda x: x if os.path.isabs(x) else + entries = map(lambda x: x if os.path.isabs(x) else os.path.abspath(os.path.join(self.base_path, x)), entries) self.spine = Spine.from_paths(entries, self.manifest) - + def set_toc(self, toc): ''' Set the toc. You must call :method:`create_spine` before calling this method. - + :param toc: A :class:`TOC` object ''' self.toc = toc - + def create_guide(self, guide_element): self.guide = Guide.from_opf_guide(guide_element, self.base_path) self.guide.set_basedir(self.base_path) - + def render(self, opf_stream, ncx_stream=None, ncx_manifest_entry=None): from calibre.resources import opf_template from calibre.utils.genshi.template import MarkupTemplate @@ -530,7 +529,7 @@ class OPFCreator(MetaInformation): cover = os.path.abspath(os.path.join(self.base_path, cover)) self.guide.set_cover(cover) self.guide.set_basedir(self.base_path) - + opf = template.generate(__appname__=__appname__, mi=self, __version__=__version__).render('xml') if not opf.startswith('\n'+opf @@ -540,4 +539,4 @@ class OPFCreator(MetaInformation): if toc is not None and ncx_stream is not None: toc.render(ncx_stream, self.application_id) ncx_stream.flush() - \ No newline at end of file + diff --git a/src/calibre/ebooks/metadata/opf.xml b/src/calibre/ebooks/metadata/opf.xml index 027d560ffa..7acf0f5c78 100644 --- a/src/calibre/ebooks/metadata/opf.xml +++ b/src/calibre/ebooks/metadata/opf.xml @@ -9,15 +9,16 @@ ${author} ${'%s (%s)'%(__appname__, __version__)} [http://${__appname__}.kovidgoyal.net] ${mi.application_id} - ${mi.timestamp.isoformat()} + ${mi.pubdate.isoformat()} ${mi.language if mi.language else 'UND'} ${mi.category} ${mi.comments} ${mi.publisher} ${mi.isbn} - + + ${tag} diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index 7dc4c67d17..4d1af0ee75 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -442,9 +442,10 @@ class OPF(object): comments = MetadataField('description') category = MetadataField('category') series = MetadataField('series', is_dc=False) - series_index = MetadataField('series_index', is_dc=False, formatter=int, none_is=1) + series_index = MetadataField('series_index', is_dc=False, formatter=float, none_is=1) rating = MetadataField('rating', is_dc=False, formatter=int) - timestamp = MetadataField('date', formatter=parser.parse) + pubdate = MetadataField('date', formatter=parser.parse) + timestamp = MetadataField('timestamp', is_dc=False, formatter=parser.parse) def __init__(self, stream, basedir=os.getcwdu(), unquote_urls=True): diff --git a/src/calibre/ebooks/oeb/transforms/jacket.py b/src/calibre/ebooks/oeb/transforms/jacket.py index c0a656d64d..952870fcd1 100644 --- a/src/calibre/ebooks/oeb/transforms/jacket.py +++ b/src/calibre/ebooks/oeb/transforms/jacket.py @@ -65,7 +65,7 @@ class Jacket(object): comments = comments.replace('\r\n', '\n').replace('\n\n', '

') series = 'Series: ' + mi.series if mi.series else '' if series and mi.series_index is not None: - series += ' [%s]'%mi.series_index + series += ' [%s]'%mi.format_series_index() tags = mi.tags if not tags: try: diff --git a/src/calibre/ebooks/oeb/transforms/metadata.py b/src/calibre/ebooks/oeb/transforms/metadata.py index cd6edcf699..894cb4fb08 100644 --- a/src/calibre/ebooks/oeb/transforms/metadata.py +++ b/src/calibre/ebooks/oeb/transforms/metadata.py @@ -58,7 +58,7 @@ class MergeMetadata(object): m.add('creator', mi.book_producer, role='bkp') if mi.series_index is not None: m.clear('series_index') - m.add('series_index', '%.2f'%mi.series_index) + m.add('series_index', mi.format_series_index()) if mi.rating is not None: m.clear('rating') m.add('rating', '%.2f'%mi.rating) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 3fbc3a9e10..a8b6f2d05b 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -19,7 +19,8 @@ from calibre.ebooks.metadata import MetaInformation NONE = QVariant() #: Null value to return from the data function of item models -ALL_COLUMNS = ['title', 'authors', 'size', 'timestamp', 'rating', 'publisher', 'tags', 'series'] +ALL_COLUMNS = ['title', 'authors', 'size', 'timestamp', 'rating', 'publisher', + 'tags', 'series', 'pubdate'] def _config(): c = Config('gui', 'preferences for the calibre GUI') diff --git a/src/calibre/gui2/convert/__init__.py b/src/calibre/gui2/convert/__init__.py index 2050108bde..70223acb70 100644 --- a/src/calibre/gui2/convert/__init__.py +++ b/src/calibre/gui2/convert/__init__.py @@ -119,7 +119,8 @@ class Widget(QWidget): elif isinstance(g, XPathEdit): g.edit.setText(val if val else '') else: - raise Exception('Can\'t set value %s in %s'%(repr(val), type(g))) + raise Exception('Can\'t set value %s in %s'%(repr(val), + unicode(g.objectName()))) self.post_set_value(g, val) def set_help(self, msg): diff --git a/src/calibre/gui2/convert/metadata.py b/src/calibre/gui2/convert/metadata.py index 31d8db0867..d961fef473 100644 --- a/src/calibre/gui2/convert/metadata.py +++ b/src/calibre/gui2/convert/metadata.py @@ -83,7 +83,7 @@ class MetadataWidget(Widget, Ui_Form): comments = unicode(self.comment.toPlainText()).strip() if comments: mi.comments = comments - mi.series_index = int(self.series_index.value()) + mi.series_index = float(self.series_index.value()) if self.series.currentIndex() > -1: mi.series = unicode(self.series.currentText()).strip() tags = [t.strip() for t in unicode(self.tags.text()).strip().split(',')] diff --git a/src/calibre/gui2/convert/metadata.ui b/src/calibre/gui2/convert/metadata.ui index 5b68d6383d..3721483893 100644 --- a/src/calibre/gui2/convert/metadata.ui +++ b/src/calibre/gui2/convert/metadata.ui @@ -1,7 +1,8 @@ - + + Form - - + + 0 0 @@ -9,59 +10,89 @@ 500 - + Form - + - - + + Book Cover - - - - + + + + + + + + + + :/images/book.svg + + + true + + + Qt::AlignCenter + + + + + + + + + Use cover from &source file + + + true + + + + + + 6 - + 0 - - + + Change &cover image: - + cover_path - - + + 6 - + 0 - - + + true - - + + Browse for an image to use as the cover of this book. - + ... - - + + :/images/document_open.svg:/images/document_open.svg @@ -70,243 +101,204 @@ - - - - Use cover from &source file - - - true - - - - - - - - - - - - :/images/book.svg - - - true - - - Qt::AlignCenter - - - - - opt_prefer_metadata_cover - + - - - - + + + + &Title: - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + title - - - + + + Change the title of this book - - - + + + &Author(s): - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + author - - - - + + + + 1 0 - + Change the author(s) of this book. Multiple authors should be separated by an &. If the author name contains an &, use && to represent it. - - - + + + Author So&rt: - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + author_sort - - - - + + + + 0 0 - + Change the author(s) of this book. Multiple authors should be separated by a comma - - - + + + &Publisher: - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + publisher - - - + + + Change the publisher of this book - - - + + + Ta&gs: - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + tags - - - - Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. + + + + Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. - - - + + + &Series: - + Qt::PlainText - + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - + series - - - - + + + + 10 0 - + List of known series. You can add new series. - + List of known series. You can add new series. - + true - + QComboBox::InsertAlphabetically - + QComboBox::AdjustToContents - - - - true - - - Series index. - - - Series index. - - + + + Book - - 1 + + 9999.989999999999782 - - 10000 + + 1.000000000000000 - - - + + + 0 0 - + 16777215 200 - + Comments - - - - + + + + 16777215 180 @@ -329,8 +321,8 @@ - - + + diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index 2c4ab859a3..4163c51583 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -177,7 +177,7 @@
- + Rating of this book. 0-5 stars @@ -309,28 +309,6 @@ - - - - false - - - Series index. - - - Series index. - - - Book - - - 0 - - - 10000 - - - @@ -357,6 +335,19 @@ + + + + false + + + Book + + + 9999.989999999999782 + + + @@ -640,7 +631,6 @@ series tag_editor_button remove_series_button - series_index isbn comments fetch_metadata_button diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index c85c4248c8..21583e8f98 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -20,7 +20,7 @@ from calibre.gui2 import NONE, TableView, qstring_to_unicode, config, \ error_dialog from calibre.utils.search_query_parser import SearchQueryParser from calibre.ebooks.metadata.meta import set_metadata as _set_metadata -from calibre.ebooks.metadata import string_to_authors +from calibre.ebooks.metadata import string_to_authors, fmt_sidx class LibraryDelegate(QItemDelegate): COLOR = QColor("blue") @@ -98,40 +98,38 @@ class DateDelegate(QStyledItemDelegate): qde.setCalendarPopup(True) return qde -class BooksModel(QAbstractTableModel): - coding = zip( - [1000,900,500,400,100,90,50,40,10,9,5,4,1], - ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"] - ) +class PubDateDelegate(QStyledItemDelegate): + def displayText(self, val, locale): + return val.toDate().toString('MMM yyyy') + + def createEditor(self, parent, option, index): + qde = QStyledItemDelegate.createEditor(self, parent, option, index) + qde.setDisplayFormat('MM yyyy') + qde.setMinimumDate(QDate(101,1,1)) + qde.setCalendarPopup(True) + return qde + + +class BooksModel(QAbstractTableModel): headers = { 'title' : _("Title"), 'authors' : _("Author(s)"), 'size' : _("Size (MB)"), 'timestamp' : _("Date"), + 'pubdate' : _('Published'), 'rating' : _('Rating'), 'publisher' : _("Publisher"), 'tags' : _("Tags"), 'series' : _("Series"), } - @classmethod - def roman(cls, num): - if num <= 0 or num >= 4000 or int(num) != num: - return str(num) - result = [] - for d, r in cls.coding: - while num >= d: - result.append(r) - num -= d - return ''.join(result) - def __init__(self, parent=None, buffer=40): QAbstractTableModel.__init__(self, parent) self.db = None self.column_map = config['column_map'] self.editable_cols = ['title', 'authors', 'rating', 'publisher', - 'tags', 'series', 'timestamp'] + 'tags', 'series', 'timestamp', 'pubdate'] self.default_image = QImage(':/images/book.svg') self.sorted_on = ('timestamp', Qt.AscendingOrder) self.last_search = '' # The last search performed on this model @@ -157,8 +155,12 @@ class BooksModel(QAbstractTableModel): tidx = self.column_map.index('timestamp') except ValueError: tidx = -1 + try: + pidx = self.column_map.index('pubdate') + except ValueError: + pidx = -1 - self.emit(SIGNAL('columns_sorted(int,int)'), idx, tidx) + self.emit(SIGNAL('columns_sorted(int,int,int)'), idx, tidx, pidx) def set_database(self, db): @@ -186,8 +188,8 @@ class BooksModel(QAbstractTableModel): self.db = None self.reset() - def add_books(self, paths, formats, metadata, uris=[], add_duplicates=False): - ret = self.db.add_books(paths, formats, metadata, uris, + def add_books(self, paths, formats, metadata, add_duplicates=False): + ret = self.db.add_books(paths, formats, metadata, add_duplicates=add_duplicates) self.count_changed() return ret @@ -313,7 +315,7 @@ class BooksModel(QAbstractTableModel): series = self.db.series(idx) if series: sidx = self.db.series_index(idx) - sidx = self.__class__.roman(sidx) if self.use_roman_numbers else str(sidx) + sidx = fmt_sidx(sidx, use_roman = self.use_roman_numbers) data[_('Series')] = _('Book %s of %s.')%(sidx, series) return data @@ -492,6 +494,7 @@ class BooksModel(QAbstractTableModel): ridx = FIELD_MAP['rating'] pidx = FIELD_MAP['publisher'] tmdx = FIELD_MAP['timestamp'] + pddx = FIELD_MAP['pubdate'] srdx = FIELD_MAP['series'] tgdx = FIELD_MAP['tags'] siix = FIELD_MAP['series_index'] @@ -508,6 +511,12 @@ class BooksModel(QAbstractTableModel): dt = dt - timedelta(seconds=time.timezone) + timedelta(hours=time.daylight) return QDate(dt.year, dt.month, dt.day) + def pubdate(r): + dt = self.db.data[r][pddx] + if dt: + dt = dt - timedelta(seconds=time.timezone) + timedelta(hours=time.daylight) + return QDate(dt.year, dt.month, dt.day) + def rating(r): r = self.db.data[r][ridx] r = r/2 if r else 0 @@ -526,8 +535,8 @@ class BooksModel(QAbstractTableModel): def series(r): series = self.db.data[r][srdx] if series: - return series + ' [%d]'%self.db.data[r][siix] - + idx = fmt_sidx(self.db.data[r][siix]) + return series + ' [%s]'%idx def size(r): size = self.db.data[r][sidx] if size: @@ -538,6 +547,7 @@ class BooksModel(QAbstractTableModel): 'authors' : authors, 'size' : size, 'timestamp': timestamp, + 'pubdate' : pubdate, 'rating' : rating, 'publisher': publisher, 'tags' : tags, @@ -577,7 +587,7 @@ class BooksModel(QAbstractTableModel): if column not in self.editable_cols: return False val = int(value.toInt()[0]) if column == 'rating' else \ - value.toDate() if column == 'timestamp' else \ + value.toDate() if column in ('timestamp', 'pubdate') else \ unicode(value.toString()) id = self.db.id(row) if column == 'rating': @@ -585,10 +595,10 @@ class BooksModel(QAbstractTableModel): val *= 2 self.db.set_rating(id, val) elif column == 'series': - pat = re.compile(r'\[(\d+)\]') + pat = re.compile(r'\[([.0-9]+)\]') match = pat.search(val) if match is not None: - self.db.set_series_index(id, int(match.group(1))) + self.db.set_series_index(id, float(match.group(1))) val = pat.sub('', val) val = val.strip() if val: @@ -598,6 +608,11 @@ class BooksModel(QAbstractTableModel): return False dt = datetime(val.year(), val.month(), val.day()) + timedelta(seconds=time.timezone) - timedelta(hours=time.daylight) self.db.set_timestamp(id, dt) + elif column == 'pubdate': + if val.isNull() or not val.isValid(): + return False + dt = datetime(val.year(), val.month(), val.day()) + timedelta(seconds=time.timezone) - timedelta(hours=time.daylight) + self.db.set_pubdate(id, dt) else: self.db.set(row, column, val) self.emit(SIGNAL("dataChanged(QModelIndex, QModelIndex)"), \ @@ -625,29 +640,35 @@ class BooksView(TableView): TableView.__init__(self, parent) self.rating_delegate = LibraryDelegate(self) self.timestamp_delegate = DateDelegate(self) + self.pubdate_delegate = PubDateDelegate(self) self.display_parent = parent self._model = modelcls(self) self.setModel(self._model) self.setSelectionBehavior(QAbstractItemView.SelectRows) self.setSortingEnabled(True) try: - self.columns_sorted(self._model.column_map.index('rating'), - self._model.column_map.index('timestamp')) + cm = self._model.column_map + self.columns_sorted(cm.index('rating') if 'rating' in cm else -1, + cm.index('timestamp') if 'timestamp' in cm else -1, + cm.index('pubdate') if 'pubdate' in cm else -1) except ValueError: pass QObject.connect(self.selectionModel(), SIGNAL('currentRowChanged(QModelIndex, QModelIndex)'), self._model.current_changed) - self.connect(self._model, SIGNAL('columns_sorted(int, int)'), self.columns_sorted, Qt.QueuedConnection) + self.connect(self._model, SIGNAL('columns_sorted(int,int,int)'), + self.columns_sorted, Qt.QueuedConnection) - def columns_sorted(self, rating_col, timestamp_col): + def columns_sorted(self, rating_col, timestamp_col, pubdate_col): for i in range(self.model().columnCount(None)): if self.itemDelegateForColumn(i) in (self.rating_delegate, - self.timestamp_delegate): + self.timestamp_delegate, self.pubdate_delegate): self.setItemDelegateForColumn(i, self.itemDelegate()) if rating_col > -1: self.setItemDelegateForColumn(rating_col, self.rating_delegate) if timestamp_col > -1: self.setItemDelegateForColumn(timestamp_col, self.timestamp_delegate) + if pubdate_col > -1: + self.setItemDelegateForColumn(pubdate_col, self.pubdate_delegate) def set_context_menu(self, edit_metadata, send_to_device, convert, view, save, open_folder, book_details, similar_menu=None): diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py index cf352c464d..7261aed7ad 100644 --- a/src/calibre/library/database.py +++ b/src/calibre/library/database.py @@ -27,7 +27,7 @@ class Concatenate(object): return self.ans[:-len(self.sep)] return self.ans class Connection(sqlite.Connection): - + def get(self, *args, **kw): ans = self.execute(*args) if not kw.get('all', True): @@ -785,8 +785,8 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; FROM books; ''') conn.execute('pragma user_version=12') - conn.commit() - + conn.commit() + def __init__(self, dbpath, row_factory=False): self.dbpath = dbpath self.conn = _connect(dbpath) @@ -901,7 +901,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; def id(self, index): return self.data[index][0] - + def row(self, id): for r, record in enumerate(self.data): if record[0] == id: @@ -916,8 +916,8 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; return _('Unknown') def authors(self, index, index_is_id=False): - ''' - Authors as a comma separated list or None. + ''' + Authors as a comma separated list or None. In the comma separated list, commas in author names are replaced by | symbols ''' if not index_is_id: @@ -939,11 +939,11 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; if index_is_id: return self.conn.get('SELECT publisher FROM meta WHERE id=?', (index,), all=False) return self.data[index][3] - + def publisher_id(self, index, index_is_id=False): id = index if index_is_id else self.id(index) return self.conn.get('SELECT publisher from books_publishers_link WHERE book=?', (id,), all=False) - + def rating(self, index, index_is_id=False): if index_is_id: return self.conn.get('SELECT rating FROM meta WHERE id=?', (index,), all=False) @@ -983,7 +983,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; def series(self, index, index_is_id=False): id = self.series_id(index, index_is_id) return self.conn.get('SELECT name from series WHERE id=?', (id,), all=False) - + def series_index(self, index, index_is_id=False): ans = None if not index_is_id: @@ -991,9 +991,9 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; else: ans = self.conn.get('SELECT series_index FROM books WHERE id=?', (index,), all=False) try: - return int(ans) + return float(ans) except: - return 1 + return 1.0 def books_in_series(self, series_id): ''' @@ -1021,7 +1021,7 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; '''Comments as string or None''' id = index if index_is_id else self.id(index) return self.conn.get('SELECT text FROM comments WHERE book=?', (id,), all=False) - + def formats(self, index, index_is_id=False): ''' Return available formats as a comma separated list ''' id = index if index_is_id else self.id(index) @@ -1041,11 +1041,11 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; def all_series(self): return [ (i[0], i[1]) for i in \ self.conn.get('SELECT id, name FROM series')] - + def all_authors(self): return [ (i[0], i[1]) for i in \ self.conn.get('SELECT id, name FROM authors')] - + def all_publishers(self): return [ (i[0], i[1]) for i in \ self.conn.get('SELECT id, name FROM publishers')] @@ -1278,9 +1278,9 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; self.set_series(id, mi.series) if mi.cover_data[1] is not None: self.set_cover(id, mi.cover_data[1]) - - - + + + def add_books(self, paths, formats, metadata, uris=[], add_duplicates=True): ''' @@ -1385,16 +1385,16 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; def all_ids(self): return [i[0] for i in self.conn.get('SELECT id FROM books')] - - + + def has_id(self, id): return self.conn.get('SELECT id FROM books where id=?', (id,), all=False) is not None - - + + class SearchToken(object): @@ -1455,4 +1455,4 @@ def text_to_tokens(text): if __name__ == '__main__': sqlite.enable_callback_tracebacks(True) - db = LibraryDatabase('/home/kovid/temp/library1.db.orig') \ No newline at end of file + db = LibraryDatabase('/home/kovid/temp/library1.db.orig') diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 1b373bf738..9803721453 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -50,7 +50,8 @@ copyfile = os.link if hasattr(os, 'link') else shutil.copyfile FIELD_MAP = {'id':0, 'title':1, 'authors':2, 'publisher':3, 'rating':4, 'timestamp':5, 'size':6, 'tags':7, 'comments':8, 'series':9, 'series_index':10, - 'sort':11, 'author_sort':12, 'formats':13, 'isbn':14, 'path':15} + 'sort':11, 'author_sort':12, 'formats':13, 'isbn':14, 'path':15, + 'lccn':16, 'pubdate':17, 'flags':18} INDEX_MAP = dict(zip(FIELD_MAP.values(), FIELD_MAP.keys())) @@ -472,6 +473,53 @@ class LibraryDatabase2(LibraryDatabase): FROM books; ''') + def upgrade_version_4(self): + 'Rationalize books table' + self.conn.executescript(''' + BEGIN TRANSACTION; + CREATE TEMPORARY TABLE + books_backup(id,title,sort,timestamp,series_index,author_sort,isbn,path); + INSERT INTO books_backup SELECT id,title,sort,timestamp,series_index,author_sort,isbn,path FROM books; + DROP TABLE books; + CREATE TABLE books ( id INTEGER PRIMARY KEY AUTOINCREMENT, + title TEXT NOT NULL DEFAULT 'Unknown' COLLATE NOCASE, + sort TEXT COLLATE NOCASE, + timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + pubdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + series_index REAL NOT NULL DEFAULT 1.0, + author_sort TEXT COLLATE NOCASE, + isbn TEXT DEFAULT "" COLLATE NOCASE, + lccn TEXT DEFAULT "" COLLATE NOCASE, + path TEXT NOT NULL DEFAULT "", + flags INTEGER NOT NULL DEFAULT 1 + ); + INSERT INTO + books (id,title,sort,timestamp,pubdate,series_index,author_sort,isbn,path) + SELECT id,title,sort,timestamp,timestamp,series_index,author_sort,isbn,path FROM books_backup; + DROP TABLE books_backup; + + DROP VIEW meta; + CREATE VIEW meta AS + SELECT id, title, + (SELECT concat(name) FROM authors WHERE authors.id IN (SELECT author from books_authors_link WHERE book=books.id)) authors, + (SELECT name FROM publishers WHERE publishers.id IN (SELECT publisher from books_publishers_link WHERE book=books.id)) publisher, + (SELECT rating FROM ratings WHERE ratings.id IN (SELECT rating from books_ratings_link WHERE book=books.id)) rating, + timestamp, + (SELECT MAX(uncompressed_size) FROM data WHERE book=books.id) size, + (SELECT concat(name) FROM tags WHERE tags.id IN (SELECT tag from books_tags_link WHERE book=books.id)) tags, + (SELECT text FROM comments WHERE book=books.id) comments, + (SELECT name FROM series WHERE series.id IN (SELECT series FROM books_series_link WHERE book=books.id)) series, + series_index, + sort, + author_sort, + (SELECT concat(format) FROM data WHERE data.book=books.id) formats, + isbn, + path, + lccn, + pubdate, + flags + FROM books; + ''') def last_modified(self): ''' Return last modified time as a UTC datetime object''' @@ -610,6 +658,16 @@ class LibraryDatabase2(LibraryDatabase): return img return f if as_file else f.read() + def timestamp(self, index, index_is_id=False): + if index_is_id: + return self.conn.get('SELECT timestamp FROM meta WHERE id=?', (index,), all=False) + return self.data[index][FIELD_MAP['timestamp']] + + def pubdate(self, index, index_is_id=False): + if index_is_id: + return self.conn.get('SELECT pubdate FROM meta WHERE id=?', (index,), all=False) + return self.data[index][FIELD_MAP['pubdate']] + def get_metadata(self, idx, index_is_id=False, get_cover=False): ''' Convenience method to return metadata as a L{MetaInformation} object. @@ -621,6 +679,7 @@ class LibraryDatabase2(LibraryDatabase): mi.comments = self.comments(idx, index_is_id=index_is_id) mi.publisher = self.publisher(idx, index_is_id=index_is_id) mi.timestamp = self.timestamp(idx, index_is_id=index_is_id) + mi.pubdate = self.pubdate(idx, index_is_id=index_is_id) tags = self.tags(idx, index_is_id=index_is_id) if tags: mi.tags = [i.strip() for i in tags.split(',')] @@ -917,7 +976,7 @@ class LibraryDatabase2(LibraryDatabase): self.set_comment(id, mi.comments, notify=False) if mi.isbn and mi.isbn.strip(): self.set_isbn(id, mi.isbn, notify=False) - if mi.series_index and mi.series_index > 0: + if mi.series_index: self.set_series_index(id, mi.series_index, notify=False) if getattr(mi, 'timestamp', None) is not None: self.set_timestamp(id, mi.timestamp, notify=False) @@ -983,6 +1042,15 @@ class LibraryDatabase2(LibraryDatabase): if notify: self.notify('metadata', [id]) + def set_pubdate(self, id, dt, notify=True): + if dt: + self.conn.execute('UPDATE books SET pubdate=? WHERE id=?', (dt, id)) + self.data.set(id, FIELD_MAP['pubdate'], dt, row_is_id=True) + self.conn.commit() + if notify: + self.notify('metadata', [id]) + + def set_publisher(self, id, publisher, notify=True): self.conn.execute('DELETE FROM books_publishers_link WHERE book=?',(id,)) self.conn.execute('DELETE FROM publishers WHERE (SELECT COUNT(id) FROM books_publishers_link WHERE publisher=publishers.id) < 1') @@ -1103,17 +1171,11 @@ class LibraryDatabase2(LibraryDatabase): def set_series_index(self, id, idx, notify=True): if idx is None: - idx = 1 - idx = int(idx) - self.conn.execute('UPDATE books SET series_index=? WHERE id=?', (int(idx), id)) + idx = 1.0 + idx = float(idx) + self.conn.execute('UPDATE books SET series_index=? WHERE id=?', (idx, id)) self.conn.commit() - try: - row = self.row(id) - if row is not None: - self.data.set(row, 10, idx) - except ValueError: - pass - self.data.set(id, FIELD_MAP['series_index'], int(idx), row_is_id=True) + self.data.set(id, FIELD_MAP['series_index'], idx, row_is_id=True) if notify: self.notify('metadata', [id]) @@ -1156,7 +1218,7 @@ class LibraryDatabase2(LibraryDatabase): stream.seek(0) mi = get_metadata(stream, format, use_libprs_metadata=False) stream.seek(0) - mi.series_index = 1 + mi.series_index = 1.0 mi.tags = [_('News'), recipe.title] obj = self.conn.execute('INSERT INTO books(title, author_sort) VALUES (?, ?)', (mi.title, mi.authors[0])) @@ -1188,7 +1250,7 @@ class LibraryDatabase2(LibraryDatabase): def create_book_entry(self, mi, cover=None, add_duplicates=True): if not add_duplicates and self.has_book(mi): return None - series_index = 1 if mi.series_index is None else mi.series_index + series_index = 1.0 if mi.series_index is None else mi.series_index aus = mi.author_sort if mi.author_sort else ', '.join(mi.authors) title = mi.title if isinstance(aus, str): @@ -1207,33 +1269,29 @@ class LibraryDatabase2(LibraryDatabase): return id - def add_books(self, paths, formats, metadata, uris=[], add_duplicates=True): + def add_books(self, paths, formats, metadata, add_duplicates=True): ''' Add a book to the database. The result cache is not updated. :param:`paths` List of paths to book files or file-like objects ''' - formats, metadata, uris = iter(formats), iter(metadata), iter(uris) + formats, metadata = iter(formats), iter(metadata) duplicates = [] ids = [] for path in paths: mi = metadata.next() format = formats.next() - try: - uri = uris.next() - except StopIteration: - uri = None if not add_duplicates and self.has_book(mi): - duplicates.append((path, format, mi, uri)) + duplicates.append((path, format, mi)) continue - series_index = 1 if mi.series_index is None else mi.series_index + series_index = 1.0 if mi.series_index is None else mi.series_index aus = mi.author_sort if mi.author_sort else ', '.join(mi.authors) title = mi.title if isinstance(aus, str): aus = aus.decode(preferred_encoding, 'replace') if isinstance(title, str): title = title.decode(preferred_encoding) - obj = self.conn.execute('INSERT INTO books(title, uri, series_index, author_sort) VALUES (?, ?, ?, ?)', - (title, uri, series_index, aus)) + obj = self.conn.execute('INSERT INTO books(title, series_index, author_sort) VALUES (?, ?, ?)', + (title, series_index, aus)) id = obj.lastrowid self.data.books_added([id], self.conn) ids.append(id) @@ -1251,12 +1309,11 @@ class LibraryDatabase2(LibraryDatabase): paths = list(duplicate[0] for duplicate in duplicates) formats = list(duplicate[1] for duplicate in duplicates) metadata = list(duplicate[2] for duplicate in duplicates) - uris = list(duplicate[3] for duplicate in duplicates) - return (paths, formats, metadata, uris), len(ids) + return (paths, formats, metadata), len(ids) return None, len(ids) def import_book(self, mi, formats, notify=True): - series_index = 1 if mi.series_index is None else mi.series_index + series_index = 1.0 if mi.series_index is None else mi.series_index if not mi.title: mi.title = _('Unknown') if not mi.authors: @@ -1266,8 +1323,8 @@ class LibraryDatabase2(LibraryDatabase): aus = aus.decode(preferred_encoding, 'replace') title = mi.title if isinstance(mi.title, unicode) else \ mi.title.decode(preferred_encoding, 'replace') - obj = self.conn.execute('INSERT INTO books(title, uri, series_index, author_sort) VALUES (?, ?, ?, ?)', - (title, None, series_index, aus)) + obj = self.conn.execute('INSERT INTO books(title, series_index, author_sort) VALUES (?, ?, ?)', + (title, series_index, aus)) id = obj.lastrowid self.data.books_added([id], self.conn) self.set_path(id, True) @@ -1368,12 +1425,12 @@ class LibraryDatabase2(LibraryDatabase): QCoreApplication.processEvents() db.conn.row_factory = lambda cursor, row : tuple(row) db.conn.text_factory = lambda x : unicode(x, 'utf-8', 'replace') - books = db.conn.get('SELECT id, title, sort, timestamp, uri, series_index, author_sort, isbn FROM books ORDER BY id ASC') + books = db.conn.get('SELECT id, title, sort, timestamp, series_index, author_sort, isbn FROM books ORDER BY id ASC') progress.setAutoReset(False) progress.setRange(0, len(books)) for book in books: - self.conn.execute('INSERT INTO books(id, title, sort, timestamp, uri, series_index, author_sort, isbn) VALUES(?, ?, ?, ?, ?, ?, ?, ?);', book) + self.conn.execute('INSERT INTO books(id, title, sort, timestamp, series_index, author_sort, isbn) VALUES(?, ?, ?, ?, ?, ?, ?, ?);', book) tables = ''' authors ratings tags series books_tags_link diff --git a/src/calibre/library/server.py b/src/calibre/library/server.py index 26788bcf6d..3a4b0131cf 100644 --- a/src/calibre/library/server.py +++ b/src/calibre/library/server.py @@ -25,6 +25,7 @@ from calibre.library.database2 import LibraryDatabase2, FIELD_MAP from calibre.utils.config import config_dir from calibre.utils.mdns import publish as publish_zeroconf, \ stop_server as stop_zeroconf +from calibre.ebooks.metadata import fmt_sidx build_time = datetime.strptime(build_time, '%d %m %Y %H%M%S') server_resources['jquery.js'] = jquery @@ -271,7 +272,7 @@ class LibraryServer(object): @expose def stanza(self): - ' Feeds to read calibre books on a ipod with stanza.' + 'Feeds to read calibre books on a ipod with stanza.' books = [] for record in iter(self.db): r = record[FIELD_MAP['formats']] @@ -289,8 +290,8 @@ class LibraryServer(object): extra.append('TAGS: %s
'%', '.join(tags.split(','))) series = record[FIELD_MAP['series']] if series: - extra.append('SERIES: %s [%d]
'%(series, - record[FIELD_MAP['series_index']])) + extra.append('SERIES: %s [%s]
'%(series, + fmt_sidx(record[FIELD_MAP['series_index']]))) fmt = 'epub' if 'EPUB' in r else 'pdb' mimetype = guess_type('dummy.'+fmt)[0] books.append(self.STANZA_ENTRY.generate( @@ -339,6 +340,7 @@ class LibraryServer(object): for record in items[start:start+num]: aus = record[2] if record[2] else __builtins__._('Unknown') authors = '|'.join([i.replace('|', ',') for i in aus.split(',')]) + r[10] = fmt_sidx(r[10]) books.append(book.generate(r=record, authors=authors).render('xml').decode('utf-8')) updated = self.db.last_modified() diff --git a/todo b/todo index bff97ad7e8..9b2a90f0b2 100644 --- a/todo +++ b/todo @@ -2,6 +2,7 @@ * Refactor web.fetch.simple to use per connection timeouts via the timeout kwarg for mechanize.open * Rationalize books table. Add a pubdate column, remove the uri column (and associated support in add_books) and convert series_index to a float. + - test adding/recusrsize adding and adding of duplicates * Testing framework From f91c1e0cc4b3f5380ea604583e69d4be13463421 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 31 May 2009 08:38:20 -0700 Subject: [PATCH 16/22] IGN:Misc bug fixes --- src/calibre/library/database2.py | 2 ++ src/calibre/web/feeds/recipes/__init__.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index d26686e412..d138d567c7 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1335,6 +1335,8 @@ class LibraryDatabase2(LibraryDatabase): data.append(x) x['id'] = record[FIELD_MAP['id']] x['formats'] = [] + if not x['authors']: + x['authors'] = _('Unknown') x['authors'] = [i.replace('|', ',') for i in x['authors'].split(',')] if authors_as_string: x['authors'] = authors_to_string(x['authors']) diff --git a/src/calibre/web/feeds/recipes/__init__.py b/src/calibre/web/feeds/recipes/__init__.py index 968ed9a6f0..ae3db02a5a 100644 --- a/src/calibre/web/feeds/recipes/__init__.py +++ b/src/calibre/web/feeds/recipes/__init__.py @@ -44,7 +44,7 @@ recipe_modules = ['recipe_' + r for r in ( 'stackoverflow', 'telepolis_artikel', 'zaobao', 'usnews', 'straitstimes', 'index_hu', 'pcworld_hu', 'hrt', 'rts', 'h1', 'h2', 'h3', 'phd_comics', 'woz_die', 'elektrolese', - 'climate_progress', 'carta', + 'climate_progress', 'carta', 'slashdot', )] import re, imp, inspect, time, os From f4ab41dc6e474fc524689389e4df7f8bed54521d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 31 May 2009 08:38:58 -0700 Subject: [PATCH 17/22] Generate FLIC, FCIS and EOF records in MOBI output --- src/calibre/ebooks/mobi/writer.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index ba0ca6ead7..c525f27937 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -650,9 +650,22 @@ class MobiWriter(object): if self._first_image_record is None: self._first_image_record = len(self._records)-1 + def _generate_end_records(self): + self._flis_number = len(self._records) + self._records.append( + 'FLIS\0\0\0\x08\0\x41\0\0\0\0\0\0\xff\xff\xff\xff\0\x01\0\x03\0\0\0\x03\0\0\0\x01') + fcis = 'FCIS\x00\x00\x00\x14\x00\x00\x00\x10\x00\x00\x00\x00' + fcis += pack('>I', self._text_length) + fcis += '\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x08\x00\x01\x00\x01\x00\x00\x00\x00' + self._fcis_number = len(self._records) + self._records.append(fcis) + self._records.append('\xE9\x8E\x0D\x0A') + def _generate_record0(self): metadata = self._oeb.metadata exth = self._build_exth() + last_content_record = len(self._records) - 1 + self._generate_end_records() record0 = StringIO() # The PalmDOC Header record0.write(pack('>HHIHHHH', self._compression, 0, @@ -735,22 +748,22 @@ class MobiWriter(object): # 0xb0 - 0xb1 : First content record number # 0xb2 - 0xb3 : last content record number # (Includes Image, DATP, HUFF, DRM) - record0.write(pack('>HH', 1, len(self._records)-1)) + record0.write(pack('>HH', 1, last_content_record)) # 0xb4 - 0xb7 : Unknown record0.write('\0\0\0\x01') # 0xb8 - 0xbb : FCIS record number - record0.write(pack('>I', 0xffffffff)) + record0.write(pack('>I', self._fcis_number)) # 0xbc - 0xbf : Unknown (FCIS record count?) - record0.write(pack('>I', 0)) + record0.write(pack('>I', 1)) # 0xc0 - 0xc3 : FLIS record number - record0.write(pack('>I', 0xffffffff)) + record0.write(pack('>I', self._flis_number)) # 0xc4 - 0xc7 : Unknown (FLIS record count?) - record0.write(pack('>I', 0)) + record0.write(pack('>I', 1)) # 0xc8 - 0xcf : Unknown record0.write('\0'*8) From a52242cecb58c21cf810ce0f261e185788b1dc4a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 31 May 2009 09:34:27 -0700 Subject: [PATCH 18/22] Use PoDoFo in pdfmanipulate info --- src/calibre/ebooks/pdf/manipulate/info.py | 56 ++++++++++------------- src/calibre/utils/podofo/podofo.cpp | 38 +++++++++++++++ 2 files changed, 63 insertions(+), 31 deletions(-) diff --git a/src/calibre/ebooks/pdf/manipulate/info.py b/src/calibre/ebooks/pdf/manipulate/info.py index 13a39d10f6..0cb4f69172 100644 --- a/src/calibre/ebooks/pdf/manipulate/info.py +++ b/src/calibre/ebooks/pdf/manipulate/info.py @@ -9,16 +9,14 @@ __docformat__ = 'restructuredtext en' Merge PDF files into a single PDF document. ''' -import os, re, sys, time -from optparse import OptionGroup, Option +import os, sys from calibre.utils.config import OptionParser from calibre.utils.logging import Log from calibre.constants import preferred_encoding -from calibre.customize.conversion import OptionRecommendation -from calibre.ebooks.pdf.verify import is_valid_pdfs, is_encrypted, is_encrypted - -from pyPdf import PdfFileWriter, PdfFileReader +from calibre.ebooks.pdf.verify import is_valid_pdfs, is_encrypted +from calibre import prints +from calibre.utils.podofo import podofo, podofo_err USAGE = '\n%prog %%name ' + _('''\ file.pdf ... @@ -35,40 +33,36 @@ def option_parser(name): return OptionParser(usage=usage) def print_info(pdf_path): - with open(os.path.abspath(pdf_path), 'rb') as pdf_file: - pdf = PdfFileReader(pdf_file) - print _('Title: %s' % pdf.documentInfo.title) - print _('Author: %s' % pdf.documentInfo.author) - print _('Subject: %s' % pdf.documentInfo.subject) - print _('Creator: %s' % pdf.documentInfo.creator) - print _('Producer: %s' % pdf.documentInfo.producer) - #print _('Creation Date: %s' % time.strftime('%a %b %d %H:%M:%S %Y', time.gmtime(os.path.getctime(pdf_path)))) - #print _('Modification Date: %s' % time.strftime('%a %b %d %H:%M:%S %Y', time.gmtime(os.path.getmtime(pdf_path)))) - print _('Pages: %s' % pdf.numPages) - #print _('Encrypted: %s' % pdf.isEncrypted) - try: - print _('File Size: %s bytes' % os.path.getsize(pdf_path)) - except: pass - try: - pdf_file.seek(0) - vline = pdf_file.readline() - mo = re.search('(?iu)^%...-(?P\d+\.\d+)', vline) - if mo != None: - print _('PDF Version: %s' % mo.group('version')) - except: pass + if not podofo: + raise RuntimeError('Failed to load PoDoFo with error:'+podofo_err) + p = podofo.PDFDoc() + p.open(pdf_path) + + fmt = lambda x, y: '%-20s: %s'%(x, y) + + print + + prints(fmt(_('Title'), p.title)) + prints(fmt(_('Author'), p.author)) + prints(fmt(_('Subject'), p.subject)) + prints(fmt(_('Creator'), p.creator)) + prints(fmt(_('Producer'), p.producer)) + prints(fmt(_('Pages'), p.pages)) + prints(fmt(_('File Size'), os.stat(pdf_path).st_size)) + prints(fmt(_('PDF Version'), p.version if p.version else _('Unknown'))) def main(args=sys.argv, name=''): log = Log() parser = option_parser(name) - + opts, args = parser.parse_args(args) args = args[1:] - + if len(args) < 1: print 'Error: No PDF sepecified.\n' print_help(parser, log) return 1 - + bad_pdfs = is_valid_pdfs(args) if bad_pdfs != []: for pdf in bad_pdfs: @@ -85,7 +79,7 @@ def main(args=sys.argv, name=''): for pdf in args: print_info(pdf) - + return 0 if __name__ == '__main__': diff --git a/src/calibre/utils/podofo/podofo.cpp b/src/calibre/utils/podofo/podofo.cpp index e9c7bb4346..e64faa53e2 100644 --- a/src/calibre/utils/podofo/podofo.cpp +++ b/src/calibre/utils/podofo/podofo.cpp @@ -108,6 +108,40 @@ podofo_PDFDoc_pages_getter(podofo_PDFDoc *self, void *closure) { return ans; } +static PyObject * +podofo_PDFDoc_version_getter(podofo_PDFDoc *self, void *closure) { + int version; + try { + version = self->doc->GetPdfVersion(); + } catch(const PdfError & err) { + podofo_set_exception(err); + return NULL; + } + switch(version) { + case ePdfVersion_1_0: + return Py_BuildValue("s", "1.0"); + case ePdfVersion_1_1: + return Py_BuildValue("s", "1.1"); + case ePdfVersion_1_2: + return Py_BuildValue("s", "1.2"); + case ePdfVersion_1_3: + return Py_BuildValue("s", "1.3"); + case ePdfVersion_1_4: + return Py_BuildValue("s", "1.4"); + case ePdfVersion_1_5: + return Py_BuildValue("s", "1.5"); + case ePdfVersion_1_6: + return Py_BuildValue("s", "1.6"); + case ePdfVersion_1_7: + return Py_BuildValue("s", "1.7"); + default: + return Py_BuildValue(""); + } + return Py_BuildValue(""); +} + + + static PyObject * podofo_PDFDoc_delete_pages(podofo_PDFDoc *self, PyObject *args, PyObject *kwargs) { int first_page, num_pages; @@ -315,6 +349,10 @@ static PyGetSetDef podofo_PDFDoc_getsetters[] = { (getter)podofo_PDFDoc_pages_getter, NULL, (char *)"Number of pages in document (read only)", NULL}, + {(char *)"version", + (getter)podofo_PDFDoc_version_getter, NULL, + (char *)"The PDF version (read only)", + NULL}, {NULL} /* Sentinel */ }; From c3e5c50f98fb1f630c00cdc0b7239191cc2db318 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 31 May 2009 09:37:12 -0700 Subject: [PATCH 19/22] Updated translatable strings --- src/calibre/ebooks/pdb/output.py | 18 +- src/calibre/ebooks/pdf/manipulate/cli.py | 11 +- src/calibre/ebooks/pdf/manipulate/crop.py | 36 +- src/calibre/ebooks/pdf/output.py | 6 +- src/calibre/ebooks/txt/output.py | 8 +- src/calibre/gui2/tools.py | 6 +- src/calibre/translations/calibre.pot | 5310 +++++++++++---------- 7 files changed, 2956 insertions(+), 2439 deletions(-) diff --git a/src/calibre/ebooks/pdb/output.py b/src/calibre/ebooks/pdb/output.py index 29de9bd99c..fb6984e1e2 100644 --- a/src/calibre/ebooks/pdb/output.py +++ b/src/calibre/ebooks/pdb/output.py @@ -15,13 +15,13 @@ class PDBOutput(OutputFormatPlugin): name = 'PDB Output' author = 'John Schember' file_type = 'pdb' - + options = set([ OptionRecommendation(name='format', recommended_value='doc', level=OptionRecommendation.LOW, short_switch='f', choices=FORMAT_WRITERS.keys(), - help=_('Format to use inside the pdb container. Choices are: ' - '%s' % FORMAT_WRITERS.keys())), + help=(_('Format to use inside the pdb container. Choices are:')+\ + ' %s' % FORMAT_WRITERS.keys())), ]) def convert(self, oeb_book, output_path, input_plugin, opts, log): @@ -33,19 +33,19 @@ class PDBOutput(OutputFormatPlugin): out_stream = open(output_path, 'wb') else: out_stream = output_path - + Writer = get_writer(opts.format) - + if Writer is None: raise PDBError('No writer avaliable for format %s.' % format) - + writer = Writer(opts, log) - + out_stream.seek(0) out_stream.truncate() - + writer.write_content(oeb_book, out_stream, oeb_book.metadata) if close: out_stream.close() - + diff --git a/src/calibre/ebooks/pdf/manipulate/cli.py b/src/calibre/ebooks/pdf/manipulate/cli.py index 4876cbd8f5..c6e52f85d3 100644 --- a/src/calibre/ebooks/pdf/manipulate/cli.py +++ b/src/calibre/ebooks/pdf/manipulate/cli.py @@ -14,7 +14,6 @@ import string, sys from calibre.utils.config import OptionParser from calibre.utils.logging import Log from calibre.constants import preferred_encoding -from calibre.customize.conversion import OptionRecommendation from calibre.ebooks.pdf.manipulate import crop, decrypt, encrypt, \ info, merge, reverse, rotate, split @@ -30,14 +29,14 @@ COMMANDS = { } USAGE = '%prog ' + _('''command ... - + command can be one of the following: [%%commands] Use %prog command --help to get more information about a specific command Manipulate a PDF. -'''.replace('%%commands', string.join(sorted(COMMANDS.keys()), ', '))) +''').replace('%%commands', string.join(sorted(COMMANDS.keys()), ', ')) def print_help(parser, log): help = parser.format_help().encode(preferred_encoding, 'replace') @@ -54,9 +53,9 @@ def main(args=sys.argv): print 'Error: No command sepecified.\n' print_help(parser, log) return 1 - + command = args[1].lower().strip() - + if command in COMMANDS.keys(): del args[1] return COMMANDS[command].main(args, command) @@ -65,7 +64,7 @@ def main(args=sys.argv): print 'Unknown command %s.\n' % command print_help(parser, log) return 1 - + # We should never get here. return 0 diff --git a/src/calibre/ebooks/pdf/manipulate/crop.py b/src/calibre/ebooks/pdf/manipulate/crop.py index 0f24f04638..c35d4615a4 100644 --- a/src/calibre/ebooks/pdf/manipulate/crop.py +++ b/src/calibre/ebooks/pdf/manipulate/crop.py @@ -10,7 +10,7 @@ __docformat__ = 'restructuredtext en' Crop a pdf file ''' -import os, sys, re +import sys, re from optparse import OptionGroup, Option from calibre.ebooks.metadata.meta import metadata_from_formats @@ -37,16 +37,16 @@ OPTIONS = set([ help=_('Path to output file. By default a file is created in the current directory.')), OptionRecommendation(name='bottom_left_x', recommended_value=DEFAULT_CROP, level=OptionRecommendation.LOW, long_switch='leftx', short_switch='x', - help=_('Number of pixels to crop from the left most x (default is %s) ' % DEFAULT_CROP)), + help=_('Number of pixels to crop from the left most x (default is %s)') % DEFAULT_CROP), OptionRecommendation(name='bottom_left_y', recommended_value=DEFAULT_CROP, level=OptionRecommendation.LOW, long_switch='lefty', short_switch='y', - help=_('Number of pixels to crop from the left most y (default is %s) ' % DEFAULT_CROP)), + help=_('Number of pixels to crop from the left most y (default is %s)') % DEFAULT_CROP), OptionRecommendation(name='top_right_x', recommended_value=DEFAULT_CROP, level=OptionRecommendation.LOW, long_switch='rightx', short_switch='v', - help=_('Number of pixels to crop from the right most x (default is %s) ' % DEFAULT_CROP)), + help=_('Number of pixels to crop from the right most x (default is %s)') % DEFAULT_CROP), OptionRecommendation(name='top_right_y', recommended_value=DEFAULT_CROP, level=OptionRecommendation.LOW, long_switch='right y', short_switch='w', - help=_('Number of pixels to crop from the right most y (default is %s)' % DEFAULT_CROP)), + help=_('Number of pixels to crop from the right most y (default is %s)') % DEFAULT_CROP), OptionRecommendation(name='bounding', recommended_value=None, level=OptionRecommendation.LOW, long_switch='bounding', short_switch='b', help=_('A file generated by ghostscript which allows each page to be individually cropped `gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox file.pdf 2> bounding`')), @@ -72,7 +72,7 @@ def add_options(parser): group = OptionGroup(parser, _('Crop Options:'), _('Options to control the transformation of pdf')) parser.add_option_group(group) add_option = group.add_option - + for rec in OPTIONS: option_recommendation_to_cli_option(add_option, rec) @@ -85,7 +85,7 @@ def crop_pdf(pdf_path, opts, metadata=None): author = authors_to_string(metadata.authors) input_pdf = PdfFileReader(open(pdf_path, 'rb')) - + bounding_lines = [] if opts.bounding != None: try: @@ -93,14 +93,14 @@ def crop_pdf(pdf_path, opts, metadata=None): bounding_regex = re.compile('%%BoundingBox: (?P\d+) (?P\d+) (?P\d+) (?P\d+)') except: raise Exception('Error reading %s' % opts.bounding) - + lines = bounding.readlines() for line in lines: if line.startswith('%%BoundingBox:'): bounding_lines.append(line) if len(bounding_lines) != input_pdf.numPages: - raise Exception('Error bounding file %s page count does not correspond to specified pdf' % opts.bounding) - + raise Exception('Error bounding file %s page count does not correspond to specified pdf' % opts.bounding) + output_pdf = PdfFileWriter(title=title,author=author) blines = iter(bounding_lines) for page in input_pdf.pages: @@ -114,33 +114,33 @@ def crop_pdf(pdf_path, opts, metadata=None): page.mediaBox.upperRight = (page.bleedBox.getUpperRight_x() - opts.top_right_x, page.bleedBox.getUpperRight_y() - opts.top_right_y) page.mediaBox.lowerLeft = (page.bleedBox.getLowerLeft_x() + opts.bottom_left_x, page.bleedBox.getLowerLeft_y() + opts.bottom_left_y) output_pdf.addPage(page) - + with open(opts.output, 'wb') as output_file: output_pdf.write(output_file) - + def main(args=sys.argv, name=''): log = Log() parser = option_parser(name) add_options(parser) - + opts, args = parser.parse_args(args) args = args[1:] - + if len(args) < 1: print 'Error: A PDF file is required.\n' print_help(parser, log) return 1 - + if not is_valid_pdf(args[0]): print 'Error: Could not read file `%s`.' % args[0] return 1 - + if is_encrypted(args[0]): print 'Error: file `%s` is encrypted.' % args[0] return 1 - + mi = metadata_from_formats([args[0]]) - + crop_pdf(args[0], opts, mi) return 0 diff --git a/src/calibre/ebooks/pdf/output.py b/src/calibre/ebooks/pdf/output.py index bed5342bb4..a20f503c57 100644 --- a/src/calibre/ebooks/pdf/output.py +++ b/src/calibre/ebooks/pdf/output.py @@ -32,12 +32,12 @@ class PDFOutput(OutputFormatPlugin): level=OptionRecommendation.LOW, short_switch='u', choices=UNITS.keys(), help=_('The unit of measure. Default is inch. Choices ' 'are %s ' - 'Note: This does not override the unit for margins!' % UNITS.keys())), + 'Note: This does not override the unit for margins!') % UNITS.keys()), OptionRecommendation(name='paper_size', recommended_value='letter', level=OptionRecommendation.LOW, choices=PAPER_SIZES.keys(), help=_('The size of the paper. This size will be overridden when an ' 'output profile is used. Default is letter. Choices ' - 'are %s' % PAPER_SIZES.keys())), + 'are %s') % PAPER_SIZES.keys()), OptionRecommendation(name='custom_size', recommended_value=None, help=_('Custom size of the document. Use the form widthxheight ' 'EG. `123x321` to specify the width and height. ' @@ -45,7 +45,7 @@ class PDFOutput(OutputFormatPlugin): OptionRecommendation(name='orientation', recommended_value='portrait', level=OptionRecommendation.LOW, choices=ORIENTATIONS.keys(), help=_('The orientation of the page. Default is portrait. Choices ' - 'are %s' % ORIENTATIONS.keys())), + 'are %s') % ORIENTATIONS.keys()), ]) def convert(self, oeb_book, output_path, input_plugin, opts, log): diff --git a/src/calibre/ebooks/txt/output.py b/src/calibre/ebooks/txt/output.py index 6afc5452b2..64835c3c52 100644 --- a/src/calibre/ebooks/txt/output.py +++ b/src/calibre/ebooks/txt/output.py @@ -23,7 +23,7 @@ class TXTOutput(OutputFormatPlugin): help=_('Type of newline to use. Options are %s. Default is \'system\'. ' 'Use \'old_mac\' for compatibility with Mac OS 9 and earlier. ' 'For Mac OS X use \'unix\'. \'system\' will default to the newline ' - 'type used by this OS.' % sorted(TxtNewlines.NEWLINE_TYPES.keys()))), + 'type used by this OS.') % sorted(TxtNewlines.NEWLINE_TYPES.keys())), ]) def convert(self, oeb_book, output_path, input_plugin, opts, log): @@ -38,11 +38,11 @@ class TXTOutput(OutputFormatPlugin): out_stream = open(output_path, 'wb') else: out_stream = output_path - + out_stream.seek(0) out_stream.truncate() out_stream.write(txt.encode('utf-8')) - + if close: out_stream.close() - + diff --git a/src/calibre/gui2/tools.py b/src/calibre/gui2/tools.py index 711c10943b..5610dd0ecf 100644 --- a/src/calibre/gui2/tools.py +++ b/src/calibre/gui2/tools.py @@ -68,7 +68,8 @@ def convert_single_ebook(parent, db, book_ids, auto_conversion=False, out_format msg = '%s' % '\n'.join(res) warning_dialog(parent, _('Could not convert some books'), - _('Could not convert %d of %d books, because no suitable source format was found.' % (len(res), total)), + _('Could not convert %d of %d books, because no suitable source' + ' format was found.') % (len(res), total), msg).exec_() return jobs, changed, bad @@ -122,7 +123,8 @@ def convert_bulk_ebook(parent, db, book_ids, out_format=None): msg = '%s' % '\n'.join(res) warning_dialog(parent, _('Could not convert some books'), - _('Could not convert %d of %d books, because no suitable source format was found.' % (len(res), total)), + _('Could not convert %d of %d books, because no suitable ' + 'source format was found.') % (len(res), total), msg).exec_() return jobs, changed, bad diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index a9520203c7..26ebc84299 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.5.14\n" -"POT-Creation-Date: 2009-05-29 09:39+PDT\n" -"PO-Revision-Date: 2009-05-29 09:39+PDT\n" +"POT-Creation-Date: 2009-05-31 09:36+PDT\n" +"PO-Revision-Date: 2009-05-31 09:36+PDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -20,91 +20,111 @@ msgid "Does absolutely nothing" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:98 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:50 +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:68 +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:69 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:116 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:58 #: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:196 -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_any.py:71 -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1055 -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1071 -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1073 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:79 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:81 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:83 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:296 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:62 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:96 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:98 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:100 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:102 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:83 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:179 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:70 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:199 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:232 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:271 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:301 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:53 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:55 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:95 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:97 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:152 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:863 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:38 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:164 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:145 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:146 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:404 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:50 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:220 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:250 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:253 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:448 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:866 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:58 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:37 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:61 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:140 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:662 -#: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:576 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:581 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1157 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1160 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:53 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:54 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:186 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:193 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:458 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:43 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:69 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:520 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:704 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:44 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:791 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:796 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:162 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:165 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:96 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:81 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:81 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:19 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:514 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:738 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:741 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:173 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:134 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:33 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:34 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:39 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:122 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:364 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:377 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:932 #: /home/kovid/work/calibre/src/calibre/library/cli.py:264 #: /home/kovid/work/calibre/src/calibre/library/database.py:916 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:500 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:512 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:897 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:932 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1241 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1421 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1495 -#: /home/kovid/work/calibre/src/calibre/library/server.py:340 -#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:28 -#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:31 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:50 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:548 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:560 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:956 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:991 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1318 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1320 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1404 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1488 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1511 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1562 +#: /home/kovid/work/calibre/src/calibre/library/server.py:341 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:74 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:51 msgid "Unknown" msgstr "" @@ -124,72 +144,148 @@ msgstr "" msgid "Metadata writer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:12 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:13 msgid "Follow all local links in an HTML file and create a ZIP file containing all linked files. This plugin is run every time you add an HTML file to the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:32 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:43 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:64 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:74 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:84 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:105 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:126 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:136 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167 -msgid "Read metadata from %s files" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:177 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:48 msgid "Extract cover from comic files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:197 -msgid "Read metadata from ebooks in ZIP archives" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:69 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:79 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:99 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:110 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:120 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:130 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:140 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:150 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:160 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:171 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:182 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:202 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:213 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:223 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:233 +msgid "Read metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:207 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:192 msgid "Read metadata from ebooks in RAR archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:218 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:228 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:238 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:248 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:244 +msgid "Read metadata from ebooks in ZIP archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:255 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:265 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:297 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:308 msgid "Set metadata in %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:28 -msgid "Installed plugins" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:286 +msgid "Set metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 -msgid "Mapping for filetype plugins" +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:99 +msgid "Conversion Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:118 +msgid "Save the output from the input plugin to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring. WARNING: This completely deletes the contents of the specified directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:127 +msgid "Specify the character encoding of the input document. If set this option will override any encoding declared by the document itself. Particularly useful for documents that do not declare an encoding or that have erroneous encoding declarations." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:241 +msgid "Conversion Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:255 +msgid "If specified, the output plugin will try to create output that is as human readable as possible. May not have any effect for some output plugins." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:44 +msgid "Input profile" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:48 +msgid "This profile tries to provide sane defaults and is useful if you know nothing about the input document." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:56 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:154 +msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:69 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:178 +msgid "This profile is intended for the Microsoft Reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:189 +msgid "This profile is intended for the Mobipocket books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:93 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:202 +msgid "This profile is intended for the Hanlin V3 and its clones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:105 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:214 +msgid "This profile is intended for the Cybook G3." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:117 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:226 +msgid "This profile is intended for the Amazon Kindle." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:135 +msgid "Output profile" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:139 +msgid "This profile tries to provide sane defaults and is useful if you want to produce a document intended to be read at a computer or on a range of devices." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:166 +msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc, in landscape mode. Mainly useful for comics." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/ui.py:30 -msgid "Local plugin customization" +msgid "Installed plugins" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 +msgid "Mapping for filetype plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32 +msgid "Local plugin customization" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33 msgid "Disabled plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:73 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:75 msgid "No valid plugin found in " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:192 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:215 msgid "Initialization of plugin %s failed with traceback:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:269 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:333 msgid "" " %prog options\n" "\n" @@ -197,740 +293,572 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:339 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:277 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:341 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:279 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:343 msgid "Customize plugin. Specify name of plugin and customization string separated by a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:281 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:345 msgid "List all installed plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:283 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:347 msgid "Enable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:285 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:349 msgid "Disable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:41 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:394 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:72 -msgid "The reader has no storage card connected." +#: /home/kovid/work/calibre/src/calibre/devices/bebook/driver.py:11 +msgid "Communicate with the BeBook eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:60 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:91 -msgid "There is insufficient free space on the storage card" +#: /home/kovid/work/calibre/src/calibre/devices/bebook/driver.py:12 +msgid "Tijmen Ruizendaal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:62 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:93 +#: /home/kovid/work/calibre/src/calibre/devices/bebook/driver.py:49 +msgid "Communicate with the BeBook Mini eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12 +msgid "Communicate with the Blackberry smart phone." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:19 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:12 +msgid "Kovid Goyal" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:16 +msgid "Communicate with the Cybook eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:14 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:71 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:26 +msgid "John Schember" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:58 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:62 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:152 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:467 +#: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:900 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:904 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1222 +msgid "News" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:97 +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:99 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:97 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:99 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:178 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:180 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:165 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:167 +msgid "Transferring books to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:105 +#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:125 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:43 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:52 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:199 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:202 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:186 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:195 +msgid "Removing books from device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:18 +msgid "Communicate with the EB600 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20 +msgid "Device Interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:15 +msgid "Communicate with the JetBook eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:16 +msgid "James Ralston" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:13 +msgid "Communicate with the Kindle eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:70 +msgid "Communicate with the Kindle 2 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:87 +msgid "Communicate with the Sony PRS-500 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:83 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:86 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:89 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:68 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:74 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:78 +msgid "Getting list of books on device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:19 +msgid "Communicate with the Sony PRS-505 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:20 +#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:14 +msgid "Kovid Goyal and John Schember" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:41 +msgid "Get device information..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:106 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:108 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:84 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:86 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:88 +msgid "The reader has no storage card in this slot." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:131 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:109 msgid "There is insufficient free space in main memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:140 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:168 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:196 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:204 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:251 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:133 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:111 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:113 +msgid "There is insufficient free space on the storage card" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:230 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:210 +msgid "Sending metadata to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:13 +msgid "Communicate with the Sony PRS-700 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:227 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:312 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:94 -msgid "Options to control the conversion to EPUB" +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:11 +msgid "Ordered list of formats the device will accept" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:105 -msgid "The output EPUB file. If not specified, it is derived from the input file name." +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:16 +msgid "settings for device drivers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:108 -msgid "Profile of the target device this EPUB is meant for. Set to None to create a device independent EPUB. The profile is used for device specific restrictions on the EPUB. Choices are: " +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:25 +msgid "Communicate with an eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:113 -msgid "Either the path to a CSS stylesheet or raw CSS. This CSS will override any existing CSS declarations in the source files." +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:173 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:181 +msgid "Adding books to device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:117 -msgid "Control auto-detection of document structure." +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:199 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:204 +msgid "Removing books from device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:122 -msgid "" -"An XPath expression to detect chapter titles. The default is to consider

or\n" -"

tags that contain the words \"chapter\",\"book\",\"section\" or \"part\" as chapter titles as \n" -"well as any tags that have class=\"chapter\". \n" -"The expression used must evaluate to a list of elements. To disable chapter detection,\n" -"use the expression \"/\". See the XPath Tutorial in the calibre User Manual for further\n" -"help on using this feature.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:132 -msgid "Specify how to mark detected chapters. A value of \"pagebreak\" will insert page breaks before chapters. A value of \"rule\" will insert a line before chapters. A value of \"none\" will disable chapter marking and a value of \"both\" will use both page breaks and lines to mark chapters." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:139 -msgid "Path to the cover to be used for this book" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:142 -msgid "Use the cover detected from the source file in preference to the specified cover." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:145 -msgid "Remove the first image from the input ebook. Useful if the first image in the source file is a cover and you are specifying an external cover." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:149 -msgid "Turn off splitting at page breaks. Normally, input files are automatically split at every page break into two files. This gives an output ebook that can be parsed faster and with less resources. However, splitting is slow and if your source file contains a very large number of page breaks, you should turn off splitting on page breaks." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:157 -msgid "XPath expression to detect page boundaries for building a custom pagination map, as used by AdobeDE. Default is not to build an explicit pagination map." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:161 -msgid "XPath expression to find the name of each page in the pagination map relative to its boundary element. Default is to number all pages staring with 1." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:165 -msgid "" -"Control the automatic generation of a Table of Contents. If an OPF file is detected\n" -"and it specifies a Table of Contents, then that will be used rather than trying\n" -"to auto-generate a Table of Contents.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:171 -msgid "Maximum number of links to insert into the TOC. Set to 0 to disable. Default is: %default. Links are only added to the TOC if less than the --toc-threshold number of chapters were detected." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:175 -msgid "Don't add auto-detected chapters to the Table of Contents." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:177 -msgid "If fewer than this number of chapters is detected, then links are added to the Table of Contents. Default: %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:180 -msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level one. If this is specified, it takes precedence over other forms of auto-detection." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:184 -msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level two. Each entry is added under the previous level one entry." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:188 -msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level three. Each entry is added under the previous level two entry." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:192 -msgid "Path to a .ncx file that contains the table of contents to use for this ebook. The NCX file should contain links relative to the directory it is placed in. See http://www.niso.org/workrooms/daisy/Z39-86-2005.html#NCX for an overview of the NCX format." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:198 -msgid "Normally, if the source file already has a Table of Contents, it is used in preference to the auto-generated one. With this option, the auto-generated one is always used." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:202 -msgid "Control page layout" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:204 -msgid "Set the top margin in pts. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:206 -msgid "Set the bottom margin in pts. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:208 -msgid "Set the left margin in pts. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:210 -msgid "Set the right margin in pts. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:212 -msgid "The base font size in pts. Default is %defaultpt. Set to 0 to disable rescaling of fonts." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:215 -msgid "Remove spacing between paragraphs. Also sets a indent on paragraphs of 1.5em. You can override this by adding p {text-indent: 0cm} to --override-css. Spacing removal will not work if the source file forces inter-paragraph spacing." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:221 -msgid "Do not force text to be justified in output." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:223 -msgid "Remove table markup, converting it into paragraphs. This is useful if your source file uses a table to manage layout." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:226 -msgid "Preserve the HTML tag structure while splitting large HTML files. This is only neccessary if the HTML files contain CSS that uses sibling selectors. Enabling this greatly slows down processing of large HTML files." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:232 -msgid "Print generated OPF file to stdout" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:234 -msgid "Print generated NCX file to stdout" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:237 -msgid "Keep intermediate files during processing by html2epub" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:239 -msgid "Extract the contents of the produced EPUB file to the specified directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_any.py:187 -msgid "" -"%%prog [options] filename\n" -"\n" -"Convert any of a large number of ebook formats to a %s file. Supported formats are: %s\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:105 -msgid "Could not find an ebook inside the archive" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:262 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Convert a HTML file to an EPUB ebook. Recursively follows links in the HTML file.\n" -"If you specify an OPF file instead of an HTML file, the list of links is takes from\n" -"the element of the OPF file.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:519 -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:758 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:621 -msgid "Output written to " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:541 -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1158 -msgid "You must specify an input HTML file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/iterator.py:36 -msgid "%s format books are not supported" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:30 -msgid "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:149 -msgid "\t\tToo much markup. Re-splitting without structure preservation. This may cause incorrect rendering." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:541 -msgid "Written processed HTML to " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:939 -msgid "Options to control the traversal of HTML" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:946 -msgid "The output directory. Default is the current directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:948 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:568 -msgid "Character encoding for HTML files. Default is to auto detect." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:950 -msgid "Create the output in a zip file. If this option is specified, the --output should be the name of a file not a directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:952 -msgid "Control the following of links in HTML files." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:954 -msgid "Traverse links in HTML files breadth first. Normally, they are traversed depth first" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:956 -msgid "Maximum levels of recursion when following links in HTML files. Must be non-negative. 0 implies that no links in the root HTML file are followed." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:958 -msgid "Set metadata of the generated ebook" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:960 -msgid "Set the title. Default is to autodetect." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:962 -msgid "The author(s) of the ebook, as a & separated list." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:964 -msgid "The subject(s) of this book, as a comma separated list." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:966 -msgid "Set the publisher of this book." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:968 -msgid "A summary of this book." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:970 -msgid "Load metadata from the specified OPF file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:972 -msgid "Options useful for debugging" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:974 -msgid "Be more verbose while processing. Can be specified multiple times to increase verbosity." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:976 -msgid "Output HTML is \"pretty printed\" for easier parsing by humans" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/html.py:982 -msgid "" -"%prog [options] file.html|opf\n" -"\n" -"Follow all links in an HTML file and collect them into the specified directory.\n" -"Also collects any resources like images, stylesheets, scripts, etc.\n" -"If an OPF file is specified instead, the list of files in its element\n" -"is used.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 -msgid "Creating LIT file from EPUB..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:892 -msgid "%prog [options] LITFILE" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:895 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:697 -msgid "Output directory. Defaults to current directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:898 -msgid "Legibly format extracted markup. May modify meaningful whitespace." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:901 -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:731 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:580 -msgid "Useful for debugging." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:912 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:721 -msgid "OEB ebook created in" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:725 -msgid "%prog [options] OPFFILE" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lit/writer.py:728 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/from_feeds.py:26 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:577 -msgid "Output file. Default is derived from input filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -msgid "Set the title. Default: filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 -msgid "Set the author(s). Multiple authors should be set as a comma separated list. Default: %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:81 -msgid "Set the comment." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:83 -msgid "Set the category" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:85 -msgid "Sort key for the title" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:87 -msgid "Sort key for the author" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:89 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:302 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:113 -msgid "Publisher" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 -msgid "Path to file containing image to be used as cover" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 -msgid "If there is a cover graphic detected in the source file, use that instead of the specified cover." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 -msgid "Output file name. Default is derived from input filename" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:552 -msgid "Render HTML tables as blocks of text instead of actual tables. This is neccessary if the HTML contains very large or complex tables." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 -msgid "Specify the base font size in pts. All fonts are rescaled accordingly. This option obsoletes the --font-delta option and takes precedence over it. To use --font-delta, set this to 0. Default: %defaultpt" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 -msgid "Enable autorotation of images that are wider than the screen width." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:106 -msgid "Set the space between words in pts. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:108 -msgid "Separate paragraphs by blank lines." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:110 -msgid "Add a header to all the pages with title and author." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:112 -msgid "Set the format of the header. %a is replaced by the author and %t by the title. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:114 -msgid "Add extra spacing below the header. Default is %default px." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:116 -msgid "Override the CSS. Can be either a path to a CSS stylesheet or a string. If it is a string it is interpreted as CSS." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:118 -msgid "Use the element from the OPF file to determine the order in which the HTML files are appended to the LRF. The .opf file must be in the same directory as the base HTML file." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 -msgid "Minimum paragraph indent (the indent of the first line of a paragraph) in pts. Default: %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 -msgid "Increase the font size by 2 * FONT_DELTA pts and the line spacing by FONT_DELTA pts. FONT_DELTA can be a fraction.If FONT_DELTA is negative, the font size is decreased." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:127 -msgid "Render all content as black on white instead of the colors specified by the HTML or CSS." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:133 -msgid "Profile of the target device for which this LRF is being generated. The profile determines things like the resolution and screen size of the target device. Default: %s Supported profiles: " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:139 -msgid "Left margin of page. Default is %default px." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:141 -msgid "Right margin of page. Default is %default px." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:143 -msgid "Top margin of page. Default is %default px." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:145 -msgid "Bottom margin of page. Default is %default px." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 -msgid "Render tables in the HTML as images (useful if the document has large or complex tables)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 -msgid "Multiply the size of text in rendered tables by this factor. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:154 -msgid "The maximum number of levels to recursively process links. A value of 0 means thats links are not followed. A negative value means that tags are ignored." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:158 -msgid "A regular expression. tags whose href matches will be ignored. Defaults to %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 -msgid "Don't add links to the table of contents." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:166 -msgid "Prevent the automatic detection chapters." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 -msgid "The regular expression used to detect chapter titles. It is searched for in heading tags (h1-h6). Defaults to %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:172 -msgid "Detect a chapter beginning at an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class=\"chapter\" you would use \"h\\d,class,chapter\". You can set the attribute to \"none\" to match only on tag names. So for example, to match all h2 tags, you would use \"h2,none,\". Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:174 -msgid "If html2lrf does not find any page breaks in the html file and cannot detect chapter headings, it will automatically insert page-breaks before the tags whose names match this regular expression. Defaults to %default. You can disable it by setting the regexp to \"$\". The purpose of this option is to try to ensure that there are no really long pages as this degrades the page turn performance of the LRF. Thus this option is ignored if the current page has only a few elements." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 -msgid "Force a page break before tags whose names match this regular expression." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:186 -msgid "Force a page break before an element having the specified attribute. The format for this option is tagname regexp,attribute name,attribute value regexp. For example to match all heading tags that have the attribute class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 -msgid "Add detected chapters to the table of contents." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 -msgid "Preprocess Baen HTML files to improve generated LRF." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 -msgid "You must add this option if processing files generated by pdftohtml, otherwise conversion will fail." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:196 -msgid "Use this option on html0 files from Book Designer." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:199 -msgid "" -"Specify trutype font families for serif, sans-serif and monospace fonts. These fonts will be embedded in the LRF file. Note that custom fonts lead to slower page turns. For example: --serif-family \"Times New Roman\"\n" -" " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:207 -msgid "The serif family of fonts to embed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 -msgid "The sans-serif family of fonts to embed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:213 -msgid "The monospace family of fonts to embed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:217 -msgid "Be verbose while processing" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:219 -msgid "Convert to LRS" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:221 -msgid "Minimize memory usage at the cost of longer processing times. Use this option if you are on a memory constrained machine." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:223 -msgid "Specify the character encoding of the source file. If the output LRF file contains strange characters, try changing this option. A common encoding for files from windows computers is cp-1252. Another common choice is utf-8. The default is to try and guess the encoding." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:164 -msgid "Converting from %s to LRF is not supported." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:175 -msgid "" -"any2lrf [options] myfile\n" -"\n" -"Convert any ebook format into LRF. Supported formats are:\n" -"LIT, RTF, TXT, HTML, EPUB, MOBI, PRC and PDF. any2lrf will also process a RAR or\n" -"ZIP archive, looking for an ebook inside the archive.\n" -" " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:190 -msgid "No file to convert specified." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:226 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:196 msgid "Rendered %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:229 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:199 msgid "Failed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:280 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:257 msgid "" -"Failed to process comic: %s\n" +"Failed to process comic: \n" "\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:287 -msgid "Options to control the conversion of comics (CBR, CBZ) files into ebooks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:293 -msgid "Title for generated ebook. Default is to use the filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:295 -msgid "Set the author in the metadata of the generated ebook. Default is %default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:298 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:22 -msgid "Path to output file. By default a file is created in the current directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:275 msgid "Number of colors for grayscale image conversion. Default: %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:302 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:277 msgid "Disable normalize (improve contrast) color range for pictures. Default: False" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:280 msgid "Maintain picture aspect ratio. Default is to fill the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:282 msgid "Disable sharpening." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:308 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:284 msgid "Disable trimming of comic pages. For some comics, trimming might remove content as well as borders." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:287 msgid "Don't split landscape images into two portrait images" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:313 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:289 msgid "Keep aspect ratio and scale image using screen height as image width for viewing in landscape mode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:315 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:292 msgid "Used for right-to-left publications like manga. Causes landscape pages to be split into portrait pages from right to left." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:317 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:296 msgid "Enable Despeckle. Reduces speckle noise. May greatly increase processing time." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:319 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:299 msgid "Don't sort the files found in the comic alphabetically by name. Instead use the order they were added to the comic." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:321 -msgid "Choose a profile for the device you are generating this file for. The default is the SONY PRS-500 with a screen size of 584x754 pixels. This is suitable for any reader with the same screen size. Choices are %s" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:323 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:20 -msgid "Be verbose, useful for debugging. Can be specified multiple times for greater verbosity." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:325 -msgid "Don't show progress bar." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:328 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:303 msgid "Apply no processing to the image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:439 +msgid "Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:10 msgid "" -"%prog [options] comic.cb[z|r]\n" +"input_file output_file [options]\n" "\n" -"Convert a comic in a CBZ or CBR file to an ebook.\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:393 -msgid "Output written to" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:553 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/from_comic.py:35 -msgid "Rendering comic pages..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/epub/convert_from.py:17 -msgid "" -"Usage: %prog [options] mybook.epub\n" -" \n" -" \n" -"%prog converts mybook.epub to mybook.lrf" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:23 -msgid "" -"%prog [options] mybook.fb2\n" +"Convert an ebook from one format to another.\n" "\n" +"input_file is the input and output_file is the output. Both must be specified as the first two arguments to the command.\n" "\n" -"%prog converts mybook.fb2 to mybook.lrf" +"The output ebook format is guessed from the file extension of output_file. output_file can also be of the special format .EXT where EXT is the output file extension. In this case, the name of the output file is derived the name of the input file. Note that the filenames must not start with a hyphen. Finally, if output_file has no extension, then it is treated as a directory and an \"open ebook\" (OEB) consisting of HTML files is written to that directory. These files are the files that would normally have been passed to the output plugin.\n" +"\n" +"After specifying the input and output file you can customize the conversion by specifying various options. the available options depend on the input and output file types. To get help on them specify the input and output file and then use the -h option.\n" +"\n" +"For full documentation of the conversion system see\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:28 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:24 -msgid "Print generated HTML to stdout and quit." +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:86 +msgid "INPUT OPTIONS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:30 -msgid "Keep generated HTML files after completing conversion to LRF." +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:87 +msgid "Options to control the processing of the input %s file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:20 -msgid "Options to control the behavior of feeds2disk" +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:93 +msgid "OUTPUT OPTIONS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:22 -msgid "Options to control the behavior of html2lrf" +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:94 +msgid "Options to control the processing of the output %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:44 -msgid "Fetching of recipe failed: " +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:108 +msgid "Options to control the look and feel of the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:122 +msgid "Control auto-detection of document structure." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:132 +msgid "Control the automatic generation of a Table of Contents. By default, if the source file has a Table of Contents, it will be used in preference to the automatically generated one." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:142 +msgid "Options to set metadata in the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:145 +msgid "Options to help with debugging the conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:219 +msgid "Output saved to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:71 +msgid "Level of verbosity. Specify multiple times for greater verbosity." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:78 +msgid "Specify the input profile. The input profile gives the conversion system information on how to interpret various information in the input document. For example resolution dependent lengths (i.e. lengths in pixels). Choices are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:89 +msgid "Specify the output profile. The output profile tells the conversion system how to optimize the created document for the specified device. In some cases, an output profile is required to produce documents that will work on a device. For example EPUB on the SONY reader. Choices are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:100 +msgid "The base font size in pts. All font sizes in the produced book will be rescaled based on this size. By choosing a larger size you can make the fonts in the output bigger and vice versa. By default, the base font size is chosen based on the output profile you chose." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:110 +msgid "Mapping from CSS font names to font sizes in pts. An example setting is 12,12,14,16,18,20,22,24. These are the mappings for the sizes xx-small to xx-large, with the final size being for huge fonts. The font rescaling algorithm uses these sizes to intelligently rescale fonts. The default is to use a mapping based on the output profile you chose." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:122 +msgid "Disable all rescaling of font sizes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:129 +msgid "The line height in pts. Controls spacing between consecutive lines of text. By default no line height manipulation is performed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:137 +msgid "Some badly designed documents use tables to control the layout of text on the page. When converted these documents often have text that runs off the page and other artifacts. This option will extract the content from the tables and present it in a linear fashion." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:147 +msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level one. If this is specified, it takes precedence over other forms of auto-detection." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:156 +msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level two. Each entry is added under the previous level one entry." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:164 +msgid "XPath expression that specifies all tags that should be added to the Table of Contents at level three. Each entry is added under the previous level two entry." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:172 +msgid "Normally, if the source file already has a Table of Contents, it is used in preference to the auto-generated one. With this option, the auto-generated one is always used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:180 +msgid "Don't add auto-detected chapters to the Table of Contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:187 +msgid "If fewer than this number of chapters is detected, then links are added to the Table of Contents. Default: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:194 +msgid "Maximum number of links to insert into the TOC. Set to 0 to disable. Default is: %default. Links are only added to the TOC if less than the threshold number of chapters were detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:202 +msgid "Remove entries from the Table of Contents whose titles match the specified regular expression. Matching entries and all their children are removed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:213 +msgid "An XPath expression to detect chapter titles. The default is to consider

or

tags that contain the words \"chapter\",\"book\",\"section\" or \"part\" as chapter titles as well as any tags that have class=\"chapter\". The expression used must evaluate to a list of elements. To disable chapter detection, use the expression \"/\". See the XPath Tutorial in the calibre User Manual for further help on using this feature." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:227 +msgid "Specify how to mark detected chapters. A value of \"pagebreak\" will insert page breaks before chapters. A value of \"rule\" will insert a line before chapters. A value of \"none\" will disable chapter marking and a value of \"both\" will use both page breaks and lines to mark chapters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:237 +msgid "Either the path to a CSS stylesheet or raw CSS. This CSS will be appended to the style rules from the source file, so it can be used to override those rules." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:246 +msgid "An XPath expression. Page breaks are inserted before the specified elements." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:252 +msgid "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:257 +msgid "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:262 +msgid "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:267 +msgid "Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:272 +msgid "Do not force text to be justified in output. Whether text is actually displayed justified or not depends on whether the ebook format and reading device support justification." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:279 +msgid "Remove spacing between paragraphs. Also sets an indent on paragraphs of 1.5em. Spacing removal will not work if the source file does not use paragraphs (

or

tags)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:286 +msgid "Use the cover detected from the source file in preference to the specified cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:292 +msgid "Insert a blank line between paragraphs. Will not work if the source file does not use paragraphs (

or

tags)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:299 +msgid "Remove the first image from the input ebook. Useful if the first image in the source file is a cover and you are specifying an external cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:307 +msgid "Insert the book metadata at the start of the book. This is useful if your ebook reader does not support displaying/searching metadata directly." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:315 +msgid "Attempt to detect and correct hard line breaks and other problems in the source file. This may make things worse, so use with care." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:325 +msgid "Read metadata from the specified OPF file. Metadata read from this file will override any metadata in the source file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:35 +msgid "Set the title." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:337 +msgid "Set the authors. Multiple authors should be separated by ampersands." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:342 +msgid "The version of the title to be used for sorting. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:346 +msgid "String to be used when sorting by author. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:350 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:49 +msgid "Set the cover to the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:354 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:51 +msgid "Set the ebook description." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:358 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:53 +msgid "Set the ebook publisher." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:57 +msgid "Set the series this ebook belongs to." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:59 +msgid "Set the index of the book in this series." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:370 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:61 +msgid "Set the rating. Should be a number between 1 and 5." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:374 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:63 +msgid "Set the ISBN of the book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:378 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:65 +msgid "Set the tags for the book. Should be a comma separated list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:382 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:67 +msgid "Set the book producer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:69 +msgid "Set the language." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:389 +msgid "List available recipes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:458 +msgid "Could not find an ebook inside the archive" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:585 +msgid "Converting input to HTML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:598 +msgid "Running transforms on ebook..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:667 +msgid "Creating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:29 +msgid "Extract the contents of the generated EPUB file to the specified directory. The contents of the directory are first deleted, so be careful." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:35 +msgid "Turn off splitting at page breaks. Normally, input files are automatically split at every page break into two files. This gives an output ebook that can be parsed faster and with less resources. However, splitting is slow and if your source file contains a very large number of page breaks, you should turn off splitting on page breaks." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:46 +msgid "Split all HTML files larger than this size (in KB). This is necessary as most EPUB readers cannot handle large file sizes. The default of %defaultKB is the size required for Adobe Digital Editions." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:241 +msgid "Traverse links in HTML files breadth first. Normally, they are traversed depth first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:248 +msgid "Maximum levels of recursion when following links in HTML files. Must be non-negative. 0 implies that no links in the root HTML file are followed. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:257 +msgid "Normally this input plugin re-arranges all the input files into a standard folder hierarchy. Only use this option if you know what you are doing as it can result in various nasty side effects in the rest of of the conversion pipeline." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 +msgid "Creating LIT file from EPUB..." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:321 @@ -988,55 +916,32 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1772 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1773 msgid "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1774 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1775 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1796 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1826 -msgid "You have to save the website %s as an html file first and then run html2lrf on it." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1869 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1863 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1872 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1866 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1990 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 -msgid "" -"Usage: %prog [options] mybook.html\n" -"\n" -"\n" -"%prog converts mybook.html to mybook.lrf. \n" -"%prog follows all links in mybook.html that point \n" -"to local files recursively. Thus, you can use it to \n" -"convert a whole tree of HTML files." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lit/convert_from.py:15 -msgid "" -"Usage: %prog [options] mybook.lit\n" -"\n" -"\n" -"%prog converts mybook.lit to mybook.lrf" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:136 msgid "" "%prog book.lrf\n" @@ -1086,11 +991,11 @@ msgstr "" msgid "Convert LRS to LRS, useful for debugging." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:458 msgid "Invalid LRF file. Could not set metadata." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:583 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -1099,221 +1004,256 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:587 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:42 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 msgid "Set the book title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 msgid "Set sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 msgid "Set the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:596 msgid "Set sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:595 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:598 msgid "The category this book belongs to. E.g.: History" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:601 msgid "Path to a graphic that will be set as this files' thumbnail" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:601 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 msgid "Path to a txt file containing the comment to be stored in the lrf file." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 msgid "Extract thumbnail from LRF file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:195 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set the publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 msgid "Set the book classification" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Set the book creator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:612 msgid "Set the book producer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:614 msgid "Extract cover from LRF file. Note that the LRF format has no defined cover, so we use some heuristics to guess the cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:616 msgid "Set book ID" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/mobi/convert_from.py:43 -msgid "" -"Usage: %prog [options] mybook.mobi|prc\n" -"\n" -"\n" -"%prog converts mybook.mobi to mybook.lrf" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:77 +msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:49 -msgid "Could not find pdftohtml, check it is in your PATH" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:81 +msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:75 -msgid " is an image based PDF. Only conversion of text based PDFs is supported." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:84 +msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:94 -msgid "" -"%prog [options] mybook.pdf\n" -"\n" -"\n" -"%prog converts mybook.pdf to mybook.lrf" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:87 +msgid "Set the format of the header. %a is replaced by the author and %t by the title. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:403 -msgid "Path to output directory in which to create the HTML file. Defaults to current directory." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:91 +msgid "Add extra spacing below the header. Default is %default pt." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:405 -msgid "Be more verbose." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94 +msgid "Minimum paragraph indent (the indent of the first line of a paragraph) in pts. Default: %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:417 -msgid "You must specify a single PDF file." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:99 +msgid "Render tables in the HTML as images (useful if the document has large or complex tables)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:21 -msgid "" -"%prog [options] mybook.rtf\n" -"\n" -"\n" -"%prog converts mybook.rtf to mybook.lrf" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104 +msgid "Multiply the size of text in rendered tables by this factor. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:146 -msgid "This RTF file has a feature calibre does not support. Convert it to HTML and then convert it." +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:108 +msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:19 -msgid "" -"%prog [options] mybook.txt\n" -"\n" -"\n" -"%prog converts mybook.txt to mybook.lrf" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:111 +msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:44 -msgid "Set the authors" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:114 +msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:48 -msgid "Set the comment" +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:139 +msgid "Comic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:340 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:361 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:971 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:998 msgid "Title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:301 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:341 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:972 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:999 msgid "Author(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:303 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:122 +msgid "Publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49 msgid "Producer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:344 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:489 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:312 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:311 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:915 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:975 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:352 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1002 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 msgid "Tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:50 msgid "Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:315 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:355 msgid "Language" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:914 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:941 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:204 -msgid "A comma separated list of tags to set" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:120 +msgid "Published" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:206 -msgid "The series to which this book belongs" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:9 +msgid "options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:208 -msgid "The series index" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:10 +msgid "" +"\n" +"Read/Write metadata from/to ebook files.\n" +"\n" +"Supported formats for reading metadata: %s\n" +"\n" +"Supported formats for writing metadata: %s\n" +"\n" +"Different file types support different kinds of metadata. If you try to set\n" +"some metadata on a file type that does not support it, the metadata will be\n" +"silently ignored.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:210 -msgid "The book language" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:37 +msgid "Set the authors. Multiple authors should be separated by the & character. Author names should be in the order Firstname Lastname." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:212 -msgid "Extract the cover" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:41 +msgid "The version of the title to be used for sorting. If unspecified, and the title is specified, it will be auto-generated from the title." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:54 -msgid "Usage:" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:45 +msgid "String to be used when sorting by author. If unspecified, and the author(s) are specified, it will be auto-generated from the author(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:53 -msgid "Usage: imp-meta file.imp" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:55 +msgid "Set the book category." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/imp.py:54 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:116 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rb.py:60 -msgid "No filename specified." +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72 +msgid "Get the cover from the ebook and save it at as the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:75 +msgid "Specify the name of an OPF file. The metadata will be written to the OPF file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:78 +msgid "Read metadata from the specified OPF file and use it to set metadata in the ebook. Metadata specified on thecommand line will override metadata read from the OPF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83 +msgid "Set the BookID in LRF files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:141 +msgid "No file specified" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:156 +msgid "Original metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:173 +msgid "Changed metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:185 +msgid "OPF created in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:191 +msgid "Cover saved to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:193 +msgid "No cover found" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:98 @@ -1369,528 +1309,998 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:43 -msgid "Usage: %s file.lit" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:53 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:240 -msgid "Cover saved to" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:191 -msgid "Set the subject tags" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:193 -msgid "Set the language" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:197 -msgid "Set the ISBN" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1026 -msgid "Set the dc:language field" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:115 -msgid "Usage: pdf-meta file.pdf" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rb.py:59 -msgid "Usage: rb-meta file.rb" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/from_any.py:55 -msgid "Creating Mobipocket file from EPUB..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:695 -msgid "%prog [options] myebook.mobi" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:719 -msgid "Raw MOBI HTML saved in" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:536 -msgid "Options to control the conversion to MOBI" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:543 -msgid "Mobipocket-specific options." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:545 -msgid "Compress file text using PalmDOC compression. Results in smaller files, but takes a long time to run." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:548 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:21 msgid "Modify images to meet Palm device size limitations." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:550 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:25 +msgid "When present, use author sort field as author." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 msgid "Title for any generated in-line table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:556 -msgid "When present, use the author sorting information for generating the Mobipocket author metadata." +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:32 +msgid "When present, generate a periodical rather than a book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:558 -msgid "Device renderer profiles. Affects conversion of font sizes, image rescaling and rasterization of tables. Valid profiles are: %s." +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:36 +msgid "Disable generation of MOBI index." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:563 -msgid "Source renderer profile. Default is %default." +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 +msgid "Disable compression of the file contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:566 -msgid "Destination renderer profile. Default is %default." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:574 -msgid "[options]" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:592 -msgid "Unknown source profile %r" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer.py:596 -msgid "Unknown destination profile %r" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:57 -msgid "The output directory. Defaults to the current directory." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:829 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1164 msgid "Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:830 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1165 msgid "Title Page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:831 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:47 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1166 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:167 msgid "Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:832 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1167 msgid "Index" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:833 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1168 msgid "Glossary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:834 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1169 msgid "Acknowledgements" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:835 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1170 msgid "Bibliography" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:836 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1171 msgid "Colophon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:837 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1172 msgid "Copyright" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:838 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1173 msgid "Dedication" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:839 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1174 msgid "Epigraph" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:840 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1175 msgid "Foreword" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:841 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1176 msgid "List of Illustrations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:842 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1177 msgid "List of Tables" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:843 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1178 msgid "Notes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:844 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1179 msgid "Preface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:845 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1180 msgid "Main Text" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:13 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:53 +msgid "Options to control e-book conversion." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:60 +msgid "Character encoding for input. Default is to auto detect." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62 +msgid "Output file. Default is derived from input filename." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:64 +msgid "Produce more human-readable XML output." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:66 +msgid "Useful for debugging." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:71 +msgid "Usage: ebook-convert INFILE OUTFILE [OPTIONS..]" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:38 +msgid "%s format books are not supported" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 +msgid "HTML TOC generation options." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:85 +msgid "Book Jacket" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/split.py:34 +msgid "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:32 +msgid "OPF/NCX/etc. generation options." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:35 +msgid "OPF version to generate. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:37 +msgid "Generate an Adobe \"page-map\" file if pagination information is avaliable." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:112 +msgid "Footnotes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:121 +msgid "Sidebar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:23 +msgid "Format to use inside the pdb container. Choices are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/cli.py:31 +msgid "" +"command ...\n" +"\n" +"command can be one of the following:\n" +"[%%commands]\n" +"\n" +"Use %prog command --help to get more information about a specific command\n" +"\n" +"Manipulate a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:28 +msgid "" +"[options] file.pdf\n" +"\n" +"Crop a PDF file.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:41 +msgid "Path to output file. By default a file is created in the current directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:40 +msgid "Number of pixels to crop from the left most x (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:43 +msgid "Number of pixels to crop from the left most y (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:46 +msgid "Number of pixels to crop from the right most x (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:49 +msgid "Number of pixels to crop from the right most y (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:52 +msgid "A file generated by ghostscript which allows each page to be individually cropped `gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox file.pdf 2> bounding`" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:72 +msgid "Crop Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:72 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 msgid "Options to control the transformation of pdf" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:24 -msgid "Number of pixels to crop from the left most x (default is %d) " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:26 -msgid "Number of pixels to crop from the left most y (default is %d) " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:28 -msgid "Number of pixels to crop from the right most x (default is %d) " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:30 -msgid "Number of pixels to crop from the right most y (default is %d)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:32 -msgid "A file generated by ghostscript which allows each page to be individually cropped [gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox > bounding] " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftrim.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:25 msgid "" -"\t%prog [options] file.pdf\n" +"[options] file.pdf password\n" "\n" -"\tCrops a pdf. \n" -"\t" +"Decrypt a PDF.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:27 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:62 +msgid "Decrypt Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:23 +msgid "" +"[options] file.pdf password\n" +"\n" +"Encrypt a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:52 +msgid "Encrypt Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:21 +msgid "" +"file.pdf ...\n" +"\n" +"Get info about a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:46 +msgid "Author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:47 +msgid "Subject" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:48 +msgid "Creator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:50 +msgid "Pages" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:51 +msgid "File Size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 +msgid "PDF Version" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:25 +msgid "" +"[options] file1.pdf file2.pdf ...\n" +"\n" +"Metadata will be used from the first PDF specified.\n" +"\n" +"Merges individual PDFs.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 +msgid "Merge Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:25 +msgid "" +"[options] file.pdf\n" +"\n" +"Reverse a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +msgid "Reverse Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:24 +msgid "" +"file.pdf degrees\n" +"\n" +"Rotate pages of a PDF clockwise.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +msgid "Rotate Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:25 +msgid "" +"\n" +"%prog %%name [options] file.pdf page_to_split_on ...\n" +"%prog %%name [options] file.pdf page_range_to_split_on ...\n" +"\t\n" +"Ex.\n" +"\t\n" +"%prog %%name file.pdf 6\n" +"%prog %%name file.pdf 6-12\n" +"%prog %%name file.pdf 6-12 8 10 9-20\n" +"\n" +"Split a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 +msgid "Split Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:33 +msgid "The unit of measure. Default is inch. Choices are %s Note: This does not override the unit for margins!" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:38 +msgid "The size of the paper. This size will be overridden when an output profile is used. Default is letter. Choices are %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:42 +msgid "Custom size of the document. Use the form widthxheight EG. `123x321` to specify the width and height. This overrides any specified paper-size." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:47 +msgid "The orientation of the page. Default is portrait. Choices are %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:52 +msgid "Could not find pdftohtml, check it is in your PATH" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:75 +msgid " is an image based PDF. Only conversion of text based PDFs is supported." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:75 +msgid "This RTF file has a feature calibre does not support. Convert it to HTML first and then try it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:23 +msgid "Type of newline to use. Options are %s. Default is 'system'. Use 'old_mac' for compatibility with Mac OS 9 and earlier. For Mac OS X use 'unix'. 'system' will default to the newline type used by this OS." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:474 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:30 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:31 -msgid "The format to use when saving single files to disk" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:32 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:34 msgid "Toolbar icon size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:36 msgid "Show button labels in the toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:38 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:40 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:42 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:44 msgid "Sort tags list by popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:46 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:48 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:50 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:52 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:54 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:57 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 msgid "Delete books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 msgid "Show the cover flow in a separate window instead of in the main calibre window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:87 -msgid "Added %s to library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:89 -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:162 -msgid "Read metadata from " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:224 -msgid "

Books with the same title as the following already exist in the database. Add them anyway?